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

[isis] branch ISIS-2444 updated (d0f87c5 -> 9dad87b)

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

danhaywood pushed a change to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git.


 discard d0f87c5  ISIS-2444: improvements on overview and index tooling commands
 discard 797d0b1  ISIS-2444: splits tooling into two commands
     add 250d52d  ISIS-2511: rationalize core namespaces
     add 10dcfa1  ISIS-2511: move Timestample and co-interfaces from
     add b9364cd  ISIS-2511: rationalize viewer namespaces
     add 3518411  ISIS-2511: rationalize remaining namespaces
     add 45cabc1  ISIS-2504: rename config option isis.persistence.jpa -> isis.persistence.schema
     add 08aa2ee  ISIS-2504: move datasource inspection logic to 'config'
     add 26c11fa  ISIS-2504: revert some changes of the prev. commit
     add b886ed2  ISIS-2504: reverts isis.persistence.jpa -> isis.persistence.schema
     add 7cf3966  ISIS-2445: CI: attempted fix for groovy install
     add e74b539  ISIS-2445: CI: skip index generation (for now)
     add 054bdae  ISIS-2484: restore CLI landing page and with link to new sources
     add 69f94de  ISIS-2484: fixes link, restores lost edits (CLI doc)
     add c08eecf  ISIS-2444: adds README for Apache Isis Persistence JDO (Spring)
     add e70e350  ISIS-2444: more comments (README for JDO Spring)
     add 7cfc00f  ISIS-2512: bring in original tests
     add 30dbc54  Bump shiro.version from 1.7.0 to 1.7.1
     add 7a6a29e  Merge pull request #359 from apache/dependabot/maven/shiro.version-1.7.1
     add 48c3a53  Bump mapstruct-processor from 1.4.1.Final to 1.4.2.Final
     add 683b8b3  Merge pull request #360 from apache/dependabot/maven/org.mapstruct-mapstruct-processor-1.4.2.Final
     new 4e54b03  ISIS-2444: splits tooling into two commands
     new 5510619  ISIS-2444: improvements on overview and index tooling commands
     new 140ba15  ISIS-2444: regenerating configs and examples
     new 9dad87b  ISIS-2444: adds {@index} to classes to add to the global index.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (d0f87c5)
            \
             N -- N -- N   refs/heads/ISIS-2444 (9dad87b)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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


Summary of changes:
 .github/workflows/ci-build-site-no-push.yml        |   5 +-
 .../modules/ROOT/pages/cutting-a-release.adoc      |  13 +
 .../modules/ROOT/pages/2020/2.0.0-M5/mignotes.adoc |  10 +-
 .../applib/services/wrapper/WrapperFactory.adoc    |   2 +-
 .../having/HasUpdatedAt.adoc}                      |   4 +-
 .../having/HasUpdatedBy.adoc}                      |   4 +-
 .../xmlsnapshot/XmlSnapshotServiceDefault.adoc     |  33 -
 .../modules/generated/pages/system-overview.adoc   | 224 ++++--
 .../org/apache/isis/applib/AbstractViewModel.java  |   5 +-
 .../org/apache/isis/applib/IsisModuleApplib.java   |   5 +-
 .../isis/applib/RecreatableDomainObject.java       |   3 +-
 .../java/org/apache/isis/applib/ViewModel.java     |   1 +
 .../adapters/AbstractValueSemanticsProvider.java   |   4 +-
 .../isis/applib/adapters/DefaultsProvider.java     |   3 +-
 .../isis/applib/adapters/EncoderDecoder.java       |   1 +
 .../isis/applib/adapters/EncodingException.java    |   3 +-
 .../isis/applib/adapters/ParsingException.java     |   1 +
 .../apache/isis/applib/annotation/Defaulted.java   |   8 +-
 .../isis/applib/annotation/DomainObjectLayout.java |   3 +-
 .../isis/applib/annotation/EntityChangeKind.java   |   8 +-
 .../client/RepresentationTypeSimplifiedV2.java     |  47 +-
 .../org/apache/isis/applib/clock/VirtualClock.java |  45 +-
 .../apache/isis/applib/events/EventObjectBase.java |   1 -
 .../applib/events/domain/AbstractDomainEvent.java  |   2 +-
 .../applib/events/domain/ActionDomainEvent.java    |   2 +-
 .../events/domain/CollectionDomainEvent.java       |   2 +-
 .../applib/events/domain/PropertyDomainEvent.java  |   2 +-
 .../events/lifecycle/AbstractLifecycleEvent.java   |   2 +-
 .../events/lifecycle/ObjectCreatedEvent.java       |   2 +-
 .../applib/events/lifecycle/ObjectLoadedEvent.java |   2 +-
 .../events/lifecycle/ObjectPersistedEvent.java     |   2 +-
 .../events/lifecycle/ObjectPersistingEvent.java    |   2 +-
 .../events/lifecycle/ObjectRemovingEvent.java      |   4 +-
 .../events/lifecycle/ObjectUpdatedEvent.java       |   4 +-
 .../events/lifecycle/ObjectUpdatingEvent.java      |   4 +-
 .../isis/applib/events/ui/AbstractUiEvent.java     |   2 +-
 .../isis/applib/events/ui/CssClassUiEvent.java     |   3 +-
 .../apache/isis/applib/events/ui/IconUiEvent.java  |   4 +-
 .../isis/applib/events/ui/LayoutUiEvent.java       |   3 +-
 .../apache/isis/applib/events/ui/TitleUiEvent.java |   3 +-
 .../unrecoverable/DomainModelException.java        |   2 +
 .../unrecoverable/MetaModelException.java          |   3 +
 .../unrecoverable/NoAuthenticatorException.java    |   2 +
 .../unrecoverable/ObjectNotFoundException.java     |   4 +-
 .../unrecoverable/ObjectPersistenceException.java  |   3 +
 .../unrecoverable/ReflectiveActionException.java   |   3 +
 .../unrecoverable/RepositoryException.java         |   2 +-
 .../unrecoverable/UnexpectedCallException.java     |   2 +
 .../unrecoverable/UnknownTypeException.java        |   3 +
 .../java/org/apache/isis/applib/graph/Edge.java    |   7 +-
 .../java/org/apache/isis/applib/graph/Vertex.java  |   5 +-
 .../isis/applib/graph/tree/LazyTreeNode.java       |   3 +
 .../apache/isis/applib/jaxb/DataTypeFactory.java   |   3 +
 .../JavaSqlXMLGregorianCalendarMarshalling.java    |   3 +
 .../isis/applib/jaxb/JavaTimeJaxbAdapters.java     |   5 +-
 .../JavaTimeXMLGregorianCalendarMarshalling.java   |   3 +
 .../isis/applib/jaxb/JodaTimeJaxbAdapters.java     |   3 +
 .../JodaTimeXMLGregorianCalendarMarshalling.java   |   3 +
 .../applib/jaxb/PersistentEntitiesAdapter.java     |   2 +-
 .../isis/applib/jaxb/PersistentEntityAdapter.java  |   2 +-
 .../isis/applib/jaxb/PrimitiveJaxbAdapters.java    |   3 +
 .../applib/layout/component/ActionLayoutData.java  |   3 +-
 .../layout/component/ActionLayoutDataOwner.java    |   3 +
 .../layout/component/CollectionLayoutData.java     |   2 +
 .../component/CollectionLayoutDataOwner.java       |   4 +-
 .../layout/component/CssClassFaPosition.java       |   3 +
 .../layout/component/DomainObjectLayoutData.java   |   2 +
 .../component/DomainObjectLayoutDataOwner.java     |   3 +
 .../isis/applib/layout/component/FieldSet.java     |   2 +
 .../applib/layout/component/FieldSetOwner.java     |   3 +
 .../isis/applib/layout/component/HasNamed.java     |   3 +
 .../isis/applib/layout/component/MemberRegion.java |   2 +
 .../applib/layout/component/MemberRegionOwner.java |   3 +
 .../apache/isis/applib/layout/component/Owned.java |   3 +
 .../apache/isis/applib/layout/component/Owner.java |   4 +-
 .../layout/component/PropertyLayoutData.java       |   2 +
 .../layout/component/ServiceActionLayoutData.java  |   2 +
 .../component/ServiceActionLayoutDataOwner.java    |   3 +
 .../org/apache/isis/applib/layout/grid/Grid.java   |   2 +
 .../isis/applib/layout/grid/GridAbstract.java      |   4 +-
 .../applib/layout/grid/bootstrap3/BS3ClearFix.java |   3 +
 .../layout/grid/bootstrap3/BS3ClearFixHidden.java  |   2 +
 .../layout/grid/bootstrap3/BS3ClearFixVisible.java |   2 +
 .../isis/applib/layout/grid/bootstrap3/BS3Col.java |   2 +
 .../applib/layout/grid/bootstrap3/BS3Element.java  |   3 +
 .../layout/grid/bootstrap3/BS3ElementAbstract.java |   4 +-
 .../applib/layout/grid/bootstrap3/BS3Grid.java     |   2 +
 .../isis/applib/layout/grid/bootstrap3/BS3Row.java |   2 +
 .../layout/grid/bootstrap3/BS3RowContent.java      |   1 +
 .../layout/grid/bootstrap3/BS3RowContentOwner.java |   3 +
 .../applib/layout/grid/bootstrap3/BS3RowOwner.java |   3 +
 .../isis/applib/layout/grid/bootstrap3/BS3Tab.java |   2 +
 .../applib/layout/grid/bootstrap3/BS3TabGroup.java |   2 +
 .../layout/grid/bootstrap3/BS3TabGroupOwner.java   |   3 +
 .../applib/layout/grid/bootstrap3/BS3TabOwner.java |   3 +
 .../isis/applib/layout/grid/bootstrap3/Size.java   |   2 +
 .../applib/layout/grid/bootstrap3/SizeSpan.java    |   3 +
 .../applib/layout/grid/bootstrap3/WithinGrid.java  |   3 +
 .../org/apache/isis/applib/layout/links/Link.java  |   3 +
 .../isis/applib/layout/menubars/HasNamed.java      |   5 +-
 .../apache/isis/applib/layout/menubars/Menu.java   |   3 +
 .../isis/applib/layout/menubars/MenuBar.java       |   5 +-
 .../isis/applib/layout/menubars/MenuBars.java      |   3 +
 .../applib/layout/menubars/MenuBarsAbstract.java   |   5 +-
 .../isis/applib/layout/menubars/MenuSection.java   |   5 +-
 .../applib/layout/menubars/bootstrap3/BS3Menu.java |   2 +
 .../layout/menubars/bootstrap3/BS3MenuBar.java     |   2 +
 .../layout/menubars/bootstrap3/BS3MenuBars.java    |   6 +-
 .../layout/menubars/bootstrap3/BS3MenuSection.java |   4 +-
 .../apache/isis/applib/mixins/MixinConstants.java  |   3 +
 .../org/apache/isis/applib/mixins/dto/Dto.java     |   3 +
 .../isis/applib/mixins/dto/Dto_downloadXml.java    |   3 +
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |   5 +-
 .../mixins/layout/Object_downloadLayoutXml.java    |   3 +
 .../applib/mixins/layout/Object_openRestApi.java   |   3 +
 .../mixins/layout/Object_rebuildMetamodel.java     |   3 +
 .../metamodel/Object_downloadMetamodelXml.java     |   5 +-
 .../mixins/metamodel/Object_objectIdentifier.java  |  13 +-
 .../applib/mixins/metamodel/Object_objectType.java |   7 +-
 .../applib/mixins/timestamp/Timestampable.java     |  22 -
 .../isis/applib/mixins/timestamp/package-info.java |  25 -
 .../isis/applib/query/AllInstancesQuery.java       |   2 +-
 .../org/apache/isis/applib/query/NamedQuery.java   |   8 +-
 .../java/org/apache/isis/applib/query/Query.java   |  24 +-
 .../services/acceptheader/AcceptHeaderService.java |   2 -
 .../applib/services/bookmark/BookmarkHolder.java   |   3 +-
 .../services/bookmark/BookmarkHolder_lookup.java   |   7 +-
 .../services/bookmark/BookmarkHolder_object.java   |   7 +-
 .../isis/applib/services/clock/ClockService.java   |  11 +-
 .../CommandDtoProcessorForActionAbstract.java      |   2 +
 .../CommandDtoProcessorForPropertyAbstract.java    |   2 +
 .../spi/CommandDtoProcessorServiceIdentity.java    |   4 +-
 .../services/confview/ConfigurationMenu.java       |   7 +-
 .../services/confview/ConfigurationProperty.java   |   1 -
 .../confview/ConfigurationViewService.java         |   1 -
 .../services/conmap/ContentMappingService.java     |   4 +-
 .../isis/applib/services/error/SimpleTicket.java   |   2 +
 .../exceprecog/ExceptionRecognizerAbstract.java    |   7 +-
 .../exceprecog/ExceptionRecognizerForType.java     |  27 +-
 .../exceprecog/ExceptionRecognizerService.java     |   3 +-
 .../applib/services/factory/FactoryService.java    |   8 +-
 .../applib/services/grid/GridLoaderService.java    |   3 +-
 .../isis/applib/services/grid/GridService.java     |   3 +-
 .../applib/services/grid/GridSystemService.java    |   3 +-
 .../apache/isis/applib/services/health/Health.java |   1 -
 .../applib/services/health/HealthCheckService.java |   3 +-
 .../isis/applib/services/hint/HintStore.java       |   2 +-
 .../isis/applib/services/i18n/LocaleProvider.java  |   3 +-
 .../applib/services/i18n/TranslatableString.java   |   1 -
 .../applib/services/i18n/TranslationService.java   |   1 -
 .../isis/applib/services/layout/LayoutService.java |   3 +-
 .../applib/services/layout/LayoutServiceMenu.java  |   3 +-
 .../applib/services/linking/DeepLinkService.java   |   4 +-
 .../services/menu/MenuBarsLoaderService.java       |   3 +-
 .../isis/applib/services/menu/MenuBarsService.java |   3 +-
 .../applib/services/message/MessageService.java    |   3 +-
 .../services/metamodel/MetaModelService.java       |   3 +-
 .../applib/services/metrics/MetricsService.java    |   3 +-
 .../queryresultscache/QueryResultCacheControl.java |   3 +-
 .../queryresultscache/QueryResultsCache.java       |   4 +-
 .../applib/services/registry/ServiceRegistry.java  |   3 +-
 .../applib/services/repository/EntityState.java    |   6 +-
 .../applib/services/scratchpad/Scratchpad.java     |   4 +-
 .../services/session/SessionLoggingService.java    |   5 +-
 .../session/SessionLoggingServiceLogging.java      |   3 +-
 .../TableColumnOrderForCollectionTypeAbstract.java |   3 +
 .../services/tablecol/TableColumnOrderService.java |   3 +-
 .../services/urlencoding/UrlEncodingService.java   |   3 +-
 ...rlEncodingServiceUsingBaseEncodingAbstract.java |   5 +-
 .../isis/applib/services/user/RoleMemento.java     |   7 +-
 .../isis/applib/services/user/UserMemento.java     |  47 +-
 .../services/userreg/EmailNotificationService.java |   6 +-
 .../isis/applib/services/userreg/UserDetails.java  |   3 +-
 .../userreg/events/EmailEventAbstract.java         |   2 +
 .../userreg/events/PasswordResetEvent.java         |   1 +
 .../applib/services/wrapper/InvalidException.java  |   2 -
 .../applib/services/wrapper/WrapperFactory.java    |  11 +-
 .../services/wrapper/control/ExceptionHandler.java |   1 -
 .../wrapper/control/ExceptionHandlerAbstract.java  |   3 +
 .../services/wrapper/events/AccessEvent.java       |   1 +
 .../wrapper/listeners/InteractionAdapter.java      |   3 +-
 .../wrapper/listeners/InteractionListener.java     |   3 +-
 .../services/xactn/TransactionalProcessor.java     |  31 +-
 .../services/xmlsnapshot/XmlSnapshotService.java   |   2 +-
 .../snapshot/SnapshottableWithInclusions.java      |   3 +-
 .../isis/applib/spec/AbstractSpecification.java    |   3 +-
 .../isis/applib/spec/AbstractSpecification2.java   |   3 +-
 .../org/apache/isis/applib/spec/Specification.java |   3 +-
 .../apache/isis/applib/spec/Specification2.java    |   3 +-
 .../apache/isis/applib/spec/SpecificationAnd.java  |   2 +-
 .../apache/isis/applib/spec/SpecificationNot.java  |   2 +-
 .../apache/isis/applib/spec/SpecificationOr.java   |   2 +-
 .../apache/isis/applib/types/DescriptionType.java  |   3 +
 .../isis/applib/types/MemberIdentifierType.java    |   2 +
 .../apache/isis/applib/types/TargetActionType.java |   2 +
 .../apache/isis/applib/types/TargetClassType.java  |   2 +
 .../java/org/apache/isis/applib/util/Enums.java    |   2 +-
 .../apache/isis/applib/util/ObjectContracts.java   |   3 +-
 .../org/apache/isis/applib/util/ReasonBuffer.java  |   2 +
 .../org/apache/isis/applib/util/ReasonBuffer2.java |   2 +
 .../java/org/apache/isis/applib/util/Reasons.java  |   2 +
 .../org/apache/isis/applib/util/TitleBuffer.java   |  14 +-
 .../isis/applib/util/TitleBufferException.java     |   3 +
 .../isis/applib/util/schema/ChangesDtoUtils.java   |   2 +-
 .../isis/applib/util/schema/CommandDtoUtils.java   |   2 +-
 .../isis/applib/util/schema/CommonDtoUtils.java    |  54 +-
 .../applib/util/schema/InteractionDtoUtils.java    |   7 +-
 .../util/schema/MemberExecutionDtoUtils.java       |  13 +-
 .../java/org/apache/isis/applib/value/Blob.java    |  32 +-
 .../isis/applib/value/NamedWithMimeType.java       |  16 +-
 .../org/apache/isis/schema/IsisModuleSchema.java   |   3 +
 .../apache/isis/commons/having/HasUpdatedAt.java   |   4 +-
 .../apache/isis/commons/having/HasUpdatedBy.java   |   4 +-
 .../{HasEnabling.java => HasUpdatedByAndAt.java}   |  11 +-
 core/config/pom.xml                                |  12 +
 .../adoc/modules/config/pages/sections/Other.adoc  |   2 +-
 .../modules/config/pages/sections/isis.applib.adoc |  32 +-
 .../pages/sections/isis.core.meta-model.adoc       |   2 +-
 .../isis.core.meta-model.introspector.adoc         |   4 +-
 .../sections/isis.core.meta-model.validator.adoc   |  20 +-
 .../pages/sections/isis.core.runtime-services.adoc |  10 +-
 .../config/pages/sections/isis.extensions.adoc     |  20 +-
 .../sections/isis.persistence.jdo-datanucleus.adoc |   4 +-
 .../isis.persistence.jdo-datanucleus.impl.adoc     |   9 +-
 .../config/pages/sections/isis.value-types.adoc    |  26 +-
 .../config/pages/sections/isis.viewer.wicket.adoc  |  54 +-
 .../modules/config/pages/sections/resteasy.adoc    |   2 +-
 .../apache/isis/core/config/IsisConfiguration.java | 129 ++--
 .../isis/core/config/IsisModuleCoreConfig.java     |   2 +
 .../IsisBeanFactoryPostProcessorForSpring.java     |   2 +-
 .../config/beans/IsisBeanTypeRegistryDefault.java  |   2 +-
 .../core/config/converters/PatternsConverter.java  |   2 +-
 .../DataSourceIntrospectionService.java            | 104 +++
 .../config/environment/IsisSystemEnvironment.java  |   2 +-
 .../PatternOptionalStringConstraintValidator.java  |   8 -
 .../config/viewer/wicket/WebAppContextPath.java    |   2 +-
 ...teractionAwareTransactionalBoundaryHandler.java |   2 +-
 core/pom.xml                                       |   2 +-
 .../core/runtime/events/MetamodelEventService.java |   2 +-
 .../bookmarks/BookmarkServiceDefault.java          |   2 +-
 .../runtimeservices/clock/ClockServiceDefault.java |   2 +-
 .../command/CommandDtoServiceInternalDefault.java  |   2 +-
 .../command/CommandExecutorServiceDefault.java     |   2 +-
 .../confmenu/ConfigurationViewServiceDefault.java  |   2 +-
 .../runtimeservices/email/EmailServiceDefault.java |   2 +-
 .../eventbus/EventBusServiceSpring.java            |   2 +-
 .../executor/MemberExecutorServiceDefault.java     |   2 +-
 .../factory/FactoryServiceDefault.java             |   2 +-
 .../i18n/po/TranslationServicePo.java              |   2 +-
 .../InteractionDtoServiceInternalDefault.java      |   2 +-
 .../runtimeservices/jaxb/JaxbServiceDefault.java   |   2 +-
 .../menubars/MenuBarsLoaderServiceDefault.java     |   2 +-
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |   2 +-
 .../message/MessageServiceDefault.java             |   2 +-
 .../publish/CommandPublisherDefault.java           |   2 +-
 .../publish/EntityChangesPublisherDefault.java     |   2 +-
 .../EntityPropertyChangePublisherDefault.java      |   2 +-
 .../publish/ExecutionPublisherDefault.java         |   2 +-
 .../QueryResultsCacheDefault.java                  |   2 +-
 .../ExceptionRecognizerServiceDefault.java         |   2 +-
 .../repository/RepositoryServiceDefault.java       |   6 +-
 .../routing/RoutingServiceDefault.java             |   6 +-
 .../scratchpad/ScratchpadDefault.java              |  12 +-
 .../session/InteractionFactoryDefault.java         |  17 +-
 .../runtimeservices/sudo/SudoServiceDefault.java   |   2 +-
 .../transaction/TransactionServiceSpring.java      |   2 +-
 .../UrlEncodingServiceWithCompression.java         |   2 +-
 .../runtimeservices/user/UserServiceDefault.java   |   2 +-
 .../userprof/UserProfileServiceDefault.java        |   2 +-
 .../userreg/EmailNotificationServiceDefault.java   |   5 +-
 .../wrapper/WrapperFactoryDefault.java             |   7 +-
 .../runtimeservices/xml/XmlServiceDefault.java     |   2 +-
 .../xmlsnapshot/XmlSnapshotServiceDefault.java     |  12 +-
 .../changetracking/EntityChangeTrackerDefault.java |   2 +-
 .../changetracking/events/TimestampService.java    |  14 +-
 .../HealthIndicatorUsingHealthCheckService.java    |   4 +-
 .../logonlog/WebModuleLogOnExceptionLogger.java    |   2 +-
 .../templresources/WebModuleTemplateResources.java |   2 +-
 .../commandlog/impl/CommandSubscriberForJdo.java   |   3 +
 .../impl/IsisModuleExtCommandLogImpl.java          |   3 +
 .../impl/mixins/HasUniqueId_command.java           |   2 +
 .../mixins/HasUsername_recentCommandsByUser.java   |   3 +
 .../impl/mixins/Object_recentCommands.java         |   4 +
 .../commandlog/impl/mixins/T_recent.java           |   3 +-
 .../commandlog/impl/ui/CommandServiceMenu.java     |   5 +-
 .../primary/IsisModuleExtCommandReplayPrimary.java |   3 +
 .../primary/config/PrimaryConfig.java              |   3 +
 .../primary/mixins/Object_openOnSecondary.java     |   3 +
 .../primary/restapi/CommandRetrievalService.java   |   3 +
 .../primary/spiimpl/CaptureResultOfCommand.java    |   4 +
 .../primary/ui/CommandReplayOnPrimaryService.java  |   3 +
 .../IsisModuleExtCommandReplaySecondary.java       |   3 +
 .../commandreplay/secondary/SecondaryStatus.java   |   3 +
 .../secondary/analyser/CommandReplayAnalyser.java  |   3 +
 .../analyser/CommandReplayAnalyserException.java   |   3 +
 .../analyser/CommandReplayAnalyserResult.java      |   3 +
 .../analysis/CommandReplayAnalysisService.java     |   3 +
 .../secondary/clock/TickingClockService.java       |   4 +-
 .../secondary/config/SecondaryConfig.java          |   3 +
 .../executor/CommandExecutorServiceWithTime.java   |   2 +
 .../secondary/fetch/CommandFetcher.java            |   5 +-
 .../secondary/job/ReplicateAndReplayJob.java       |   7 +-
 .../secondary/job/SecondaryStatusData.java         |   3 +
 .../jobcallables/ReplicateAndRunCommands.java      |   4 +-
 .../secondary/mixins/CommandJdo_exclude.java       |   3 +
 .../secondary/mixins/CommandJdo_replayQueue.java   |   3 +
 .../secondary/mixins/Object_openOnPrimary.java     |   3 +
 .../spi/ReplayCommandExecutionController.java      |   2 +
 .../ui/CommandReplayOnSecondaryService.java        |   3 +
 .../applib/IsisModuleIncModelApplib.java           |   3 +
 .../modelannotation/applib/annotation/Model.java   |   6 +-
 .../metamodel/IsisModuleExtModelAnnotation.java    |   3 +
 .../SupportingMethodValidatorRefinerFactory.java   |  26 +-
 .../services/IncubatorMetaModelPlugin.java         |   5 +-
 .../extensions/quartz/IsisModuleExtQuartzImpl.java |   3 +
 .../quartz/context/JobExecutionData.java           |   2 +
 .../spring/AutowiringSpringBeanJobFactory.java     |   3 +
 .../secman/api/IsisModuleExtSecmanApi.java         |   3 +
 .../extensions/secman/api/SecmanConfiguration.java |  21 +-
 .../isis/extensions/secman/api/SecurityRealm.java  |   3 +
 .../secman/api/SecurityRealmCharacteristic.java    |   3 +
 .../secman/api/SecurityRealmService.java           |   3 +
 .../api/encryption/PasswordEncryptionService.java  |   3 +
 .../encryption/PasswordEncryptionServiceNone.java  |   3 +
 .../secman/api/events/UserCreatedEvent.java        |  21 +-
 .../api/permission/ApplicationPermission.java      |  46 +-
 .../api/permission/ApplicationPermissionMode.java  |   2 +
 .../ApplicationPermissionRepository.java           |  27 +-
 .../api/permission/ApplicationPermissionRule.java  |   2 +
 .../api/permission/ApplicationPermissionValue.java |   2 +
 .../permission/ApplicationPermissionValueSet.java  |  10 +-
 .../permission/PermissionsEvaluationService.java   |   2 +
 .../PermissionsEvaluationServiceAbstract.java      |   3 +
 ...PermissionsEvaluationServiceAllowBeatsVeto.java |   2 +
 ...PermissionsEvaluationServiceVetoBeatsAllow.java |   2 +
 .../secman/api/role/ApplicationRole.java           |  19 +-
 .../secman/api/role/ApplicationRoleRepository.java |  11 +-
 .../secman/api/tenancy/ApplicationTenancy.java     |  17 +-
 .../api/tenancy/ApplicationTenancyEvaluator.java   |   2 +
 .../api/tenancy/ApplicationTenancyRepository.java  |   9 +-
 .../extensions/secman/api/tenancy/HasAtPath.java   |   2 +
 .../extensions/secman/api/user/AccountType.java    |   8 +-
 .../secman/api/user/ApplicationUser.java           |  24 +-
 .../secman/api/user/ApplicationUserRepository.java |  11 +-
 .../secman/api/user/ApplicationUserStatus.java     |   2 +
 .../IsisModuleExtSecmanEncryptionJbcrypt.java      |   3 +
 .../PasswordEncryptionServiceUsingJBcrypt.java     |   3 +
 .../secman/model/IsisModuleExtSecmanModel.java     |   3 +
 .../secman/model/app/user/MeService.java           |   5 +-
 .../jdo/IsisModuleExtSecmanPersistenceJdo.java     |   3 +
 .../secman/jdo/seed/SeedSecurityModuleService.java |   7 +-
 .../jdo/seed/SeedUsersAndRolesFixtureScript.java   |   4 +-
 .../secman/jdo/seed/scripts/GlobalTenancy.java     |   3 +
 ...xtFixturesFixtureResultsRoleAndPermissions.java |   3 +
 .../IsisExtSecmanAdminRoleAndPermissions.java      |   5 +-
 .../jdo/seed/scripts/IsisExtSecmanAdminUser.java   |   7 +-
 .../IsisExtSecmanFixtureRoleAndPermissions.java    |   2 +
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |   4 +-
 .../jpa/IsisModuleExtSecmanPersistenceJpa.java     |   3 +
 .../secman/jpa/seed/SeedSecurityModuleService.java |   7 +-
 .../jpa/seed/SeedUsersAndRolesFixtureScript.java   |   4 +-
 .../secman/jpa/seed/scripts/GlobalTenancy.java     |   3 +
 ...xtFixturesFixtureResultsRoleAndPermissions.java |   3 +
 .../IsisExtSecmanAdminRoleAndPermissions.java      |   5 +-
 .../jpa/seed/scripts/IsisExtSecmanAdminUser.java   |   7 +-
 .../IsisExtSecmanFixtureRoleAndPermissions.java    |   2 +
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |   4 +-
 ...tyModuleAppUserRegistrationServiceAbstract.java |  12 +-
 .../shiro/IsisModuleExtSecmanRealmShiro.java       |   3 +
 .../shiro/IsisModuleExtSecmanShiroRealm.java       |  27 +-
 .../services/SecurityRealmServiceUsingShiro.java   |   5 +-
 .../extensions/secman/shiro/util/ShiroUtils.java   |   5 +-
 .../realm/impl/IsisLdapContextFactory.java         |   2 +
 .../shirorealmldap/realm/impl/IsisLdapRealm.java   |   2 +
 .../impl/IsisModuleExtShiroRealmLdapImpl.java      |   3 +
 .../cors/impl/IsisModuleExtCorsImpl.java           |  21 +-
 .../ui/IsisModuleExtExcelDownloadUi.java           |   3 +
 .../ui/components/CollectionContentsAsExcel.java   |   2 +
 .../CollectionContentsAsExcelFactory.java          |   6 +-
 .../fullcalendar/applib/CalendarEventable.java     |   3 +
 .../fullcalendar/applib/Calendarable.java          |  15 +-
 .../applib/IsisModuleExtFullCalendarApplib.java    |   3 +
 .../spi/CalendarableDereferencingService.java      |   1 +
 .../fullcalendar/applib/value/CalendarEvent.java   |  30 +-
 .../ui/component/IsisModuleExtFullCalendarUi.java  |   3 +
 .../pdfjs/applib/annotations/PdfJsViewer.java      |   2 +
 .../wicket/pdfjs/applib/config/PdfJsConfig.java    |   3 +
 .../viewer/wicket/pdfjs/applib/config/Scale.java   |   3 +
 .../pdfjs/applib/spi/PdfJsViewerAdvisor.java       |  10 +-
 .../wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java      |   3 +
 isis-tooling.yml                                   |   5 +-
 .../isis/legacy/applib/DomainObjectContainer.java  |   2 +-
 .../applib/IsisModuleExtJaxRsClientApplib.java     |   3 +
 .../jaxrsclient/applib/client/JaxRsClient.java     |   3 +
 .../jaxrsclient/applib/client/JaxRsResponse.java   |   3 +
 .../impl/IsisModuleExtJaxRsClientImpl.java         |   3 +
 .../restclient/ActionParameterListBuilder.java     |  15 +-
 .../restclient/IsisModuleExtRestClient.java        |   3 +
 .../isis/extensions/restclient/ResponseDigest.java |  91 ++-
 .../isis/extensions/restclient/RestfulClient.java  |  32 +-
 .../extensions/restclient/RestfulClientConfig.java |  11 +-
 .../restclient/RestfulClientException.java         |   3 +
 .../restclient/auth/BasicAuthFilter.java           |   7 +-
 .../restclient/log/ClientConversationFilter.java   |  19 +-
 .../restclient/log/ClientConversationLogger.java   |  15 +-
 .../jdo/applib/IsisModulePersistenceJdoApplib.java |   3 +
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.java  |   3 +
 .../changetracking/JdoLifecycleListener.java       |   2 +
 .../jdo/datanucleus/config/DnSettings.java         |   6 +-
 .../jdosupport/JdoSupportServiceDefault.java       |   8 +-
 .../mixins/Persistable_datanucleusIdLong.java      |   5 +-
 .../mixins/Persistable_datanucleusVersionLong.java |   5 +-
 .../Persistable_datanucleusVersionTimestamp.java   |   5 +-
 .../mixins/Persistable_downloadJdoMetadata.java    |   5 +-
 .../jdo/datanucleus/schema/JdoSchemaService.java   |   2 +-
 .../applib/IsisBookmarkConverter.java              |   3 +
 .../applib/IsisLocalResourcePathConverter.java     |   3 +
 .../typeconverters/applib/IsisMarkupConverter.java |   3 +
 .../applib/IsisPasswordConverter.java              |   3 +
 .../JavaAwtBufferedImageByteArrayConverter.java    |   5 +-
 .../schema/v2/IsisChangesDtoConverter.java         |   3 +
 .../schema/v2/IsisCommandDtoConverter.java         |   3 +
 .../schema/v2/IsisInteractionDtoConverter.java     |   3 +
 .../schema/v2/IsisOidDtoConverter.java             |   3 +
 .../time/IsoOffsetTimeConverter.java               |   5 +-
 .../time/IsoZonedDateTimeConverter.java            |   5 +-
 .../applib/ByteArrayBlobRdbmsMapping.java          |   3 +
 .../valuetypes/applib/IsisBlobMapping.java         |   3 +
 .../valuetypes/applib/IsisClobMapping.java         |   3 +
 persistence/jdo/spring/README.adoc                 | 309 ++++++++
 persistence/jdo/spring/pom.xml                     |  17 +-
 .../jdo/spring/test/ConfigurationExample.java      |  24 +-
 .../jdo/spring/test/ConfigurationTest.java         |  16 +-
 .../integration/JdoTransactionManagerTests.java    | 809 +++++++++++++++++++++
 .../LocalPersistenceManagerFactoryTests.java       | 161 ++++
 .../test/integration/MockJtaTransaction.java       |  50 +-
 .../support/OpenPersistenceManagerInViewTests.java | 151 ++++
 .../jdo/spring/test/integration/test.properties    |   1 +
 .../JpaEntityInjectionPointResolver.java           |  18 +-
 .../jpa/eclipselink/IsisModuleJpaEclipselink.java  |  70 +-
 .../metamodel/JpaEntityFacetFactory.java           |   5 +
 .../testdomain/jdo/entities/JdoProductComment.java |   4 +-
 .../testdomain/jpa/entities/JpaProductComment.java |   4 +-
 .../security/bypass/IsisModuleSecurityBypass.java  |   4 +-
 .../bypass/authentication/AuthenticatorBypass.java |   4 +-
 .../bypass/authorization/AuthorizorBypass.java     |   5 +-
 .../keycloak/IsisModuleSecurityKeycloak.java       |   4 +-
 .../authentication/AuthenticatorKeycloak.java      |   9 +-
 .../keycloak/authorization/AuthorizorKeycloak.java |   5 +-
 .../keycloak/webmodule/KeycloakFilter.java         |   9 +-
 .../keycloak/webmodule/WebModuleKeycloak.java      |   4 +-
 .../security/shiro/IsisModuleSecurityShiro.java    |   4 +-
 .../shiro/authentication/AuthenticatorShiro.java   |  16 +-
 .../shiro/authorization/AuthorizorShiro.java       |  16 +-
 .../shiro/authorization/IsisPermission.java        |  11 +-
 .../authorization/IsisPermissionResolver.java      |   3 +
 .../security/shiro/webmodule/WebModuleShiro.java   |  29 +-
 .../isis/subdomains/base/applib/Chained.java       |  19 +-
 .../apache/isis/subdomains/base/applib/Dflt.java   |   3 +
 .../applib/IsisModuleSubdomainsBaseApplib.java     |   3 +
 .../isis/subdomains/base/applib/PowerType.java     |   2 +
 .../apache/isis/subdomains/base/applib/Titled.java |   5 +-
 .../isis/subdomains/base/applib/TitledEnum.java    |   4 +-
 .../base/applib/services/BaseServicesModule.java   |   3 +
 .../applib/services/calendar/CalendarService.java  |  13 +-
 .../base/applib/types/DescriptionType.java         |   3 +
 .../subdomains/base/applib/types/FqcnType.java     |   3 +
 .../subdomains/base/applib/types/MoneyType.java    |   3 +
 .../subdomains/base/applib/types/NameType.java     |   3 +
 .../subdomains/base/applib/types/NotesType.java    |   3 +
 .../base/applib/types/ObjectIdentifierType.java    |   3 +
 .../base/applib/types/PercentageType.java          |   3 +
 .../base/applib/types/ProperNameType.java          |   3 +
 .../base/applib/types/ReferenceType.java           |   3 +
 .../subdomains/base/applib/types/TitleType.java    |   3 +
 .../base/applib/types/UrlTemplateType.java         |   3 +
 .../subdomains/base/applib/types/UserNameType.java |   3 +
 .../isis/subdomains/base/applib/types/XxxType.java |   3 +
 .../subdomains/base/applib/utils/ClassUtils.java   |  13 +-
 .../base/applib/utils/JodaPeriodUtils.java         |   2 +
 .../subdomains/base/applib/utils/MathUtils.java    |   6 +-
 .../subdomains/base/applib/utils/MessageUtils.java |   3 +
 .../subdomains/base/applib/utils/StringUtils.java  |   7 +-
 .../subdomains/base/applib/utils/TitleBuilder.java |   4 +
 .../base/applib/valuetypes/AbstractInterval.java   |  19 +-
 .../base/applib/valuetypes/LocalDateInterval.java  |  23 +-
 .../isis/subdomains/base/applib/valuetypes/VT.java |  12 +-
 .../base/applib/with/WithCodeComparable.java       |   5 +-
 .../base/applib/with/WithCodeGetter.java           |   8 +-
 .../base/applib/with/WithCodeUnique.java           |   3 +
 .../applib/with/WithDescriptionComparable.java     |   7 +-
 .../base/applib/with/WithDescriptionGetter.java    |   8 +-
 .../base/applib/with/WithDescriptionUnique.java    |   3 +
 .../subdomains/base/applib/with/WithInterval.java  |  13 +-
 .../base/applib/with/WithIntervalContiguous.java   |  55 +-
 .../base/applib/with/WithIntervalMutable.java      |   5 +-
 .../base/applib/with/WithNameComparable.java       |   6 +-
 .../base/applib/with/WithNameGetter.java           |   8 +-
 .../base/applib/with/WithNameUnique.java           |   3 +
 .../base/applib/with/WithReferenceComparable.java  |   7 +-
 .../base/applib/with/WithReferenceGetter.java      |   8 +-
 .../base/applib/with/WithReferenceUnique.java      |   3 +
 .../subdomains/base/applib/with/WithSequence.java  |   4 +-
 .../subdomains/base/applib/with/WithStartDate.java |   3 +
 .../base/applib/with/WithTitleComparable.java      |   5 +-
 .../base/applib/with/WithTitleGetter.java          |   8 +-
 .../base/applib/with/WithTitleUnique.java          |   3 +
 .../applib/IsisModuleSubdomainsExcelApplib.java    |   3 +
 .../excel/applib/dom/AggregationType.java          |   3 +
 .../excel/applib/dom/ExcelMetaDataEnabled.java     |   6 +-
 .../subdomains/excel/applib/dom/ExcelService.java  |  11 +-
 .../subdomains/excel/applib/dom/HyperLink.java     |   4 +-
 .../subdomains/excel/applib/dom/PivotColumn.java   |   3 +
 .../excel/applib/dom/PivotDecoration.java          |   3 +
 .../isis/subdomains/excel/applib/dom/PivotRow.java |   3 +
 .../subdomains/excel/applib/dom/PivotValue.java    |   3 +
 .../subdomains/excel/applib/dom/RowHandler.java    |   5 +-
 .../excel/applib/dom/WorksheetContent.java         |   3 +
 .../subdomains/excel/applib/dom/WorksheetSpec.java |   3 +
 .../excel/applib/dom/util/AnnotationList.java      |   4 +-
 .../excel/applib/dom/util/AnnotationTriplet.java   |   3 +
 .../applib/dom/util/ExcelFileBlobConverter.java    |   7 +-
 .../excel/applib/dom/util/ExcelServiceImpl.java    |  15 +-
 .../subdomains/excel/applib/dom/util/Mode.java     |   2 +-
 .../excel/applib/dom/util/PivotUtils.java          |   3 +
 .../excel/applib/dom/util/SheetPivoter.java        |   3 +
 .../DemoFixture_extending_ExcelFixture2.java       |   2 +-
 .../subdomains/excel/testing/ExcelFixture.java     |  21 +-
 .../subdomains/excel/testing/ExcelFixture2.java    |  21 +-
 .../excel/testing/ExcelFixtureRowHandler.java      |   3 +
 .../excel/testing/ExcelFixtureWorkbookHandler.java |   3 +
 .../excel/testing/FixtureAwareRowHandler.java      |   5 +-
 .../testing/IsisModuleSubdomainsExcelTesting.java  |   3 +
 .../applib/IsisModuleSubdomainsSpringApplib.java   |   3 +
 .../spring/applib/service/BeanDescriptor.java      |  13 +-
 .../spring/applib/service/ContextBeans.java        |   3 +
 .../spring/applib/service/SpringBeansService.java  |   2 +
 .../IsisModuleSubdomainsXDocReportApplib.java      |   3 +
 .../xdocreport/applib/service/OutputType.java      |   3 +
 .../xdocreport/applib/service/XDocReportModel.java |   3 +
 .../applib/service/XDocReportService.java          |   8 +-
 .../applib/IsisModuleTestingFakeDataApplib.java    |   3 +
 .../services/AbstractRandomValueGenerator.java     |   3 +
 .../fakedata/applib/services/Addresses.java        |   3 +
 .../fakedata/applib/services/BigDecimals.java      |   3 +
 .../fakedata/applib/services/BigIntegers.java      |   3 +
 .../testing/fakedata/applib/services/Books.java    |   3 +
 .../testing/fakedata/applib/services/Booleans.java |   3 +
 .../testing/fakedata/applib/services/Bytes.java    |   3 +
 .../testing/fakedata/applib/services/Chars.java    |   3 +
 .../fakedata/applib/services/Collections.java      |   3 +
 .../testing/fakedata/applib/services/Comms.java    |   3 +
 .../fakedata/applib/services/CreditCards.java      |   3 +
 .../testing/fakedata/applib/services/Doubles.java  |   3 +
 .../testing/fakedata/applib/services/Enums.java    |   3 +
 .../fakedata/applib/services/FakeDataService.java  |   7 +-
 .../testing/fakedata/applib/services/Floats.java   |   3 +
 .../testing/fakedata/applib/services/Integers.java |   3 +
 .../fakedata/applib/services/IsisBlobs.java        |   3 +
 .../fakedata/applib/services/IsisClobs.java        |   5 +-
 .../fakedata/applib/services/IsisPasswords.java    |   3 +
 .../fakedata/applib/services/J8DateTimes.java      |   3 +
 .../fakedata/applib/services/J8LocalDates.java     |   3 +
 .../fakedata/applib/services/J8Periods.java        |   3 +
 .../fakedata/applib/services/JavaSqlDates.java     |   3 +
 .../applib/services/JavaSqlTimestamps.java         |   3 +
 .../fakedata/applib/services/JavaUtilDates.java    |   5 +-
 .../fakedata/applib/services/JodaDateTimes.java    |   9 +-
 .../fakedata/applib/services/JodaLocalDates.java   |   7 +-
 .../fakedata/applib/services/JodaPeriods.java      |   6 +-
 .../testing/fakedata/applib/services/Longs.java    |   3 +
 .../testing/fakedata/applib/services/Lorem.java    |   3 +
 .../testing/fakedata/applib/services/Names.java    |   3 +
 .../testing/fakedata/applib/services/Shorts.java   |   3 +
 .../testing/fakedata/applib/services/Strings.java  |   3 +
 .../testing/fakedata/applib/services/Urls.java     |   3 +
 .../testing/fakedata/applib/services/Uuids.java    |   3 +
 .../fixturescripts/ExecutionParametersService.java |   8 +-
 .../applib/modules/ModuleWithFixturesService.java  |   2 +-
 .../QueryResultsCacheControlDefault.java           |   2 +-
 .../applib/services/FixturesLifecycleService.java  |   2 +-
 testing/h2console/ui/pom.xml                       |   7 -
 .../h2console/ui/IsisModuleTestingH2ConsoleUi.java |   3 +
 .../h2console/ui/services/H2ManagerMenu.java       |   3 +
 .../h2console/ui/webmodule/WebModuleH2Console.java | 108 +--
 .../hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java      |   3 +
 .../hsqldbmgr/dom/services/HsqlDbManagerMenu.java  |  24 +-
 .../applib/ExceptionRecognizerTranslate.java       |   3 +
 .../applib/IsisIntegrationTestAbstract.java        |  10 +-
 .../applib/IsisInteractionHandler.java             |  21 +-
 .../integtestsupport/applib/ThrowableMatchers.java |   3 +
 .../applib/swagger/SwaggerExporter.java            |   6 +-
 .../applib/validate/DomainModelValidator.java      |  18 +-
 .../applib/IsisModuleTestingSpecSupportApplib.java |   3 +
 .../integration/ObjectFactoryForIntegration.java   |   6 +-
 .../isis/testing/specsupport/applib/specs/V.java   |   6 +-
 .../IsisModuleTestingUnitTestSupportApplib.java    |   3 +
 .../applib/bean/AbstractBeanPropertiesTest.java    |   3 +
 .../bean/FixtureDatumFactoriesForAnyPojo.java      |   3 +
 .../bean/FixtureDatumFactoriesForApplib.java       |   3 +
 .../applib/bean/FixtureDatumFactoriesForJoda.java  |   3 +
 .../applib/bean/FixtureDatumFactoriesForTime.java  |   6 +-
 .../unittestsupport/applib/bean/PojoTester.java    |  49 +-
 .../core/AbstractApplyToAllContractTest.java       |   4 +-
 ...irectionalRelationshipContractTestAbstract.java |   4 +-
 .../applib/core/bidir/Instantiator.java            |   5 +-
 .../applib/core/bidir/InstantiatorSimple.java      |   5 +-
 .../applib/core/bidir/Instantiators.java           |   5 +-
 .../ComparableContractTest_compareTo.java          |   2 +
 .../core/comparable/ComparableContractTester.java  |   4 +-
 .../unittestsupport/applib/core/files/Files.java   |   4 +-
 .../applib/core/jaxb/JaxbMatchers.java             |   4 +-
 .../applib/core/jmocking/Imposterisers.java        |   3 +
 .../core/jmocking/InjectIntoJMockAction.java       |   4 +
 .../applib/core/jmocking/IsisActions.java          |   3 +
 .../applib/core/jmocking/JMockActions.java         |   3 +
 .../applib/core/jmocking/JUnitRuleMockery2.java    |  14 +-
 .../applib/core/jmocking/PostponedAction.java      |   9 +-
 .../core/soap/SoapEndpointPublishingRule.java      |   4 +-
 .../applib/core/soap/SoapEndpointSpec.java         |   3 +
 .../sortedsets/SortedSetsContractTestAbstract.java |   4 +-
 .../applib/core/streams/NullPrintStream.java       |   2 +-
 .../applib/core/utils/CollectUtils.java            |   4 +-
 .../applib/core/utils/IndentPrinter.java           |   6 +-
 .../applib/core/utils/ReflectUtils.java            |   4 +-
 .../applib/core/utils/StringUtils.java             |   4 +-
 .../core/value/ValueTypeContractTestAbstract.java  |   4 +-
 .../applib/dom/assertions/Asserting.java           |   6 +-
 .../applib/dom/matchers/IsisMatchers.java          |  17 +-
 .../dom/privatecons/PrivateConstructorTester.java  |   3 +
 .../applib/dom/reflect/ReflectUtils.java           |  11 +-
 .../applib/dom/repo/FinderInteraction.java         |   6 +-
 .../cli/README.adoc                                |   8 +-
 tooling/cli/README.txt                             |   1 -
 .../modules/tooling-cli/examples/isis-tooling.yml  |  85 ++-
 tooling/pom.xml                                    |   2 +-
 .../applib/IsisModuleValAsciidocApplib.java        |   3 +
 .../asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java  |   3 +
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |   1 +
 .../metamodel/IsisModuleValAsciidocMetaModel.java  |   9 +-
 .../IsisModuleValAsciidocPersistenceJdoDn5.java    |   3 +
 .../jdo/dn5/converters/IsisAsciiDocConverter.java  |   3 +
 .../ui/wkt/IsisModuleValAsciidocUiWkt.java         |   3 +
 .../applib/IsisModuleValMarkdownApplib.java        |   3 +
 .../markdown/applib/jaxb/MarkdownJaxbAdapter.java  |   3 +
 .../markdown/applib/value/Converter.java           |  15 +-
 .../metamodel/IsisModuleValMarkdownMetaModel.java  |   7 +-
 .../IsisModuleValMarkdownPersistenceJdoDn5.java    |   3 +
 .../jdo/dn5/converters/IsisMarkdownConverter.java  |   3 +
 .../ui/wkt/IsisModuleValMarkdownUiWkt.java         |   3 +
 .../sse/applib/IsisModuleValSseApplib.java         |   3 +
 .../sse/applib/annotations/ServerSentEvents.java   |   5 +-
 .../sse/applib/annotations/SseSource.java          |   7 +-
 .../valuetypes/sse/applib/service/SseChannel.java  |   5 +-
 .../valuetypes/sse/applib/service/SseService.java  |   5 +-
 .../sse/ui/wkt/IsisModuleValSseUiWkt.java          |   5 +-
 .../sse/ui/wkt/services/SseServiceDefault.java     |  19 +-
 .../wkt/webmodule/WebModuleServerSentEvents.java   |   6 +-
 .../IsisModuleViewerRestfulObjectsApplib.java      |   3 +
 .../restfulobjects/applib/JsonRepresentation.java  |   2 +
 .../restfulobjects/applib/LinkRepresentation.java  |   3 +
 .../isis/viewer/restfulobjects/applib/Rel.java     |   3 +
 .../restfulobjects/applib/RelDefinition.java       |   2 +
 .../restfulobjects/applib/RepresentationType.java  |   9 +-
 .../restfulobjects/applib/RestfulHttpMethod.java   |   4 +-
 .../restfulobjects/applib/RestfulMediaType.java    |   6 +-
 .../restfulobjects/applib/RestfulRequest.java      |   3 +
 .../restfulobjects/applib/RestfulResponse.java     |   3 +
 .../applib/boot/BootstrapResource.java             |   5 +-
 .../AbstractObjectMemberRepresentation.java        |   8 +-
 .../domainobjects/ActionResultRepresentation.java  |  15 +-
 .../DomainObjectMemberRepresentation.java          |   2 +
 .../domainobjects/DomainObjectRepresentation.java  |   3 +
 .../applib/domainobjects/DomainObjectResource.java |   5 +-
 .../applib/domainobjects/DomainRepresentation.java |   7 +-
 .../domainobjects/DomainServiceResource.java       |   5 +-
 .../applib/domainobjects/ListRepresentation.java   |   3 +
 .../domainobjects/ObjectActionRepresentation.java  |   4 +-
 .../ObjectCollectionRepresentation.java            |   5 +-
 .../ObjectPropertyRepresentation.java              |   4 +-
 .../domainobjects/ScalarValueRepresentation.java   |   4 +-
 .../AbstractTypeMemberRepresentation.java          |   4 +-
 .../ActionDescriptionRepresentation.java           |   4 +-
 .../ActionParameterDescriptionRepresentation.java  |   4 +-
 .../CollectionDescriptionRepresentation.java       |   4 +-
 .../domaintypes/DomainTypeRepresentation.java      |   4 +-
 .../applib/domaintypes/DomainTypeResource.java     |  17 +-
 .../PropertyDescriptionRepresentation.java         |   3 +
 .../TypeActionResultRepresentation.java            |   3 +
 .../applib/domaintypes/TypeListRepresentation.java |   4 +-
 .../applib/dtos/ScalarValueDtoV2.java              |  15 +-
 .../applib/errors/ErrorRepresentation.java         |   4 +-
 .../applib/health/HealthRepresentation.java        |   3 +
 .../applib/health/HealthResource.java              |   5 +-
 .../applib/homepage/HomePageRepresentation.java    |   3 +
 .../applib/homepage/HomePageResource.java          |   5 +-
 .../applib/menubars/MenuBarsResource.java          |   4 +-
 .../applib/user/UserRepresentation.java            |   3 +
 .../restfulobjects/applib/user/UserResource.java   |   5 +-
 .../restfulobjects/applib/util/JsonMapper.java     |   3 +
 .../restfulobjects/applib/util/JsonNodeUtils.java  |   3 +
 .../restfulobjects/applib/util/MediaTypes.java     |   3 +
 .../viewer/restfulobjects/applib/util/Parser.java  |   3 +
 .../restfulobjects/applib/util/PathNode.java       |   6 +-
 .../applib/util/UrlEncodingUtils.java              |   3 +
 .../applib/version/VersionRepresentation.java      |   3 +
 .../applib/version/VersionResource.java            |   5 +-
 ...isModuleViewerRestfulObjectsJaxrsResteasy4.java |   3 +
 .../conneg/RestfulObjectsJaxbWriterForXml.java     |  29 +-
 .../webmodule/WebModuleJaxrsResteasy4.java         |  15 +-
 .../IsisModuleRestfulObjectsRendering.java         |   7 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |   2 +-
 .../rendering/service/RepresentationService.java   |   2 +
 .../RepresentationServiceContentNegotiator.java    |  15 +-
 .../acceptheader/AcceptHeaderServiceForRest.java   |   7 +-
 .../service/conneg/ContentNegotiationService.java  |   3 +
 .../conneg/ContentNegotiationServiceAbstract.java  |   3 +
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  19 +-
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |  11 +-
 .../ContentNegotiationServiceOrgApacheIsisV2.java  |  57 +-
 .../ContentNegotiationServiceXRoDomainType.java    |   8 +-
 .../service/swagger/SwaggerServiceMenu.java        |  19 +-
 .../IsisModuleViewerRestfulObjectsViewer.java      |   5 +-
 .../wicket/model/IsisModuleViewerWicketModel.java  |   3 +
 .../viewer/wicket/ui/IsisModuleViewerWicketUi.java |   3 +
 .../themepicker/IsisWicketThemeSupportDefault.java |   2 +-
 .../viewer/IsisModuleViewerWicketViewer.java       |   3 +-
 .../ComponentFactoryRegistrarDefault.java          |   2 +-
 .../ComponentFactoryRegistryDefault.java           |   2 +-
 .../registries/pages/PageClassListDefault.java     |   2 +-
 .../registries/pages/PageClassRegistryDefault.java |   2 +-
 .../pages/PageNavigationServiceDefault.java        |   2 +-
 .../viewer/services/BookmarkUiServiceWicket.java   |   2 +-
 .../viewer/services/DeepLinkServiceWicket.java     |   2 +-
 .../services/HintStoreUsingWicketSession.java      |   2 +-
 .../services/ImageResourceCacheClassPath.java      |   2 +-
 .../viewer/services/LocaleProviderWicket.java      |   2 +-
 .../services/TranslationsResolverWicket.java       |   2 +-
 .../services/WicketViewerSettingsDefault.java      |   2 +-
 .../mementos/ObjectMementoServiceWicket.java       |   2 +-
 .../wicket/viewer/webmodule/WebModuleWicket.java   |   2 +-
 741 files changed, 4639 insertions(+), 1834 deletions(-)
 rename antora/components/system/modules/generated/pages/index/{applib/mixins/timestamp/HoldsUpdatedAt.adoc => commons/having/HasUpdatedAt.adoc} (93%)
 rename antora/components/system/modules/generated/pages/index/{applib/mixins/timestamp/HoldsUpdatedBy.adoc => commons/having/HasUpdatedBy.adoc} (93%)
 delete mode 100644 antora/components/system/modules/generated/pages/index/core/runtimeservices/xmlsnapshot/XmlSnapshotServiceDefault.adoc
 delete mode 100644 api/applib/src/main/java/org/apache/isis/applib/mixins/timestamp/Timestampable.java
 delete mode 100644 api/applib/src/main/java/org/apache/isis/applib/mixins/timestamp/package-info.java
 rename api/applib/src/main/java/org/apache/isis/applib/mixins/timestamp/HoldsUpdatedAt.java => commons/src/main/java/org/apache/isis/commons/having/HasUpdatedAt.java (91%)
 rename api/applib/src/main/java/org/apache/isis/applib/mixins/timestamp/HoldsUpdatedBy.java => commons/src/main/java/org/apache/isis/commons/having/HasUpdatedBy.java (91%)
 copy commons/src/main/java/org/apache/isis/commons/having/{HasEnabling.java => HasUpdatedByAndAt.java} (87%)
 create mode 100644 core/config/src/main/java/org/apache/isis/core/config/datasources/DataSourceIntrospectionService.java
 create mode 100644 persistence/jdo/spring/README.adoc
 copy examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig.java => persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/ConfigurationExample.java (70%)
 copy examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java => persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/ConfigurationTest.java (74%)
 create mode 100644 persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/integration/JdoTransactionManagerTests.java
 create mode 100644 persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/integration/LocalPersistenceManagerFactoryTests.java
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java => persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/integration/MockJtaTransaction.java (51%)
 create mode 100644 persistence/jdo/spring/src/test/java/org/apache/isis/persistence/jdo/spring/test/support/OpenPersistenceManagerInViewTests.java
 create mode 100644 persistence/jdo/spring/src/test/resources/org/apache/isis/persistence/jdo/spring/test/integration/test.properties
 copy antora/components/docs/modules/ROOT/partials/module-nav/demos-and-tutorials.adoc => tooling/cli/README.adoc (76%)
 delete mode 100644 tooling/cli/README.txt


[isis] 02/04: ISIS-2444: improvements on overview and index tooling commands

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5510619699a4780da6eee8fdc31ddc79d9760345
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 31 18:39:04 2021 +0000

    ISIS-2444: improvements on overview and index tooling commands
    
    ... and adding documentation.
---
 .../modules/ROOT/pages/cutting-a-release.adoc      |   13 +
 .../components/system/modules/generated/nav.adoc   |    3 +
 .../modules/generated/pages/system-overview.adoc   | 5526 ++++++++++----------
 antora/supplemental-ui/css/site-custom.css         |    7 +-
 antora/supplemental-ui/index.html                  |    2 +-
 core/adoc/modules/ROOT/nav.adoc                    |    3 +
 .../cli/adoc/modules/tooling-cli/pages/about.adoc  |  197 +-
 .../main/java/org/apache/isis/tooling/cli/Cli.java |    7 +-
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  |   18 +-
 .../ProjectDocModel_sanitizeDescription_Test.java  |   35 +
 .../isis/tooling/model4adoc/AsciiDocFactory.java   |  118 +-
 11 files changed, 3121 insertions(+), 2808 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 69faa5d..843955c 100644
--- a/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc
@@ -127,6 +127,19 @@ licenses to remove from supplemental-models.xml (are spurious):
 
 If any missing entries are listed or are spurious, then update `supplemental-models.xml` and try again.
 
+
+=== Update and preview website
+
+Generate the website, ensuring that the config, examples, overview and index are all updated:
+
+[source,bash,subs="attributes+"]
+----
+sh preview.sh
+----
+
+Check for any Asciidoc errors, and fix.
+
+
 === Commit changes
 
 Commit any changes from the preceding steps:
diff --git a/antora/components/system/modules/generated/nav.adoc b/antora/components/system/modules/generated/nav.adoc
new file mode 100644
index 0000000..b250194
--- /dev/null
+++ b/antora/components/system/modules/generated/nav.adoc
@@ -0,0 +1,3 @@
+* see also:
+** xref:core::about.adoc[Core Framework]
+
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 82fbe17..57a6b30 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -3,12 +3,12 @@
 
 These tables summarize all Maven artifacts available with _Apache Isis_.
 
-== Base
+== App
 
-[plantuml,Base,svg]
+[plantuml,App,svg]
 ----
-@startuml(id=Base)
-title Base - Containers
+@startuml(id=App)
+title App - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -24,151 +24,34 @@ skinparam rectangle<<2>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Base\n[Software System]" {
-  rectangle "==Apache Isis\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
-  rectangle "==Apache Isis (Aggregator)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis - Antora\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+package "App\n[Software System]" {
+  rectangle "==Apache Isis Starter Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
-2 .[#707070].> 4 : ""
-2 .[#707070].> 3 : ""
 @enduml
 ----
-.Projects/Modules (Base)
+.Projects/Modules (App)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis (Aggregator)
-[source,yaml]
-----
-Group: org.apache.isis
-Artifact: isis-all
-Type: pom
-Folder: /
-----
-|Convenience aggregator POM that references all modules, some explicitely,
-        others via profiles, that are not activiated per default.
-        The parent POM of the core framework is isis-parent/pom.xml.
-
-|Apache Isis - Antora
-[source,yaml]
-----
-Group: org.apache.isis
-Artifact: antora
-Type: pom
-Folder: \antora
-----
-|
-
-|Apache Isis
+|Apache Isis Starter Parent
 [source,yaml]
 ----
-Group: org.apache.isis
-Artifact: isis-parent
+Group: org.apache.isis.app
+Artifact: isis-app-starter-parent
 Type: pom
-Folder: \isis-parent
-----
-|Parent for the core framework + extensions, starter parent pom for starter apps.
-
-|Apache Isis Supplemental - Legal Info
-[source,yaml]
-----
-Group: org.apache.isis
-Artifact: supplemental-model
-Type: jar
-Folder: \supplemental-model
-----
-|For example, the templates used by many Apache distributions assemble a listing of project dependencies 
-  	according to their organization name (and URL), along with the URL each project's website. When dependency 
-  	POMs are missing this information, the dependency notice file that the Remote Resources Plugin renders can 
-  	be invalid.
-	To compensate for incomplete dependency POMs, we use the supplemental models support.
-|===
-
-== Commons
-
-[plantuml,Commons,svg]
-----
-@startuml(id=Commons)
-title Commons - Containers
-caption Artifact Hierarchy (Maven)
-
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
-}
-hide stereotype
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Commons\n[Software System]" {
-  rectangle "==Apache Isis Commons\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
-}
-@enduml
-----
-.Projects/Modules (Commons)
-[cols="3a,5a", options="header"]
-|===
-|Coordinates |Description 
-
-|Apache Isis Commons
-[source,yaml]
-----
-Group: org.apache.isis.commons
-Artifact: isis-commons
-Type: jar
-Folder: \commons
+Folder: \starters
 ----
-|Apache Isis Commons is a library with utilities, that are shared with the entire Apache Isis ecosystem.
-
-_Dependencies_
-
-* com.fasterxml.jackson.core:jackson-databind:jar:<managed>
-* com.google.code.findbugs:annotations:jar:<managed>
-* javax:javaee-api: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>
-* org.slf4j:slf4j-api:jar:<managed>
-* org.springframework:spring-context:jar:<managed>
-* org.springframework:spring-tx:jar:<managed>
-* org.springframework.boot:spring-boot-starter:jar:<managed>
-* org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
-* org.yaml:snakeyaml:jar:<managed>
-
-_Document Index Entries_
-
-xref:system:generated:index/commons/functional/Result.adoc[Result], xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId], xref:system:generated:index/commons/having/HasUpdatedAt.adoc[HasUpdatedAt], xref:system:generated:index/commons/having/HasUpdatedBy.adoc[HasUpdatedBy], xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername], xref:system:generated:index/commons/resource/ResourceCoordinates.adoc[ResourceCoordinates]
+|Parent pom providing dependency and plugin management for Apache Isis applications
+built with Maven.  Builds on top of spring-boot-starter-parent.
 |===
 
-== Core
+== Mavendeps
 
-[plantuml,Core,svg]
+[plantuml,Mavendeps,svg]
 ----
-@startuml(id=Core)
-title Core - Containers
+@startuml(id=Mavendeps)
+title Mavendeps - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -179,31 +62,6 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<12>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<13>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<14>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<15>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -244,461 +102,169 @@ skinparam rectangle<<9>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Core\n[Software System]" {
-  rectangle "==Apache Isis - JDK Supplemental\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
-  rectangle "==Apache Isis Core\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Core - AppLib\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Core - Code Gen (ByteBuddy)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Core - Configuration\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Core - Interaction\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Core - MetaModel\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Core - Runtime\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Core - Runtime Services\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Core - Schemas\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis Core - Security\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis Core - Transaction\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Core - Unit Test Support\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Core - WebApp\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
+package "Mavendeps\n[Software System]" {
+  rectangle "==Apache Isis Maven Deps\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Maven Deps - BDD Integ Spec\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Maven Deps - Integration Testing\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
+  rectangle "==Apache Isis Maven Deps - JDK11\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
+  rectangle "==Apache Isis Maven Deps - JDO\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
+  rectangle "==Apache Isis Maven Deps - JPA\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
+  rectangle "==Apache Isis Maven Deps - Testing\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
+  rectangle "==Apache Isis Maven Deps - Webapp\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
 }
-2 .[#707070].> 14 : ""
 2 .[#707070].> 3 : ""
 2 .[#707070].> 4 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
 2 .[#707070].> 8 : ""
 2 .[#707070].> 9 : ""
-2 .[#707070].> 10 : ""
-2 .[#707070].> 15 : ""
-2 .[#707070].> 11 : ""
-2 .[#707070].> 12 : ""
-2 .[#707070].> 7 : ""
-2 .[#707070].> 13 : ""
 @enduml
 ----
-.Projects/Modules (Core)
+.Projects/Modules (Mavendeps)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Core
+|Apache Isis Maven Deps
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps
 Type: pom
-Folder: \core
+Folder: \mavendeps
 ----
-|Core framework, providing metamodel, runtime and core APIs.
+|Collection of Apache Isis Maven Dependency Bundles.
+
+|Apache Isis Maven Deps - BDD Integ Spec
+[source,yaml]
+----
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-integspecs
+Type: pom
+Folder: \mavendeps\integspecs
+----
+|Defines a module that can be used as a single dependency for BDD (Cucumber) specs as integration tests.
 
 _Dependencies_
 
-* org.projectlombok:lombok:jar:<managed>
+* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed>
 
-|Apache Isis Core - AppLib
+|Apache Isis Maven Deps - Integration Testing
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-applib
-Type: jar
-Folder: \api\applib
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-integtests
+Type: pom
+Folder: \mavendeps\integtests
 ----
-|Isis application library, defining annotations and utilities for the
-        default (Java) programming model.
-
-_Components_
-
-* o.a.i.applib.annotation.DomainObject
-* o.a.i.applib.annotation.DomainService
-* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto
-* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto
-* o.a.i.applib.services.commanddto.processor.spi.CommandDtoProcessorServiceIdentity
-* o.a.i.applib.services.publishing.log.CommandLogger
-* o.a.i.applib.services.publishing.log.EntityChangesLogger
-* o.a.i.applib.services.publishing.log.EntityPropertyChangeLogger
-* o.a.i.applib.services.publishing.log.ExecutionLogger
-* o.a.i.applib.services.session.SessionLoggingServiceLogging
+|Defines a module that can be used as a single dependency for integration tests.
 
 _Dependencies_
 
-* com.google.code.findbugs:annotations:jar:<managed>
-* javax:javaee-api:jar:<managed>
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
-* org.assertj:assertj-core:jar:<managed>
-* org.jmock:jmock:jar:<managed>
-
-_Document Index Entries_
+* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
 
-xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider],  [...]
-
-|Apache Isis Core - Code Gen (ByteBuddy)
+|Apache Isis Maven Deps - JDK11
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core-codegen-bytebuddy
-Type: jar
-Folder: \core\codegen-bytebuddy
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-jdk11
+Type: pom
+Folder: \mavendeps\jdk11
 ----
-|Code generation using ByteBuddy.
-
-_Components_
-
-* o.a.i.core.codegen.bytebuddy.services.ProxyFactoryServiceByteBuddy
-
-_Dependencies_
-
-* net.bytebuddy:byte-buddy:jar:<managed>
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.objenesis:objenesis:jar:<managed>
+|Defines a module to bring in dependencies that were part of JDK 8 but
+had been removed with JDK 11+. These dependencies are activated when the
+consuming project is built with JDK 11 or higher.
 
-|Apache Isis Core - Configuration
+|Apache Isis Maven Deps - JDO
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core-config
-Type: jar
-Folder: \core\config
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-jdo
+Type: pom
+Folder: \mavendeps\jdo
 ----
-|Isis configuration library for framework internal use.
-
-_Components_
-
-* o.a.i.core.config.beans.IsisBeanFactoryPostProcessorForSpring
-* o.a.i.core.config.beans.IsisBeanTypeRegistryDefault
-* o.a.i.core.config.converters.PatternsConverter
-* o.a.i.core.config.environment.IsisLocaleInitializer
-* o.a.i.core.config.environment.IsisSystemEnvironment
-* o.a.i.core.config.environment.IsisTimeZoneInitializer
-* o.a.i.core.config.validators.PatternOptionalStringConstraintValidator
-* o.a.i.core.config.viewer.wicket.WebAppContextPath
+|Defines a module that provides the default JDO persistence layer integration
+for running an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
 
 _Dependencies_
 
-* org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.hibernate.validator:hibernate-validator:jar:<managed>
-* org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
-
-|Apache Isis Core - Interaction
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-core-interaction
-Type: jar
-Folder: \core\interaction
-----
-|Provides _Interaction Scope_.
-    	Top level action execution or property changes are wrapped in an _Interaction_.
-    	That typically corresponds to a http request/response cycle or a JUnit test method execution.
-
-_Components_
-
-* o.a.i.core.interaction.integration.InteractionAwareTransactionalBoundaryHandler
-* o.a.i.core.interaction.scope.InteractionScopeBeanFactoryPostProcessor
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-
-|Apache Isis Core - Unit Test Support
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-core-internaltestsupport
-Type: jar
-Folder: \core\internaltestsupport
-----
-|Support for writing unit tests in either JUnit 4 or JUnit 5; should be added as a dependency with scope=test only
-
-_Dependencies_
-
-* net.bytebuddy:byte-buddy:jar:<managed>
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
-* org.assertj:assertj-core:jar:<managed>
-* org.datanucleus:javax.jdo:jar:<managed>
-* org.hamcrest:hamcrest-library:jar:<managed>
-* org.jmock:jmock:jar:<managed>
-* org.jmock:jmock-junit4:jar:<managed>
-* org.junit.jupiter:junit-jupiter-api:jar:<managed>
-* org.junit.jupiter:junit-jupiter-engine:jar:<managed>
-* org.junit.vintage:junit-vintage-engine:jar:<managed>
-* org.mockito:mockito-core:jar:<managed>
-* org.picocontainer:picocontainer:jar:<managed>
-* org.slf4j:slf4j-api:jar:${slf4j-api.version}
-* org.springframework:spring-test:jar:<managed>
-* org.springframework.boot:spring-boot-starter-test:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
 
-|Apache Isis Core - MetaModel
+|Apache Isis Maven Deps - JPA
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core-metamodel
-Type: jar
-Folder: \core\metamodel
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-jpa
+Type: pom
+Folder: \mavendeps\jpa
 ----
-|_Components_
-
-* o.a.i.core.metamodel.facets.schema.IsisSchemaMetaModelRefiner
-* o.a.i.core.metamodel.facets.schema.IsisSchemaValueTypeProvider
-* o.a.i.core.metamodel.objectmanager.ObjectManagerDefault
-* o.a.i.core.metamodel.progmodel.ProgrammingModelInitFilterDefault
-* o.a.i.core.metamodel.services.ServiceInjectorDefault
-* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureFactory
-* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault
-* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorDefault
-* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForCollections
-* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForDomainObjects
-* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry
-* o.a.i.core.metamodel.services.events.MetamodelEventService
-* o.a.i.core.metamodel.services.exceprecog.ExceptionRecognizerForRecoverableException
-* o.a.i.core.metamodel.services.grid.GridLoaderServiceDefault
-* o.a.i.core.metamodel.services.grid.GridReaderUsingJaxb
-* o.a.i.core.metamodel.services.grid.GridServiceDefault
-* o.a.i.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3
-* o.a.i.core.metamodel.services.layout.LayoutServiceDefault
-* o.a.i.core.metamodel.services.metamodel.MetaModelServiceDefault
-* o.a.i.core.metamodel.services.registry.ServiceRegistryDefault
-* o.a.i.core.metamodel.services.tablecol.TableColumnOrderServiceDefault
-* o.a.i.core.metamodel.services.title.TitleServiceDefault
-* o.a.i.core.metamodel.specloader.InjectorMethodEvaluatorDefault
-* o.a.i.core.metamodel.specloader.ProgrammingModelServiceDefault
-* o.a.i.core.metamodel.specloader.SpecificationLoaderDefault
-* o.a.i.core.metamodel.valuetypes.ValueTypeProviderDefault
-* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForBuiltin
-* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForCollections
-* o.a.i.core.metamodel.valuetypes.ValueTypeRegistry
+|Defines a module that provides the default JPA persistence layer integration
+for running an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
 
 _Dependencies_
 
-* io.swagger:swagger-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-security:jar:<managed>
-* org.hibernate.validator:hibernate-validator:jar:<managed>
-* org.jmock:jmock:jar:<managed>
-
-|Apache Isis Core - Runtime
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-core-runtime
-Type: jar
-Folder: \core\runtime
-----
-|Bundles framework internal services, utilities and events.
-
-_Components_
-
-* o.a.i.core.runtime.events.MetamodelEventService
-* o.a.i.core.runtime.events.TransactionEventEmitter
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-interaction:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.core:isis-core-transaction:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed>
 
-|Apache Isis Core - Runtime Services
+|Apache Isis Maven Deps - Testing
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core-runtimeservices
-Type: jar
-Folder: \core\runtimeservices
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-unittests
+Type: pom
+Folder: \mavendeps\unittests
 ----
-|Introduced to keep the 'runtime' package concise. Viewers don't have dependencies on this module.
-
-_Components_
-
-* o.a.i.core.runtimeservices.bookmarks.BookmarkServiceDefault
-* o.a.i.core.runtimeservices.clock.ClockServiceDefault
-* o.a.i.core.runtimeservices.command.CommandDtoServiceInternalDefault
-* o.a.i.core.runtimeservices.command.CommandExecutorServiceDefault
-* o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
-* o.a.i.core.runtimeservices.email.EmailServiceDefault
-* o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring
-* o.a.i.core.runtimeservices.executor.MemberExecutorServiceDefault
-* o.a.i.core.runtimeservices.factory.FactoryServiceDefault
-* o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault
-* o.a.i.core.runtimeservices.i18n.po.TranslationServicePo
-* o.a.i.core.runtimeservices.interaction.InteractionDtoServiceInternalDefault
-* o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault
-* o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault
-* o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3
-* o.a.i.core.runtimeservices.message.MessageServiceDefault
-* o.a.i.core.runtimeservices.publish.CommandPublisherDefault
-* o.a.i.core.runtimeservices.publish.EntityChangesPublisherDefault
-* o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault
-* o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
-* o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
-* o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForDataAlreadyExists
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForObjectNotFound
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForOtherDataAccessProblem
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForRelatedDataExists
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForUnableToSaveData
-* o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
-* o.a.i.core.runtimeservices.routing.RoutingServiceDefault
-* o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
-* o.a.i.core.runtimeservices.session.InteractionFactoryDefault
-* o.a.i.core.runtimeservices.sudo.SudoServiceDefault
-* o.a.i.core.runtimeservices.transaction.TransactionServiceSpring
-* o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression
-* o.a.i.core.runtimeservices.user.UserServiceDefault
-* o.a.i.core.runtimeservices.userprof.UserProfileServiceDefault
-* o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault
-* o.a.i.core.runtimeservices.wrapper.WrapperFactoryDefault
-* o.a.i.core.runtimeservices.xml.XmlServiceDefault
-* o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault
+|Defines a module that can be used as a single dependency for a set of common testing libraries.
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.hsqldb:hsqldb:jar:<managed>
-
-_Document Index Entries_
-
-xref:system:generated:index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc[ExceptionRecognizerForOtherDataAccessProblem], xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault]
+* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 
-|Apache Isis Core - Security
+|Apache Isis Maven Deps - Webapp
 [source,yaml]
 ----
-Group: org.apache.isis.core
-Artifact: isis-core-security
-Type: jar
-Folder: \core\security
+Group: org.apache.isis.mavendeps
+Artifact: isis-mavendeps-webapp
+Type: pom
+Folder: \mavendeps\webapp
 ----
-|_Components_
+|Defines a module that can be almost used as a single dependency for running
+an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
 
-* o.a.i.core.security.authentication.manager.AuthenticationManager
-* o.a.i.core.security.authentication.standard.RandomCodeGeneratorDefault
-* o.a.i.core.security.authorization.manager.AuthorizationManager
+Note: Also requires a persistence provider.
 
 _Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.hamcrest:hamcrest-library:jar:<managed>
-* org.junit.jupiter:junit-jupiter-api:jar:<managed>
-* org.junit.jupiter:junit-jupiter-engine:jar:<managed>
-* org.junit.vintage:junit-vintage-engine:jar:<managed>
-
-|Apache Isis Core - Transaction
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-core-transaction
-Type: jar
-Folder: \core\transaction
-----
-|Provides transaction integration with Spring and also 
-    	entity change tracking, with associated publishing and pre/post value events.
-
-_Components_
-
-* o.a.i.core.transaction.changetracking.EntityChangeTrackerDefault
-* o.a.i.core.transaction.changetracking.events.TimestampService
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-
-_Document Index Entries_
-
-xref:system:generated:index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc[EntityChangeTrackerDefault], xref:system:generated:index/core/transaction/events/TransactionAfterCompletionEvent.adoc[TransactionAfterCompletionEvent]
-
-|Apache Isis Core - WebApp
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-core-webapp
-Type: jar
-Folder: \core\webapp
-----
-|Bundles all the web specific classes a srequired by viewers.
-        Introduced to keep the 'runtime' package concise.
-
-_Components_
-
-* o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService
-* o.a.i.core.webapp.modules.logonlog.WebModuleLogOnExceptionLogger
-* o.a.i.core.webapp.modules.templresources.WebModuleTemplateResources
-* o.a.i.core.webapp.webappctx.IsisWebAppContextInitializer
-
-_Dependencies_
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.core:isis-core-security:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
+* org.apache.isis.security:isis-security-bypass:jar:<managed>
+* org.apache.isis.security:isis-security-keycloak:jar:<managed>
+* org.apache.isis.security:isis-security-shiro:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-restfulobjects-jaxrsresteasy4:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-restfulobjects-viewer:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-viewer:jar:<managed>
+* org.springframework.boot:spring-boot-starter-tomcat:jar:<managed>
+* org.springframework.boot:spring-boot-starter-web:jar:<managed>
+|===
 
-* org.apache.isis.core:isis-core-interaction:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.core:isis-core-transaction:jar:<managed>
-* org.springframework:spring-web:jar:<managed>
-* org.springframework.boot:spring-boot:jar:<managed>
-* org.springframework.boot:spring-boot-actuator:jar:<managed>
-* org.springframework.boot:spring-boot-starter-thymeleaf:jar:<managed>
+== Testing
 
-|Apache Isis - JDK Supplemental
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-jdk-supplemental
-Type: pom
-Folder: \core\jdk-supplemental
+[plantuml,Testing,svg]
 ----
-|Defines a module to bring in dependencies that were part of JDK 8 but
-        had been removed with later JDK versions. 
-        
-        Will be removed once the framework migrates to Java 11 as the required 
-        minimum version.
-
-_Dependencies_
-
-* com.fasterxml.woodstox:woodstox-core:jar:<managed>
-* com.sun.xml.bind:jaxb-core:jar:<managed>
-* com.sun.xml.bind:jaxb-impl:jar:<managed>
-* com.sun.xml.ws:jaxws-ri:pom:<managed>
-* com.sun.xml.ws:jaxws-rt:jar:${jaxws-ri.version}
-* javax.xml.bind:jaxb-api:jar:<managed>
-* org.codehaus.woodstox:stax2-api:jar:<managed>
-* org.eclipse.persistence:org.eclipse.persistence.moxy:jar:<managed>
-* org.eclipse.persistence:org.eclipse.persistence.sdo:jar:<managed>
-
-|Apache Isis Core - Schemas
-[source,yaml]
-----
-Group: org.apache.isis.core
-Artifact: isis-schema
-Type: jar
-Folder: \api\schema
-----
-|Apache Isis schemas, for conversion into canonical DTOs (for use in integration scenarios).
-
-_Dependencies_
-
-* joda-time:joda-time:jar:<managed>
-* org.springframework:spring-context:jar:<managed>
-|===
-
-== App
-
-[plantuml,App,svg]
-----
-@startuml(id=App)
-title App - Containers
-caption Artifact Hierarchy (Maven)
+@startuml(id=Testing)
+title Testing - Containers
+caption Artifact Hierarchy (Maven)
 
 skinparam {
   shadowing false
@@ -708,49 +274,46 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<2>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "App\n[Software System]" {
-  rectangle "==Apache Isis Starter Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+skinparam rectangle<<12>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
 }
-@enduml
-----
-.Projects/Modules (App)
-[cols="3a,5a", options="header"]
-|===
-|Coordinates |Description 
-
-|Apache Isis Starter Parent
-[source,yaml]
-----
-Group: org.apache.isis.app
-Artifact: isis-app-starter-parent
-Type: pom
-Folder: \starters
-----
-|Parent pom providing dependency and plugin management for Apache Isis applications
-		built with Maven.  Builds on top of spring-boot-starter-parent.
-|===
-
-== Mavendeps
-
-[plantuml,Mavendeps,svg]
-----
-@startuml(id=Mavendeps)
-title Mavendeps - Containers
-caption Artifact Hierarchy (Maven)
-
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
+skinparam rectangle<<13>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<14>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<15>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<16>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<17>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<18>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
 }
-hide stereotype
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -791,168 +354,309 @@ skinparam rectangle<<9>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Mavendeps\n[Software System]" {
-  rectangle "==Apache Isis Maven Deps\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Maven Deps - BDD Integ Spec\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Maven Deps - Integration Testing\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
-  rectangle "==Apache Isis Maven Deps - JDK11\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
-  rectangle "==Apache Isis Maven Deps - JDO\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
-  rectangle "==Apache Isis Maven Deps - JPA\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
-  rectangle "==Apache Isis Maven Deps - Testing\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
-  rectangle "==Apache Isis Maven Deps - Webapp\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
+skinparam rectangle<<10>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Testing\n[Software System]" {
+  rectangle "==Apache Isis Testing\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Tst - FakeData (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Tst - FakeData (fixtures)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Tst - FakeData (integ tests)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Tst - FakeData (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Tst - Fixtures (applib)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Tst - Fixtures (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
+  rectangle "==Apache Isis Tst - H2 Console (parent)\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
+  rectangle "==Apache Isis Tst - H2 Console (ui)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis Tst - HSQLDB Manager\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Tst - HSQLDB Manager (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
+  rectangle "==Apache Isis Tst - Integ Test Support (applib)\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
+  rectangle "==Apache Isis Tst - Integ Test Support (parent)\n<size:10>[Container: packaging: pom]</size>" <<13>> as 13
+  rectangle "==Apache Isis Tst - Spec/Cucumber (applib)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis Tst - Spec/Cucumber (parent)\n<size:10>[Container: packaging: pom]</size>" <<15>> as 15
+  rectangle "==Apache Isis Tst - Unit Test Support (applib)\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
+  rectangle "==Apache Isis Tst - Unit Test Support (parent)\n<size:10>[Container: packaging: pom]</size>" <<17>> as 17
 }
 2 .[#707070].> 3 : ""
-2 .[#707070].> 4 : ""
-2 .[#707070].> 5 : ""
-2 .[#707070].> 6 : ""
 2 .[#707070].> 7 : ""
-2 .[#707070].> 8 : ""
 2 .[#707070].> 9 : ""
+2 .[#707070].> 11 : ""
+2 .[#707070].> 13 : ""
+2 .[#707070].> 15 : ""
+2 .[#707070].> 17 : ""
+3 .[#707070].> 4 : ""
+3 .[#707070].> 5 : ""
+3 .[#707070].> 6 : ""
+7 .[#707070].> 8 : ""
+9 .[#707070].> 10 : ""
+11 .[#707070].> 12 : ""
+13 .[#707070].> 14 : ""
+15 .[#707070].> 16 : ""
+17 .[#707070].> 18 : ""
 @enduml
 ----
-.Projects/Modules (Mavendeps)
+.Projects/Modules (Testing)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Maven Deps
+|Apache Isis Testing
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps
+Group: org.apache.isis.testing
+Artifact: isis-testing
 Type: pom
-Folder: \mavendeps
+Folder: \testing
 ----
-|Collection of Apache Isis Maven Dependency Bundles.
+|A library of utilities, mini-frameworks and tools for prototyping and testing Apache Isis applications.
 
-|Apache Isis Maven Deps - BDD Integ Spec
+|Apache Isis Tst - FakeData (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-integspecs
+Group: org.apache.isis.testing
+Artifact: isis-testing-fakedata
 Type: pom
-Folder: \mavendeps\integspecs
+Folder: \testing\fakedata
 ----
-|Defines a module that can be used as a single dependency for BDD (Cucumber) specs as integration tests.
+|A module providing a domain service to generate fake random data
+for use in unit tests or integration tests.
+
+|Apache Isis Tst - FakeData (applib)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-fakedata-applib
+Type: jar
+Folder: \testing\fakedata\applib
+----
+|_Components_
+
+* o.a.i.testing.fakedata.applib.services.FakeDataService
 
 _Dependencies_
 
+* com.github.javafaker:javafaker:jar:<managed>
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
+
+|Apache Isis Tst - FakeData (fixtures)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-fakedata-fixtures
+Type: jar
+Folder: \testing\fakedata\fixtures
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
 
-|Apache Isis Maven Deps - Integration Testing
+|Apache Isis Tst - FakeData (integ tests)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-integtests
-Type: pom
-Folder: \mavendeps\integtests
+Group: org.apache.isis.testing
+Artifact: isis-testing-fakedata-integtests
+Type: jar
+Folder: \testing\fakedata\integtests
 ----
-|Defines a module that can be used as a single dependency for integration tests.
-
-_Dependencies_
+|_Dependencies_
 
+* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-fakedata-fixtures:jar:<managed>
 
-|Apache Isis Maven Deps - JDK11
+|Apache Isis Tst - Fixtures (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-jdk11
+Group: org.apache.isis.testing
+Artifact: isis-testing-fixtures
 Type: pom
-Folder: \mavendeps\jdk11
+Folder: \testing\fixtures
 ----
-|Defines a module to bring in dependencies that were part of JDK 8 but
-        had been removed with JDK 11+. These dependencies are activated when the 
-        consuming project is built with JDK 11 or higher.
+|Library to initialize the system under test, either for integration testing or for prototyping.
 
-|Apache Isis Maven Deps - JDO
+|Apache Isis Tst - Fixtures (applib)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-jdo
-Type: pom
-Folder: \mavendeps\jdo
+Group: org.apache.isis.testing
+Artifact: isis-testing-fixtures-applib
+Type: jar
+Folder: \testing\fixtures\applib
 ----
-|Defines a module that provides the default JDO persistence layer integration
-        for running an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
+|_Components_
+
+* o.a.i.testing.fixtures.applib.fixturescripts.ExecutionParametersService
+* o.a.i.testing.fixtures.applib.modules.ModuleWithFixturesService
+* o.a.i.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault
+* o.a.i.testing.fixtures.applib.services.FixturesLifecycleService
 
 _Dependencies_
 
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
+* joda-time:joda-time:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
+* org.apache.isis.subdomains:isis-subdomains-spring-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
 
-|Apache Isis Maven Deps - JPA
+|Apache Isis Tst - H2 Console (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-jpa
+Group: org.apache.isis.testing
+Artifact: isis-testing-h2console
 Type: pom
-Folder: \mavendeps\jpa
+Folder: \testing\h2console
 ----
-|Defines a module that provides the default JPA persistence layer integration
-        for running an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
+|Menu and configuration to open up H2 Console
+
+|Apache Isis Tst - H2 Console (ui)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-h2console-ui
+Type: jar
+Folder: \testing\h2console\ui
+----
+|_Components_
+
+* o.a.i.testing.h2console.ui.webmodule.WebModuleH2Console
 
 _Dependencies_
 
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed>
+* com.h2database:h2:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.beanshell:bsh:jar:2.0b5
 
-|Apache Isis Maven Deps - Testing
+|Apache Isis Tst - HSQLDB Manager (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-unittests
+Group: org.apache.isis.testing
+Artifact: isis-testing-hsqldbmgr
 Type: pom
-Folder: \mavendeps\unittests
+Folder: \testing\hsqldbmgr
 ----
-|Defines a module that can be used as a single dependency for a set of common testing libraries.
+|Menu and configuration to open up HSQLDB Manager
 
-_Dependencies_
+|Apache Isis Tst - HSQLDB Manager
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-hsqldbmgr-ui
+Type: jar
+Folder: \testing\hsqldbmgr\ui
+----
+|_Dependencies_
 
-* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.hsqldb:hsqldb:jar:<managed>
 
-|Apache Isis Maven Deps - Webapp
+|Apache Isis Tst - Integ Test Support (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.mavendeps
-Artifact: isis-mavendeps-webapp
+Group: org.apache.isis.testing
+Artifact: isis-testing-integtestsupport
 Type: pom
-Folder: \mavendeps\webapp
+Folder: \testing\integtestsupport
+----
+|Support for writing integ tests in JUnit 5; should be added as a dependency with scope=test only
+
+|Apache Isis Tst - Integ Test Support (applib)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-integtestsupport-applib
+Type: jar
+Folder: \testing\integtestsupport\applib
 ----
-|Defines a module that can be almost used as a single dependency for running 
-        an Apache Isis webapp (Wicket, Restful Objects and Shiro security).
-        
-        Note: Also requires a persistence provider.
+|_Components_
+
+* o.a.i.testing.integtestsupport.applib.IsisIntegrationTestAbstract$InteractionSupport
 
 _Dependencies_
 
-* org.apache.isis.core:isis-applib:jar:<managed>
+* com.approvaltests:approvaltests:jar:<managed>
+* com.h2database:h2:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.core:isis-core-security:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
 * org.apache.isis.security:isis-security-bypass:jar:<managed>
-* org.apache.isis.security:isis-security-keycloak:jar:<managed>
-* org.apache.isis.security:isis-security-shiro:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-restfulobjects-jaxrsresteasy4:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-restfulobjects-viewer:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-wicket-viewer:jar:<managed>
-* org.springframework.boot:spring-boot-starter-tomcat:jar:<managed>
-* org.springframework.boot:spring-boot-starter-web:jar:<managed>
+* org.hamcrest:hamcrest-library:jar:<managed>
+* org.hsqldb:hsqldb:jar:<managed>
+* org.slf4j:slf4j-api:jar:${slf4j-api.version}
+* org.springframework:spring-test:jar:<managed>
+* org.springframework.boot:spring-boot-starter-test:jar:<managed>
+
+|Apache Isis Tst - Spec/Cucumber (parent)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-specsupport
+Type: pom
+Folder: \testing\specsupport
+----
+|Allows Cucumber to be used to write BDD-style specifications, generally as an alternative to integration tests.
+
+|Apache Isis Tst - Spec/Cucumber (applib)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-specsupport-applib
+Type: jar
+Folder: \testing\specsupport\applib
+----
+|_Dependencies_
+
+* io.cucumber:cucumber-java:jar:<managed>
+* io.cucumber:cucumber-junit-platform-engine:jar:<managed>
+* io.cucumber:cucumber-spring:jar:<managed>
+* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
+* org.junit.jupiter:junit-jupiter-api:jar:<managed>
+
+|Apache Isis Tst - Unit Test Support (parent)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-unittestsupport
+Type: pom
+Folder: \testing\unittestsupport
+----
+|A module providing test utilities for unit testing of domain modules
+
+|Apache Isis Tst - Unit Test Support (applib)
+[source,yaml]
+----
+Group: org.apache.isis.testing
+Artifact: isis-testing-unittestsupport-applib
+Type: jar
+Folder: \testing\unittestsupport\applib
+----
+|_Dependencies_
+
+* com.approvaltests:approvaltests:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
+* org.datanucleus:javax.jdo:jar:<managed>
+* org.jmock:jmock:jar:<managed>
+* org.jmock:jmock-junit4:jar:<managed>
+* org.picocontainer:picocontainer:jar:<managed>
+* org.slf4j:slf4j-api:jar:<managed>
+* org.springframework:spring-test:jar:<managed>
+* org.springframework.boot:spring-boot-starter-test:jar:<managed>
 |===
 
-== Mappings
+== Examples
 
-[plantuml,Mappings,svg]
+[plantuml,Examples,svg]
 ----
-@startuml(id=Mappings)
-title Mappings - Containers
+@startuml(id=Examples)
+title Examples - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -993,108 +697,327 @@ skinparam rectangle<<7>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Mappings\n[Software System]" {
-  rectangle "==Apache Isis Ext - REST Client (applib)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Ext - REST Client (parent)\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
-  rectangle "==Apache Isis Map - JaxRS Client (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Map - JaxRS Client (impl)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Map - JaxRS Client (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Mappings\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+package "Examples\n[Software System]" {
+  rectangle "==Demo - Domain\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Demo - JavaFX\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Demo - Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Demo - Vaadin\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Demo - Web\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Demo - Wicket\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
 }
-6 .[#707070].> 7 : ""
-3 .[#707070].> 4 : ""
-3 .[#707070].> 5 : ""
-2 .[#707070].> 6 : ""
 2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
 @enduml
 ----
-.Projects/Modules (Mappings)
+.Projects/Modules (Examples)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Mappings
+|Demo - Parent
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings
+Group: org.apache.isis.examples.apps
+Artifact: demo-parent
 Type: pom
-Folder: \mappings
+Folder: \examples\demo
 ----
-|Libraries and tools to map one bounded context (usually an Apache Isis application) to some other BC (usually
-		_not_ an Apache Isis application).
-
-_Dependencies_
+|_Dependencies_
 
+* com.h2database:h2:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-modelannotation:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-persistence-jdo-dn5:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-persistence-jdo-dn5:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
-|Apache Isis Map - JaxRS Client (parent)
+|Demo - Domain
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings-jaxrsclient
-Type: pom
-Folder: \mappings\jaxrsclient
+Group: org.apache.isis.examples.apps
+Artifact: demo-domain
+Type: jar
+Folder: \examples\demo\domain
 ----
-|Integrates JaxRS Client Library
+|_Dependencies_
 
-|Apache Isis Map - JaxRS Client (applib)
+* com.h2database:h2:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-modelannotation:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed>
+* org.apache.isis.testing:isis-testing-h2console-ui:jar:<managed>
+* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+* org.assertj:assertj-core:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
+* org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
+
+|Demo - JavaFX
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings-jaxrsclient-applib
+Group: org.apache.isis.examples.apps
+Artifact: demo-javafx
 Type: jar
-Folder: \mappings\jaxrsclient\applib
+Folder: \examples\demo\javafx
 ----
 |_Dependencies_
 
-* javax:javaee-api:jar:<managed>
-* org.springframework:spring-context:jar:<managed>
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.core:isis-core-security:jar:<managed>
+* org.apache.isis.examples.apps:demo-domain:jar:${project.version}
+* org.apache.isis.incubator.viewer:isis-viewer-javafx-viewer:jar:${project.version}
+* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.security:isis-security-bypass:jar:<managed>
+* org.apache.isis.security:isis-security-shiro:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui:pom:${project.version}
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui:pom:${project.version}
+* org.projectlombok:lombok:jar:<managed>
 
-|Apache Isis Map - JaxRS Client (impl)
+|Demo - Vaadin
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings-jaxrsclient-impl
+Group: org.apache.isis.examples.apps
+Artifact: demo-vaadin
 Type: jar
-Folder: \mappings\jaxrsclient\testlib
+Folder: \examples\demo\vaadin
 ----
 |_Dependencies_
 
-* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
-
-|Apache Isis Ext - REST Client (parent)
+* org.apache.isis.examples.apps:demo-web:jar:${project.version}
+* org.apache.isis.incubator.viewer:isis-viewer-vaadin-viewer:jar:${project.version}
+* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-vaa:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-wkt:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui-wkt:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
+
+|Demo - Web
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings-restclient
+Group: org.apache.isis.examples.apps
+Artifact: demo-web
+Type: jar
+Folder: \examples\demo\web
+----
+|_Dependencies_
+
+* org.apache.isis.examples.apps:demo-domain:jar:${project.version}
+* org.apache.isis.extensions:isis-extensions-command-replay-primary:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-command-replay-secondary:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed>
+* org.springframework.boot:spring-boot-starter:jar:<managed>
+* org.springframework.boot:spring-boot-starter-actuator:jar:<managed>
+* org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
+
+|Demo - Wicket
+[source,yaml]
+----
+Group: org.apache.isis.examples.apps
+Artifact: demo-wicket
+Type: jar
+Folder: \examples\demo\wicket
+----
+|_Dependencies_
+
+* org.apache.isis.examples.apps:demo-web:jar:${project.version}
+* org.apache.isis.extensions:isis-extensions-pdfjs-ui:jar:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-wkt:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui-wkt:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:2.0.0-SNAPSHOT
+* org.apache.isis.viewer:isis-viewer-wicket-viewer:jar:2.0.0-SNAPSHOT
+|===
+
+== Root
+
+[plantuml,Root,svg]
+----
+@startuml(id=Root)
+title Root - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Root\n[Software System]" {
+  rectangle "==Apache Isis\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
+  rectangle "==Apache Isis (Aggregator)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis - Antora\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+}
+2 .[#707070].> 4 : ""
+2 .[#707070].> 3 : ""
+@enduml
+----
+.Projects/Modules (Root)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis (Aggregator)
+[source,yaml]
+----
+Group: org.apache.isis
+Artifact: isis-all
 Type: pom
-Folder: \mappings\restclient
+Folder: /
 ----
-|A client for the Restful Objects Viewer
+|Convenience aggregator POM that references all modules, some explicitely,
+others via profiles, that are not activiated per default.
+The parent POM of the core framework is isis-parent/pom.xml.
 
-|Apache Isis Ext - REST Client (applib)
+|Apache Isis - Antora
 [source,yaml]
 ----
-Group: org.apache.isis.mappings
-Artifact: isis-mappings-restclient-applib
+Group: org.apache.isis
+Artifact: antora
+Type: pom
+Folder: \antora
+----
+|
+
+|Apache Isis
+[source,yaml]
+----
+Group: org.apache.isis
+Artifact: isis-parent
+Type: pom
+Folder: \isis-parent
+----
+|Parent for the core framework + extensions, starter parent pom for starter apps.
+
+|Apache Isis Supplemental - Legal Info
+[source,yaml]
+----
+Group: org.apache.isis
+Artifact: supplemental-model
 Type: jar
-Folder: \mappings\restclient\applib
+Folder: \supplemental-model
 ----
-|A client for the Restful Objects Viewer
+|For example, the templates used by many Apache distributions assemble a listing of project dependencies
+according to their organization name (and URL), along with the URL each project's website. When dependency
+POMs are missing this information, the dependency notice file that the Remote Resources Plugin renders can
+be invalid.
+To compensate for incomplete dependency POMs, we use the supplemental models support.
+|===
+
+== Commons
+
+[plantuml,Commons,svg]
+----
+@startuml(id=Commons)
+title Commons - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Commons\n[Software System]" {
+  rectangle "==Apache Isis Commons\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
+----
+.Projects/Modules (Commons)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis Commons
+[source,yaml]
+----
+Group: org.apache.isis.commons
+Artifact: isis-commons
+Type: jar
+Folder: \commons
+----
+|Apache Isis Commons is a library with utilities, that are shared with the entire Apache Isis ecosystem.
 
 _Dependencies_
 
-* org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed>
+* com.fasterxml.jackson.core:jackson-databind:jar:<managed>
+* com.google.code.findbugs:annotations:jar:<managed>
+* javax:javaee-api: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>
+* org.slf4j:slf4j-api:jar:<managed>
 * org.springframework:spring-context:jar:<managed>
+* org.springframework:spring-tx:jar:<managed>
+* org.springframework.boot:spring-boot-starter:jar:<managed>
+* org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
+* org.yaml:snakeyaml:jar:<managed>
+
+_Document Index Entries_
+
+xref:system:generated:index/commons/functional/Result.adoc[Result], xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId], xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername], xref:system:generated:index/commons/resource/ResourceCoordinates.adoc[ResourceCoordinates]
 |===
 
-== Persistence
+== Core
 
-[plantuml,Persistence,svg]
+[plantuml,Core,svg]
 ----
-@startuml(id=Persistence)
-title Persistence - Containers
+@startuml(id=Core)
+title Core - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -1120,6 +1043,16 @@ skinparam rectangle<<13>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<14>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<15>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -1165,290 +1098,334 @@ skinparam rectangle<<10>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Persistence\n[Software System]" {
-  rectangle "==Apache Isis Persistence - JDO\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Persistence - JDO (Spring)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Persistence - JDO (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Persistence - JDO (integration)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Persistence - JDO (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Persistence - JDO (provider)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Persistence - JDO Provider (DataNucleus)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Persistence - JPA\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
-  rectangle "==Apache Isis Persistence - JPA (applib)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Persistence - JPA (integration)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Persistence - JPA (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis Persistence - JPA EclipseLink\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+package "Core\n[Software System]" {
+  rectangle "==Apache Isis - JDK Supplemental\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
+  rectangle "==Apache Isis Core\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Core - AppLib\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Core - Code Gen (ByteBuddy)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Core - Configuration\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Core - Interaction\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Core - MetaModel\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Core - Runtime\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis Core - Runtime Services\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis Core - Schemas\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis Core - Security\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+  rectangle "==Apache Isis Core - Transaction\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Core - Unit Test Support\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis Core - WebApp\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
 }
-2 .[#707070].> 8 : ""
+2 .[#707070].> 14 : ""
 2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 6 : ""
+2 .[#707070].> 8 : ""
+2 .[#707070].> 9 : ""
+2 .[#707070].> 10 : ""
+2 .[#707070].> 15 : ""
+2 .[#707070].> 11 : ""
+2 .[#707070].> 12 : ""
 2 .[#707070].> 7 : ""
-2 .[#707070].> 4 : ""
-9 .[#707070].> 10 : ""
-9 .[#707070].> 12 : ""
-9 .[#707070].> 13 : ""
-9 .[#707070].> 11 : ""
+2 .[#707070].> 13 : ""
 @enduml
 ----
-.Projects/Modules (Persistence)
+.Projects/Modules (Core)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Persistence - JDO
+|Apache Isis Core
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo
+Group: org.apache.isis.core
+Artifact: isis-core
 Type: pom
-Folder: \persistence\jdo
+Folder: \core
 ----
-|Supplementary applib for JDO persistence
+|Core framework, providing metamodel, runtime and core APIs.
 
-|Apache Isis Persistence - JDO (applib)
+_Dependencies_
+
+* org.projectlombok:lombok:jar:<managed>
+
+|Apache Isis Core - AppLib
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-applib
+Group: org.apache.isis.core
+Artifact: isis-applib
 Type: jar
-Folder: \persistence\jdo\applib
+Folder: \api\applib
 ----
-|Supplementary applib for JDO persistence
+|Isis application library, defining annotations and utilities for the
+default (Java) programming model.
 
 _Dependencies_
 
+* com.google.code.findbugs:annotations:jar:<managed>
+* javax:javaee-api:jar:<managed>
 * org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.datanucleus:datanucleus-rdbms:jar:<managed>
-* org.datanucleus:javax.jdo:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
+* org.assertj:assertj-core:jar:<managed>
+* org.jmock:jmock:jar:<managed>
 
 _Document Index Entries_
 
-xref:system:generated:index/persistence/jdo/applib/integration/JdoSupportService.adoc[JdoSupportService]
+xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider],  [...]
 
-|Apache Isis Persistence - JDO Provider (DataNucleus)
+|Apache Isis Core - Code Gen (ByteBuddy)
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-datanucleus
+Group: org.apache.isis.core
+Artifact: isis-core-codegen-bytebuddy
 Type: jar
-Folder: \persistence\jdo\datanucleus
+Folder: \core\codegen-bytebuddy
 ----
-|JDO Implementation (powered by DataNucleus)
-
-_Components_
-
-* o.a.i.persistence.jdo.datanucleus.config.DnEntityDiscoveryListener
-* o.a.i.persistence.jdo.datanucleus.config.DnSettings
-* o.a.i.persistence.jdo.datanucleus.entities.DnEntityStateProvider
-* o.a.i.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceDefault
-* o.a.i.persistence.jdo.datanucleus.metamodel.JdoDataNucleusProgrammingModel
-* o.a.i.persistence.jdo.datanucleus.schema.JdoSchemaService
+|Code generation using ByteBuddy.
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-integration:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
-* org.datanucleus:datanucleus-api-jdo:jar:<managed>
-* org.datanucleus:datanucleus-core:jar:<managed>
-* org.datanucleus:datanucleus-jdo-query:jar:<managed>
-* org.datanucleus:datanucleus-jodatime:jar:<managed>
-* org.datanucleus:datanucleus-rdbms:jar:<managed>
-
-_Document Index Entries_
-
-xref:system:generated:index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc[JdoSchemaService]
+* net.bytebuddy:byte-buddy:jar:<managed>
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.objenesis:objenesis:jar:<managed>
 
-|Apache Isis Persistence - JDO (integration)
+|Apache Isis Core - Configuration
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-integration
+Group: org.apache.isis.core
+Artifact: isis-core-config
 Type: jar
-Folder: \persistence\jdo\integration
+Folder: \core\config
 ----
-|JDO Integration (powered by DataNucleus)
+|Isis configuration library for framework internal use.
 
 _Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-metamodel:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-spring:jar:<managed>
+* org.hibernate.validator:hibernate-validator:jar:<managed>
+* org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
 
-|Apache Isis Persistence - JDO (metamodel)
+|Apache Isis Core - Interaction
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-metamodel
+Group: org.apache.isis.core
+Artifact: isis-core-interaction
 Type: jar
-Folder: \persistence\jdo\metamodel
+Folder: \core\interaction
 ----
-|JDO Metamodel Facets / Programming Model
-
-_Components_
-
-* o.a.i.persistence.jdo.metamodel.JdoProgrammingModel
+|Provides _Interaction Scope_.
+Top level action execution or property changes are wrapped in an _Interaction_.
+That typically corresponds to a http request/response cycle or a JUnit test method execution.
 
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
 
-|Apache Isis Persistence - JDO (provider)
+|Apache Isis Core - Unit Test Support
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-provider
+Group: org.apache.isis.core
+Artifact: isis-core-internaltestsupport
 Type: jar
-Folder: \persistence\jdo\provider
+Folder: \core\internaltestsupport
 ----
-|JDO Provider to be implemented by any actual JDO provider eg. DataNucleus.
+|Support for writing unit tests in either JUnit 4 or JUnit 5; should be added as a dependency with scope=test only
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* net.bytebuddy:byte-buddy:jar:<managed>
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
+* org.assertj:assertj-core:jar:<managed>
+* org.datanucleus:javax.jdo:jar:<managed>
+* org.hamcrest:hamcrest-library:jar:<managed>
+* org.jmock:jmock:jar:<managed>
+* org.jmock:jmock-junit4:jar:<managed>
+* org.junit.jupiter:junit-jupiter-api:jar:<managed>
+* org.junit.jupiter:junit-jupiter-engine:jar:<managed>
+* org.junit.vintage:junit-vintage-engine:jar:<managed>
+* org.mockito:mockito-core:jar:<managed>
+* org.picocontainer:picocontainer:jar:<managed>
+* org.slf4j:slf4j-api:jar:${slf4j-api.version}
+* org.springframework:spring-test:jar:<managed>
+* org.springframework.boot:spring-boot-starter-test:jar:<managed>
 
-|Apache Isis Persistence - JDO (Spring)
+|Apache Isis Core - MetaModel
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jdo-spring
+Group: org.apache.isis.core
+Artifact: isis-core-metamodel
 Type: jar
-Folder: \persistence\jdo\spring
+Folder: \core\metamodel
 ----
-|JDO Spring integration.
-		
-		This is a fork of the Spring ORM JDO sources at github, 
-		for which support had been dropped back in 2016 [1].
-		
-		Credits to the original authors.
-		
-		[1] https://github.com/spring-projects/spring-framework/issues/18702
-
-_Dependencies_
+|_Dependencies_
 
-* org.apache.isis.commons:isis-commons:jar:<managed>
+* io.swagger:swagger-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
-* org.springframework:spring-jdbc:jar:<managed>
-* org.springframework:spring-web:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-security:jar:<managed>
+* org.hibernate.validator:hibernate-validator:jar:<managed>
+* org.jmock:jmock:jar:<managed>
 
-|Apache Isis Persistence - JPA
+|Apache Isis Core - Runtime
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jpa
-Type: pom
-Folder: \persistence\jpa
+Group: org.apache.isis.core
+Artifact: isis-core-runtime
+Type: jar
+Folder: \core\runtime
 ----
-|Apache Isis JPA integration
+|Bundles framework internal services, utilities and events.
 
-|Apache Isis Persistence - JPA (applib)
+_Dependencies_
+
+* org.apache.isis.core:isis-core-interaction:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.core:isis-core-transaction:jar:<managed>
+
+|Apache Isis Core - Runtime Services
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jpa-applib
+Group: org.apache.isis.core
+Artifact: isis-core-runtimeservices
 Type: jar
-Folder: \persistence\jpa\applib
+Folder: \core\runtimeservices
 ----
-|Supplementary applib for JPA persistence
+|Introduced to keep the 'runtime' package concise. Viewers don't have dependencies on this module.
 
 _Dependencies_
 
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.hsqldb:hsqldb:jar:<managed>
 
 _Document Index Entries_
 
-xref:system:generated:index/persistence/jpa/applib/services/JpaSupportService.adoc[JpaSupportService]
+xref:system:generated:index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc[ExceptionRecognizerForOtherDataAccessProblem], xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault], xref:system:generated:index/core/runtimeservices/xmlsnapshot/XmlSnapshotServiceDefault.adoc[XmlSnapshotServiceDefault]
 
-|Apache Isis Persistence - JPA EclipseLink
+|Apache Isis Core - Security
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jpa-eclipselink
+Group: org.apache.isis.core
+Artifact: isis-core-security
 Type: jar
-Folder: \persistence\jpa\eclipselink
+Folder: \core\security
 ----
-|EclipseLink integration. Sets up EclipseLink as the implementation provider for Spring Data JPA.
-
-_Dependencies_
+|_Dependencies_
 
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-integration:jar:<managed>
-* org.eclipse.persistence:org.eclipse.persistence.jpa:jar:2.7.8
-* org.springframework.boot:spring-boot-starter-data-jpa:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.hamcrest:hamcrest-library:jar:<managed>
+* org.junit.jupiter:junit-jupiter-api:jar:<managed>
+* org.junit.jupiter:junit-jupiter-engine:jar:<managed>
+* org.junit.vintage:junit-vintage-engine:jar:<managed>
 
-|Apache Isis Persistence - JPA (integration)
+|Apache Isis Core - Transaction
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jpa-integration
+Group: org.apache.isis.core
+Artifact: isis-core-transaction
 Type: jar
-Folder: \persistence\jpa\integration
+Folder: \core\transaction
 ----
-|JPA integration (facets, jpa-context)
-
-_Components_
-
-* o.a.i.persistence.jpa.integration.metamodel.JpaProgrammingModel
+|Provides transaction integration with Spring and also
+entity change tracking, with associated publishing and pre/post value events.
 
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-metamodel:jar:<managed>
-* org.springframework.data:spring-data-jpa:jar:<managed>
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
 
-|Apache Isis Persistence - JPA (metamodel)
+_Document Index Entries_
+
+xref:system:generated:index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc[EntityChangeTrackerDefault], xref:system:generated:index/core/transaction/events/TransactionAfterCompletionEvent.adoc[TransactionAfterCompletionEvent]
+
+|Apache Isis Core - WebApp
 [source,yaml]
 ----
-Group: org.apache.isis.persistence
-Artifact: isis-persistence-jpa-metamodel
+Group: org.apache.isis.core
+Artifact: isis-core-webapp
 Type: jar
-Folder: \persistence\jpa\metamodel
+Folder: \core\webapp
 ----
-|JPA Metamodel Facets / Programming Model
-
-_Components_
-
-* o.a.i.persistence.jpa.metamodel.JpaProgrammingModel
+|Bundles all the web specific classes a srequired by viewers.
+Introduced to keep the 'runtime' package concise.
 
 _Dependencies_
 
+* org.apache.isis.core:isis-core-interaction:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
-|===
-
-== Security
+* org.apache.isis.core:isis-core-transaction:jar:<managed>
+* org.springframework:spring-web:jar:<managed>
+* org.springframework.boot:spring-boot:jar:<managed>
+* org.springframework.boot:spring-boot-actuator:jar:<managed>
+* org.springframework.boot:spring-boot-starter-thymeleaf:jar:<managed>
 
-[plantuml,Security,svg]
+|Apache Isis - JDK Supplemental
+[source,yaml]
 ----
-@startuml(id=Security)
-title Security - Containers
-caption Artifact Hierarchy (Maven)
+Group: org.apache.isis.core
+Artifact: isis-jdk-supplemental
+Type: pom
+Folder: \core\jdk-supplemental
+----
+|Defines a module to bring in dependencies that were part of JDK 8 but
+had been removed with later JDK versions.
 
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
+Will be removed once the framework migrates to Java 11 as the required
+minimum version.
+
+_Dependencies_
+
+* com.fasterxml.woodstox:woodstox-core:jar:<managed>
+* com.sun.xml.bind:jaxb-core:jar:<managed>
+* com.sun.xml.bind:jaxb-impl:jar:<managed>
+* com.sun.xml.ws:jaxws-ri:pom:<managed>
+* com.sun.xml.ws:jaxws-rt:jar:${jaxws-ri.version}
+* javax.xml.bind:jaxb-api:jar:<managed>
+* org.codehaus.woodstox:stax2-api:jar:<managed>
+* org.eclipse.persistence:org.eclipse.persistence.moxy:jar:<managed>
+* org.eclipse.persistence:org.eclipse.persistence.sdo:jar:<managed>
+
+|Apache Isis Core - Schemas
+[source,yaml]
+----
+Group: org.apache.isis.core
+Artifact: isis-schema
+Type: jar
+Folder: \api\schema
+----
+|Apache Isis schemas, for conversion into canonical DTOs (for use in integration scenarios).
+
+_Dependencies_
+
+* joda-time:joda-time:jar:<managed>
+* org.springframework:spring-context:jar:<managed>
+|===
+
+== Persistence
+
+=== JDO
+
+[plantuml,JDO,svg]
+----
+@startuml(id=JDO)
+title JDO - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
 }
 hide stereotype
 skinparam rectangle<<2>> {
@@ -1466,90 +1443,205 @@ skinparam rectangle<<4>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Security\n[Software System]" {
-  rectangle "==Apache Isis Security - Bypass\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
-  rectangle "==Apache Isis Security - Keycloak\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Security - Shiro\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<6>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<7>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<8>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "JDO\n[Software System]" {
+  rectangle "==Apache Isis Persistence - JDO\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Persistence - JDO (Spring)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Persistence - JDO (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Persistence - JDO (integration)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Persistence - JDO (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Persistence - JDO (provider)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis Persistence - JDO Provider (DataNucleus)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
 }
+2 .[#707070].> 8 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
+2 .[#707070].> 4 : ""
 @enduml
 ----
-.Projects/Modules (Security)
+.Projects/Modules (JDO)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Security - Bypass
+|Apache Isis Persistence - JDO
 [source,yaml]
 ----
-Group: org.apache.isis.security
-Artifact: isis-security-bypass
-Type: jar
-Folder: \security\bypass
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo
+Type: pom
+Folder: \persistence\jdo
 ----
-|_Components_
+|Supplementary applib for JDO persistence
 
-* o.a.i.security.bypass.authentication.AuthenticatorBypass
-* o.a.i.security.bypass.authorization.AuthorizorBypass
+|Apache Isis Persistence - JDO (applib)
+[source,yaml]
+----
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-applib
+Type: jar
+Folder: \persistence\jdo\applib
+----
+|Supplementary applib for JDO persistence
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.datanucleus:datanucleus-rdbms:jar:<managed>
+* org.datanucleus:javax.jdo:jar:<managed>
 
-|Apache Isis Security - Keycloak
+_Document Index Entries_
+
+xref:system:generated:index/persistence/jdo/applib/integration/JdoSupportService.adoc[JdoSupportService]
+
+|Apache Isis Persistence - JDO Provider (DataNucleus)
 [source,yaml]
 ----
-Group: org.apache.isis.security
-Artifact: isis-security-keycloak
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-datanucleus
 Type: jar
-Folder: \security\keycloak
+Folder: \persistence\jdo\datanucleus
 ----
-|Authentication and Authorization using Keycloak
+|JDO Implementation (powered by DataNucleus)
 
 _Components_
 
-* o.a.i.security.keycloak.authentication.AuthenticatorKeycloak
-* o.a.i.security.keycloak.authorization.AuthorizorKeycloak
-* o.a.i.security.keycloak.webmodule.WebModuleKeycloak
+* o.a.i.persistence.jdo.datanucleus.config.DnEntityDiscoveryListener
+* o.a.i.persistence.jdo.datanucleus.config.DnSettings
+* o.a.i.persistence.jdo.datanucleus.entities.DnEntityStateProvider
+* o.a.i.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceDefault
+* o.a.i.persistence.jdo.datanucleus.metamodel.JdoDataNucleusProgrammingModel
+* o.a.i.persistence.jdo.datanucleus.schema.JdoSchemaService
 
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-integration:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
+* org.datanucleus:datanucleus-api-jdo:jar:<managed>
+* org.datanucleus:datanucleus-core:jar:<managed>
+* org.datanucleus:datanucleus-jdo-query:jar:<managed>
+* org.datanucleus:datanucleus-jodatime:jar:<managed>
+* org.datanucleus:datanucleus-rdbms:jar:<managed>
 
-|Apache Isis Security - Shiro
+_Document Index Entries_
+
+xref:system:generated:index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc[JdoSchemaService]
+
+|Apache Isis Persistence - JDO (integration)
 [source,yaml]
 ----
-Group: org.apache.isis.security
-Artifact: isis-security-shiro
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-integration
 Type: jar
-Folder: \security\shiro
+Folder: \persistence\jdo\integration
 ----
-|Authentication and Authorization using Apache Shiro.
+|JDO Integration (powered by DataNucleus)
+
+_Dependencies_
+
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-metamodel:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-spring:jar:<managed>
+
+|Apache Isis Persistence - JDO (metamodel)
+[source,yaml]
+----
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-metamodel
+Type: jar
+Folder: \persistence\jdo\metamodel
+----
+|JDO Metamodel Facets / Programming Model
 
 _Components_
 
-* o.a.i.security.shiro.authentication.AuthenticatorShiro
-* o.a.i.security.shiro.authorization.AuthorizorShiro
-* o.a.i.security.shiro.webmodule.WebModuleShiro
+* o.a.i.persistence.jdo.metamodel.JdoProgrammingModel
 
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
-* org.apache.shiro:shiro-core:jar:<managed>
-* org.apache.shiro:shiro-web:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
+
+|Apache Isis Persistence - JDO (provider)
+[source,yaml]
+----
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-provider
+Type: jar
+Folder: \persistence\jdo\provider
+----
+|JDO Provider to be implemented by any actual JDO provider eg. DataNucleus.
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+
+|Apache Isis Persistence - JDO (Spring)
+[source,yaml]
+----
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jdo-spring
+Type: jar
+Folder: \persistence\jdo\spring
+----
+|JDO Spring integration.
+
+This is a fork of the Spring ORM JDO sources at github,
+for which support had been dropped back in 2016 [1].
+
+Credits to the original authors.
+
+[1] https://github.com/spring-projects/spring-framework/issues/18702
+
+_Dependencies_
+
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-provider:jar:<managed>
+* org.springframework:spring-jdbc:jar:<managed>
+* org.springframework:spring-web:jar:<managed>
 |===
 
-== Valuetypes
+=== JPA
 
-[plantuml,Valuetypes,svg]
+[plantuml,JPA,svg]
 ----
-@startuml(id=Valuetypes)
-title Valuetypes - Containers
+@startuml(id=JPA)
+title JPA - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -1560,465 +1652,299 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<22>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<12>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<13>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<14>> {
+skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<15>> {
+skinparam rectangle<<3>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<16>> {
+skinparam rectangle<<4>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<17>> {
+skinparam rectangle<<5>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<18>> {
+skinparam rectangle<<6>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<19>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
+package "JPA\n[Software System]" {
+  rectangle "==Apache Isis Persistence - JPA\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Persistence - JPA (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Persistence - JPA (integration)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Persistence - JPA (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Persistence - JPA EclipseLink\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
 }
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<6>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<7>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<8>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<9>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<20>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<21>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Valuetypes\n[Software System]" {
-  rectangle "==Apache Isis Val - Asciidoctor (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Val - Asciidoctor (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
-  rectangle "==Apache Isis Val - Asciidoctor (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Val - Asciidoctor (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Val - Asciidoctor (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Val - Asciidoctor (ui vaadin)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Val - Asciidoctor (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Val - Asciidoctor (ui)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
-  rectangle "==Apache Isis Val - Markdown (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis Val - Markdown (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
-  rectangle "==Apache Isis Val - Markdown (applib)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Val - Markdown (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
-  rectangle "==Apache Isis Val - Markdown (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis Val - Markdown (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
-  rectangle "==Apache Isis Val - Markdown (ui)\n<size:10>[Container: packaging: pom]</size>" <<16>> as 16
-  rectangle "==Apache Isis Val - SSE (ui)\n<size:10>[Container: packaging: pom]</size>" <<21>> as 21
-  rectangle "==Apache Isis Val - Server Sent Events\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
-  rectangle "==Apache Isis Val - Server Sent Events (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
-  rectangle "==Apache Isis Val - Server Sent Events (parent)\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
-  rectangle "==Apache Isis Val - Server Sent Events (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
-  rectangle "==Apache Isis Value types\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-}
-6 .[#707070].> 7 : ""
-3 .[#707070].> 5 : ""
-3 .[#707070].> 6 : ""
-3 .[#707070].> 4 : ""
-3 .[#707070].> 8 : ""
-8 .[#707070].> 10 : ""
-14 .[#707070].> 15 : ""
-11 .[#707070].> 13 : ""
-11 .[#707070].> 14 : ""
-11 .[#707070].> 12 : ""
-11 .[#707070].> 16 : ""
-16 .[#707070].> 17 : ""
-21 .[#707070].> 22 : ""
-18 .[#707070].> 21 : ""
-18 .[#707070].> 19 : ""
-18 .[#707070].> 20 : ""
 2 .[#707070].> 3 : ""
-2 .[#707070].> 11 : ""
-2 .[#707070].> 18 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 4 : ""
 @enduml
 ----
-.Projects/Modules (Valuetypes)
+.Projects/Modules (JPA)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Value types
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes
-Type: pom
-Folder: \valuetypes
-----
-|Value types for use within Apache Isis applications.
-
-_Dependencies_
-
-* org.projectlombok:lombok:jar:<managed>
-
-|Apache Isis Val - Asciidoctor (parent)
+|Apache Isis Persistence - JPA
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jpa
 Type: pom
-Folder: \valuetypes\asciidoc
+Folder: \persistence\jpa
 ----
-|Asciidoc value type.
+|Apache Isis JPA integration
 
-|Apache Isis Val - Asciidoctor (applib)
+|Apache Isis Persistence - JPA (applib)
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-applib
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jpa-applib
 Type: jar
-Folder: \valuetypes\asciidoc\applib
+Folder: \persistence\jpa\applib
 ----
-|_Dependencies_
+|Supplementary applib for JPA persistence
+
+_Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
-* org.asciidoctor:asciidoctorj-api:jar:${asciidoctorj.version}
 
-|Apache Isis Val - Asciidoctor (MetaModel)
+_Document Index Entries_
+
+xref:system:generated:index/persistence/jpa/applib/services/JpaSupportService.adoc[JpaSupportService]
+
+|Apache Isis Persistence - JPA EclipseLink
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-metamodel
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jpa-eclipselink
 Type: jar
-Folder: \valuetypes\asciidoc\metamodel
+Folder: \persistence\jpa\eclipselink
 ----
-|_Components_
-
-* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocMetaModelRefiner
-* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocValueTypeProvider
+|EclipseLink integration. Sets up EclipseLink as the implementation provider for Spring Data JPA.
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-integration:jar:<managed>
+* org.eclipse.persistence:org.eclipse.persistence.jpa:jar:2.7.8
+* org.springframework.boot:spring-boot-starter-data-jpa:jar:<managed>
 
-|Apache Isis Val - Asciidoctor (Persistence)
+|Apache Isis Persistence - JPA (integration)
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-persistence
-Type: pom
-Folder: \valuetypes\asciidoc\persistence
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jpa-integration
+Type: jar
+Folder: \persistence\jpa\integration
 ----
-|_Dependencies_
+|JPA integration (facets, jpa-context)
 
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
+_Components_
 
-|Apache Isis Val - Asciidoctor (persistence jdo DN5)
+* o.a.i.persistence.jpa.integration.metamodel.JpaProgrammingModel
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-metamodel:jar:<managed>
+* org.springframework.data:spring-data-jpa:jar:<managed>
+
+|Apache Isis Persistence - JPA (metamodel)
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-persistence-jdo-dn5
+Group: org.apache.isis.persistence
+Artifact: isis-persistence-jpa-metamodel
 Type: jar
-Folder: \valuetypes\asciidoc\persistence\jdo-dn5
+Folder: \persistence\jpa\metamodel
 ----
-|_Dependencies_
+|JPA Metamodel Facets / Programming Model
 
-* org.datanucleus:datanucleus-core:jar:<managed>
+_Components_
 
-|Apache Isis Val - Asciidoctor (ui)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-ui
-Type: pom
-Folder: \valuetypes\asciidoc\ui
+* o.a.i.persistence.jpa.metamodel.JpaProgrammingModel
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
+|===
+
+== Security
+
+=== Bypass
+
+[plantuml,Bypass,svg]
 ----
-|_Dependencies_
+@startuml(id=Bypass)
+title Bypass - Containers
+caption Artifact Hierarchy (Maven)
 
-* com.github.jnr:jnr-constants:jar:0.10.1
-* com.github.jnr:jnr-enxio:jar:0.32.3
-* com.github.jnr:jnr-posix:jar:3.1.4
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
-* org.asciidoctor:asciidoctorj:jar:${asciidoctorj.version}
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Bypass\n[Software System]" {
+  rectangle "==Apache Isis Security - Bypass\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
+----
+.Projects/Modules (Bypass)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Val - Asciidoctor (ui vaadin)
+|Apache Isis Security - Bypass
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-ui-vaa
+Group: org.apache.isis.security
+Artifact: isis-security-bypass
 Type: jar
-Folder: \valuetypes\asciidoc\ui\vaadin
+Folder: \security\bypass
 ----
 |_Components_
 
-* o.a.i.valuetypes.asciidoc.ui.vaa.components.AsciiDocFieldFactoryVaa
+* o.a.i.security.bypass.authentication.AuthenticatorBypass
+* o.a.i.security.bypass.authorization.AuthorizorBypass
 
 _Dependencies_
 
-* org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:${project.version}
-
-|Apache Isis Val - Asciidoctor (ui wicket)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-ui-wkt
-Type: jar
-Folder: \valuetypes\asciidoc\ui\wicket
-----
-|_Components_
-
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Parented
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Standalone
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Parented
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Standalone
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Parented
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Standalone
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Parented
-* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Standalone
-
-_Dependencies_
-
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
-
-|Apache Isis Val - Markdown (parent)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown
-Type: pom
-Folder: \valuetypes\markdown
-----
-|Markdown value type.
-
-|Apache Isis Val - Markdown (applib)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-applib
-Type: jar
-Folder: \valuetypes\markdown\applib
-----
-|_Dependencies_
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+|===
 
-* com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
+=== Keycloak
 
-|Apache Isis Val - Markdown (MetaModel)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-metamodel
-Type: jar
-Folder: \valuetypes\markdown\metamodel
+[plantuml,Keycloak,svg]
 ----
-|_Components_
-
-* o.a.i.valuetypes.markdown.metamodel.MarkdownMetaModelRefiner
-* o.a.i.valuetypes.markdown.metamodel.MarkdownValueTypeProvider
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+@startuml(id=Keycloak)
+title Keycloak - Containers
+caption Artifact Hierarchy (Maven)
 
-|Apache Isis Val - Markdown (Persistence)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-persistence
-Type: pom
-Folder: \valuetypes\markdown\persistence
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Keycloak\n[Software System]" {
+  rectangle "==Apache Isis Security - Keycloak\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
 ----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+.Projects/Modules (Keycloak)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Val - Markdown (persistence jdo DN5)
+|Apache Isis Security - Keycloak
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-persistence-jdo-dn5
+Group: org.apache.isis.security
+Artifact: isis-security-keycloak
 Type: jar
-Folder: \valuetypes\markdown\persistence\jdo-dn5
+Folder: \security\keycloak
 ----
-|_Dependencies_
+|Authentication and Authorization using Keycloak
 
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
-* org.datanucleus:datanucleus-core:jar:<managed>
+_Components_
 
-|Apache Isis Val - Markdown (ui)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-ui
-Type: pom
-Folder: \valuetypes\markdown\ui
-----
-|_Dependencies_
+* o.a.i.security.keycloak.authentication.AuthenticatorKeycloak
+* o.a.i.security.keycloak.authorization.AuthorizorKeycloak
+* o.a.i.security.keycloak.webmodule.WebModuleKeycloak
 
-* com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
-* org.jsoup:jsoup:jar:<managed>
+_Dependencies_
 
-|Apache Isis Val - Markdown (ui wicket)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-ui-wkt
-Type: jar
-Folder: \valuetypes\markdown\ui\wicket
-----
-|_Dependencies_
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+|===
 
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+=== Shiro
 
-|Apache Isis Val - Server Sent Events (parent)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-sse
-Type: pom
-Folder: \valuetypes\sse
+[plantuml,Shiro,svg]
 ----
-|Dynamically updating HTML markup
+@startuml(id=Shiro)
+title Shiro - Containers
+caption Artifact Hierarchy (Maven)
 
-|Apache Isis Val - Server Sent Events
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-sse-applib
-Type: jar
-Folder: \valuetypes\sse\applib
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Shiro\n[Software System]" {
+  rectangle "==Apache Isis Security - Shiro\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
 ----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+.Projects/Modules (Shiro)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Val - Server Sent Events (metamodel)
+|Apache Isis Security - Shiro
 [source,yaml]
 ----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-sse-metamodel
+Group: org.apache.isis.security
+Artifact: isis-security-shiro
 Type: jar
-Folder: \valuetypes\sse\metamodel
-----
-|_Components_
-
-* o.a.i.valuetypes.sse.metamodel.facets.SseAnnotationFacetFactory$Register
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
-
-|Apache Isis Val - SSE (ui)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-sse-ui
-Type: pom
-Folder: \valuetypes\sse\ui
+Folder: \security\shiro
 ----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
+|Authentication and Authorization using Apache Shiro.
 
-|Apache Isis Val - Server Sent Events (ui wicket)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-sse-ui-wkt
-Type: jar
-Folder: \valuetypes\sse\ui\wicket
-----
-|_Components_
+_Components_
 
-* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Parented
-* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Standalone
-* o.a.i.valuetypes.sse.ui.wkt.services.SseServiceDefault
-* o.a.i.valuetypes.sse.ui.wkt.webmodule.WebModuleServerSentEvents
+* o.a.i.security.shiro.authentication.AuthenticatorShiro
+* o.a.i.security.shiro.authorization.AuthorizorShiro
+* o.a.i.security.shiro.webmodule.WebModuleShiro
 
 _Dependencies_
 
-* org.apache.isis.valuetypes:isis-valuetypes-sse-metamodel:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.apache.shiro:shiro-core:jar:<managed>
+* org.apache.shiro:shiro-web:jar:<managed>
 |===
 
 == Viewer
@@ -2037,110 +1963,109 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<12>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
+package "Viewer\n[Software System]" {
+  rectangle "==Apache Isis Viewer - Common Model\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
 }
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
+@enduml
+----
+.Projects/Modules (Viewer)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis Viewer - Common Model
+[source,yaml]
+----
+Group: org.apache.isis.viewer
+Artifact: isis-viewer-common
+Type: jar
+Folder: \viewers\common
+----
+|_Components_
+
+* o.a.i.viewer.common.model.branding.BrandingUiModelProvider
+* o.a.i.viewer.common.model.header.HeaderUiModelProvider
+* o.a.i.viewer.common.model.menu.MenuUiModelProvider
+* o.a.i.viewer.common.model.userprofile.UserProfileUiModelProvider
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.webjars:font-awesome:jar:5.15.2
+|===
+
+=== Restful Objects
+
+[plantuml,Restful Objects,svg]
+----
+@startuml(id=Restful_Objects)
+title Restful Objects - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<6>> {
+skinparam rectangle<<3>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<7>> {
+skinparam rectangle<<4>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<8>> {
+skinparam rectangle<<5>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<9>> {
+skinparam rectangle<<6>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<7>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Viewer\n[Software System]" {
-  rectangle "==Apache Isis Viewer - Common Model\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
-  rectangle "==Apache Isis Viewer - RO\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Viewer - RO (AppLib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Viewer - RO (JAX-RS Resteasy v4)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Viewer - RO (Rendering)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Viewer - RO (Testing)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Viewer - RO (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Viewer - Wicket\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
-  rectangle "==Apache Isis Viewer - Wicket (Model)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Viewer - Wicket (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis Viewer - Wicket (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+package "Restful Objects\n[Software System]" {
+  rectangle "==Apache Isis Viewer - RO\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Viewer - RO (AppLib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Viewer - RO (JAX-RS Resteasy v4)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Viewer - RO (Rendering)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Viewer - RO (Testing)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Viewer - RO (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
 }
-3 .[#707070].> 4 : ""
-3 .[#707070].> 5 : ""
-3 .[#707070].> 6 : ""
-3 .[#707070].> 7 : ""
-3 .[#707070].> 8 : ""
-9 .[#707070].> 10 : ""
-9 .[#707070].> 11 : ""
-9 .[#707070].> 12 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
 @enduml
 ----
-.Projects/Modules (Viewer)
+.Projects/Modules (Restful Objects)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Viewer - Common Model
-[source,yaml]
-----
-Group: org.apache.isis.viewer
-Artifact: isis-viewer-common
-Type: jar
-Folder: \viewers\common
-----
-|_Components_
-
-* o.a.i.viewer.common.model.branding.BrandingUiModelProvider
-* o.a.i.viewer.common.model.header.HeaderUiModelProvider
-* o.a.i.viewer.common.model.menu.MenuUiModelProvider
-* o.a.i.viewer.common.model.userprofile.UserProfileUiModelProvider
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.webjars:font-awesome:jar:5.15.2
-
 |Apache Isis Viewer - RO
 [source,yaml]
 ----
@@ -2266,6 +2191,59 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-common:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-restfulobjects-rendering:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
+|===
+
+=== Wicket
+
+[plantuml,Wicket,svg]
+----
+@startuml(id=Wicket)
+title Wicket - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Wicket\n[Software System]" {
+  rectangle "==Apache Isis Viewer - Wicket\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Viewer - Wicket (Model)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Viewer - Wicket (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Viewer - Wicket (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+}
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+@enduml
+----
+.Projects/Modules (Wicket)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Viewer - Wicket
 [source,yaml]
@@ -2365,12 +2343,12 @@ _Dependencies_
 * org.springframework:spring-web:jar:<managed>
 |===
 
-== Testing
+== Valuetypes
 
-[plantuml,Testing,svg]
+[plantuml,Valuetypes,svg]
 ----
-@startuml(id=Testing)
-title Testing - Containers
+@startuml(id=Valuetypes)
+title Valuetypes - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -2386,6 +2364,11 @@ skinparam rectangle<<11>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<22>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -2421,6 +2404,11 @@ skinparam rectangle<<18>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<19>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -2461,309 +2449,511 @@ skinparam rectangle<<9>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<20>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Testing\n[Software System]" {
-  rectangle "==Apache Isis Testing\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Tst - FakeData (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Tst - FakeData (fixtures)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Tst - FakeData (integ tests)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Tst - FakeData (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Tst - Fixtures (applib)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Tst - Fixtures (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
-  rectangle "==Apache Isis Tst - H2 Console (parent)\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
-  rectangle "==Apache Isis Tst - H2 Console (ui)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Tst - HSQLDB Manager\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Tst - HSQLDB Manager (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
-  rectangle "==Apache Isis Tst - Integ Test Support (applib)\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
-  rectangle "==Apache Isis Tst - Integ Test Support (parent)\n<size:10>[Container: packaging: pom]</size>" <<13>> as 13
-  rectangle "==Apache Isis Tst - Spec/Cucumber (applib)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
-  rectangle "==Apache Isis Tst - Spec/Cucumber (parent)\n<size:10>[Container: packaging: pom]</size>" <<15>> as 15
-  rectangle "==Apache Isis Tst - Unit Test Support (applib)\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
-  rectangle "==Apache Isis Tst - Unit Test Support (parent)\n<size:10>[Container: packaging: pom]</size>" <<17>> as 17
+skinparam rectangle<<21>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
 }
-2 .[#707070].> 3 : ""
-2 .[#707070].> 7 : ""
-2 .[#707070].> 9 : ""
-2 .[#707070].> 11 : ""
-2 .[#707070].> 13 : ""
-2 .[#707070].> 15 : ""
-2 .[#707070].> 17 : ""
-3 .[#707070].> 4 : ""
+package "Valuetypes\n[Software System]" {
+  rectangle "==Apache Isis Val - Asciidoctor (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Val - Asciidoctor (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
+  rectangle "==Apache Isis Val - Asciidoctor (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Val - Asciidoctor (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Val - Asciidoctor (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis Val - Asciidoctor (ui vaadin)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis Val - Asciidoctor (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis Val - Asciidoctor (ui)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Markdown (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
+  rectangle "==Apache Isis Val - Markdown (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
+  rectangle "==Apache Isis Val - Markdown (applib)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Val - Markdown (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
+  rectangle "==Apache Isis Val - Markdown (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis Val - Markdown (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis Val - Markdown (ui)\n<size:10>[Container: packaging: pom]</size>" <<16>> as 16
+  rectangle "==Apache Isis Val - SSE (ui)\n<size:10>[Container: packaging: pom]</size>" <<21>> as 21
+  rectangle "==Apache Isis Val - Server Sent Events\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
+  rectangle "==Apache Isis Val - Server Sent Events (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
+  rectangle "==Apache Isis Val - Server Sent Events (parent)\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
+  rectangle "==Apache Isis Val - Server Sent Events (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
+  rectangle "==Apache Isis Value types\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+6 .[#707070].> 7 : ""
 3 .[#707070].> 5 : ""
 3 .[#707070].> 6 : ""
-7 .[#707070].> 8 : ""
-9 .[#707070].> 10 : ""
+3 .[#707070].> 4 : ""
+3 .[#707070].> 8 : ""
+8 .[#707070].> 10 : ""
+14 .[#707070].> 15 : ""
+11 .[#707070].> 13 : ""
+11 .[#707070].> 14 : ""
 11 .[#707070].> 12 : ""
-13 .[#707070].> 14 : ""
-15 .[#707070].> 16 : ""
-17 .[#707070].> 18 : ""
+11 .[#707070].> 16 : ""
+16 .[#707070].> 17 : ""
+21 .[#707070].> 22 : ""
+18 .[#707070].> 21 : ""
+18 .[#707070].> 19 : ""
+18 .[#707070].> 20 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 11 : ""
+2 .[#707070].> 18 : ""
 @enduml
 ----
-.Projects/Modules (Testing)
+.Projects/Modules (Valuetypes)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Testing
+|Apache Isis Value types
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes
 Type: pom
-Folder: \testing
+Folder: \valuetypes
 ----
-|A library of utilities, mini-frameworks and tools for prototyping and testing Apache Isis applications.
+|Value types for use within Apache Isis applications.
 
-|Apache Isis Tst - FakeData (parent)
+_Dependencies_
+
+* org.projectlombok:lombok:jar:<managed>
+
+|Apache Isis Val - Asciidoctor (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fakedata
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc
 Type: pom
-Folder: \testing\fakedata
+Folder: \valuetypes\asciidoc
 ----
-|A module providing a domain service to generate fake random data
-        for use in unit tests or integration tests.
+|Asciidoc value type.
 
-|Apache Isis Tst - FakeData (applib)
+|Apache Isis Val - Asciidoctor (applib)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fakedata-applib
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-applib
 Type: jar
-Folder: \testing\fakedata\applib
+Folder: \valuetypes\asciidoc\applib
+----
+|_Dependencies_
+
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.asciidoctor:asciidoctorj-api:jar:${asciidoctorj.version}
+
+|Apache Isis Val - Asciidoctor (MetaModel)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-metamodel
+Type: jar
+Folder: \valuetypes\asciidoc\metamodel
 ----
 |_Components_
 
-* o.a.i.testing.fakedata.applib.services.FakeDataService
+* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocMetaModelRefiner
+* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocValueTypeProvider
 
 _Dependencies_
 
-* com.github.javafaker:javafaker:jar:<managed>
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
+
+|Apache Isis Val - Asciidoctor (Persistence)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-persistence
+Type: pom
+Folder: \valuetypes\asciidoc\persistence
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
+
+|Apache Isis Val - Asciidoctor (persistence jdo DN5)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-persistence-jdo-dn5
+Type: jar
+Folder: \valuetypes\asciidoc\persistence\jdo-dn5
+----
+|_Dependencies_
+
+* org.datanucleus:datanucleus-core:jar:<managed>
+
+|Apache Isis Val - Asciidoctor (ui)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-ui
+Type: pom
+Folder: \valuetypes\asciidoc\ui
+----
+|_Dependencies_
+
+* com.github.jnr:jnr-constants:jar:0.10.1
+* com.github.jnr:jnr-enxio:jar:0.32.3
+* com.github.jnr:jnr-posix:jar:3.1.4
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
+* org.asciidoctor:asciidoctorj:jar:${asciidoctorj.version}
+
+|Apache Isis Val - Asciidoctor (ui vaadin)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-ui-vaa
+Type: jar
+Folder: \valuetypes\asciidoc\ui\vaadin
+----
+|_Components_
+
+* o.a.i.valuetypes.asciidoc.ui.vaa.components.AsciiDocFieldFactoryVaa
+
+_Dependencies_
+
+* org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:${project.version}
+
+|Apache Isis Val - Asciidoctor (ui wicket)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-asciidoc-ui-wkt
+Type: jar
+Folder: \valuetypes\asciidoc\ui\wicket
+----
+|_Components_
+
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Standalone
+
+_Dependencies_
+
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+
+|Apache Isis Val - Markdown (parent)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown
+Type: pom
+Folder: \valuetypes\markdown
+----
+|Markdown value type.
+
+|Apache Isis Val - Markdown (applib)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-applib
+Type: jar
+Folder: \valuetypes\markdown\applib
+----
+|_Dependencies_
+
+* com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
 
-|Apache Isis Tst - FakeData (fixtures)
+|Apache Isis Val - Markdown (MetaModel)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fakedata-fixtures
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-metamodel
 Type: jar
-Folder: \testing\fakedata\fixtures
+Folder: \valuetypes\markdown\metamodel
+----
+|_Components_
+
+* o.a.i.valuetypes.markdown.metamodel.MarkdownMetaModelRefiner
+* o.a.i.valuetypes.markdown.metamodel.MarkdownValueTypeProvider
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+
+|Apache Isis Val - Markdown (Persistence)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-persistence
+Type: pom
+Folder: \valuetypes\markdown\persistence
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+
+|Apache Isis Val - Markdown (persistence jdo DN5)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-persistence-jdo-dn5
+Type: jar
+Folder: \valuetypes\markdown\persistence\jdo-dn5
+----
+|_Dependencies_
+
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+* org.datanucleus:datanucleus-core:jar:<managed>
+
+|Apache Isis Val - Markdown (ui)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-ui
+Type: pom
+Folder: \valuetypes\markdown\ui
 ----
 |_Dependencies_
 
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
+* com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
+* org.jsoup:jsoup:jar:<managed>
 
-|Apache Isis Tst - FakeData (integ tests)
+|Apache Isis Val - Markdown (ui wicket)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fakedata-integtests
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-markdown-ui-wkt
 Type: jar
-Folder: \testing\fakedata\integtests
+Folder: \valuetypes\markdown\ui\wicket
 ----
 |_Dependencies_
 
-* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
-* org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-fakedata-fixtures:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
-|Apache Isis Tst - Fixtures (parent)
+|Apache Isis Val - Server Sent Events (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fixtures
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-sse
 Type: pom
-Folder: \testing\fixtures
+Folder: \valuetypes\sse
 ----
-|Library to initialize the system under test, either for integration testing or for prototyping.
+|Dynamically updating HTML markup
 
-|Apache Isis Tst - Fixtures (applib)
+|Apache Isis Val - Server Sent Events
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-fixtures-applib
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-sse-applib
 Type: jar
-Folder: \testing\fixtures\applib
+Folder: \valuetypes\sse\applib
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+
+|Apache Isis Val - Server Sent Events (metamodel)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-sse-metamodel
+Type: jar
+Folder: \valuetypes\sse\metamodel
 ----
 |_Components_
 
-* o.a.i.testing.fixtures.applib.fixturescripts.ExecutionParametersService
-* o.a.i.testing.fixtures.applib.modules.ModuleWithFixturesService
-* o.a.i.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault
-* o.a.i.testing.fixtures.applib.services.FixturesLifecycleService
+* o.a.i.valuetypes.sse.metamodel.facets.SseAnnotationFacetFactory$Register
 
 _Dependencies_
 
-* joda-time:joda-time:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
-* org.apache.isis.subdomains:isis-subdomains-spring-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
 
-|Apache Isis Tst - H2 Console (parent)
+|Apache Isis Val - SSE (ui)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-h2console
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-sse-ui
 Type: pom
-Folder: \testing\h2console
+Folder: \valuetypes\sse\ui
 ----
-|Menu and configuration to open up H2 Console
+|_Dependencies_
 
-|Apache Isis Tst - H2 Console (ui)
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
+
+|Apache Isis Val - Server Sent Events (ui wicket)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-h2console-ui
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-sse-ui-wkt
 Type: jar
-Folder: \testing\h2console\ui
+Folder: \valuetypes\sse\ui\wicket
 ----
 |_Components_
 
-* o.a.i.testing.h2console.ui.webmodule.WebModuleH2Console
+* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Parented
+* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Standalone
+* o.a.i.valuetypes.sse.ui.wkt.services.SseServiceDefault
+* o.a.i.valuetypes.sse.ui.wkt.webmodule.WebModuleServerSentEvents
 
 _Dependencies_
 
-* com.h2database:h2:jar:<managed>
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
-* org.beanshell:bsh:jar:2.0b5
+* org.apache.isis.valuetypes:isis-valuetypes-sse-metamodel:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+|===
 
-|Apache Isis Tst - HSQLDB Manager (parent)
-[source,yaml]
-----
-Group: org.apache.isis.testing
-Artifact: isis-testing-hsqldbmgr
-Type: pom
-Folder: \testing\hsqldbmgr
-----
-|Menu and configuration to open up HSQLDB Manager
+== Mappings
 
-|Apache Isis Tst - HSQLDB Manager
-[source,yaml]
-----
-Group: org.apache.isis.testing
-Artifact: isis-testing-hsqldbmgr-ui
-Type: jar
-Folder: \testing\hsqldbmgr\ui
+[plantuml,Mappings,svg]
 ----
-|_Dependencies_
+@startuml(id=Mappings)
+title Mappings - Containers
+caption Artifact Hierarchy (Maven)
 
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
-* org.hsqldb:hsqldb:jar:<managed>
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Mappings\n[Software System]" {
+  rectangle "==Apache Isis Mappings\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+@enduml
+----
+.Projects/Modules (Mappings)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Tst - Integ Test Support (parent)
+|Apache Isis Mappings
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-integtestsupport
+Group: org.apache.isis.mappings
+Artifact: isis-mappings
 Type: pom
-Folder: \testing\integtestsupport
+Folder: \mappings
 ----
-|Support for writing integ tests in JUnit 5; should be added as a dependency with scope=test only
+|Libraries and tools to map one bounded context (usually an Apache Isis application) to some other BC (usually
+_not_ an Apache Isis application).
 
-|Apache Isis Tst - Integ Test Support (applib)
-[source,yaml]
-----
-Group: org.apache.isis.testing
-Artifact: isis-testing-integtestsupport-applib
-Type: jar
-Folder: \testing\integtestsupport\applib
-----
-|_Components_
+_Dependencies_
 
-* o.a.i.testing.integtestsupport.applib.IsisIntegrationTestAbstract$InteractionSupport
+* org.projectlombok:lombok:jar:<managed>
+|===
 
-_Dependencies_
+=== JAX-RS Client Library
 
-* com.approvaltests:approvaltests:jar:<managed>
-* com.h2database:h2:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.security:isis-security-bypass:jar:<managed>
-* org.hamcrest:hamcrest-library:jar:<managed>
-* org.hsqldb:hsqldb:jar:<managed>
-* org.slf4j:slf4j-api:jar:${slf4j-api.version}
-* org.springframework:spring-test:jar:<managed>
-* org.springframework.boot:spring-boot-starter-test:jar:<managed>
+[plantuml,JAX-RS Client Library,svg]
+----
+@startuml(id=JAX-RS_Client_Library)
+title JAX-RS Client Library - Containers
+caption Artifact Hierarchy (Maven)
 
-|Apache Isis Tst - Spec/Cucumber (parent)
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "JAX-RS Client Library\n[Software System]" {
+  rectangle "==Apache Isis Map - JaxRS Client (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Map - JaxRS Client (impl)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Map - JaxRS Client (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+@enduml
+----
+.Projects/Modules (JAX-RS Client Library)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis Map - JaxRS Client (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-specsupport
+Group: org.apache.isis.mappings
+Artifact: isis-mappings-jaxrsclient
 Type: pom
-Folder: \testing\specsupport
+Folder: \mappings\jaxrsclient
 ----
-|Allows Cucumber to be used to write BDD-style specifications, generally as an alternative to integration tests.
+|Integrates JaxRS Client Library
 
-|Apache Isis Tst - Spec/Cucumber (applib)
+|Apache Isis Map - JaxRS Client (applib)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-specsupport-applib
+Group: org.apache.isis.mappings
+Artifact: isis-mappings-jaxrsclient-applib
 Type: jar
-Folder: \testing\specsupport\applib
+Folder: \mappings\jaxrsclient\applib
 ----
 |_Dependencies_
 
-* io.cucumber:cucumber-java:jar:<managed>
-* io.cucumber:cucumber-junit-platform-engine:jar:<managed>
-* io.cucumber:cucumber-spring:jar:<managed>
-* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
-* org.junit.jupiter:junit-jupiter-api:jar:<managed>
-
-|Apache Isis Tst - Unit Test Support (parent)
-[source,yaml]
-----
-Group: org.apache.isis.testing
-Artifact: isis-testing-unittestsupport
-Type: pom
-Folder: \testing\unittestsupport
-----
-|A module providing test utilities for unit testing of domain modules
+* javax:javaee-api:jar:<managed>
+* org.springframework:spring-context:jar:<managed>
 
-|Apache Isis Tst - Unit Test Support (applib)
+|Apache Isis Map - JaxRS Client (impl)
 [source,yaml]
 ----
-Group: org.apache.isis.testing
-Artifact: isis-testing-unittestsupport-applib
+Group: org.apache.isis.mappings
+Artifact: isis-mappings-jaxrsclient-impl
 Type: jar
-Folder: \testing\unittestsupport\applib
+Folder: \mappings\jaxrsclient\testlib
 ----
 |_Dependencies_
 
-* com.approvaltests:approvaltests:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
-* org.datanucleus:javax.jdo:jar:<managed>
-* org.jmock:jmock:jar:<managed>
-* org.jmock:jmock-junit4:jar:<managed>
-* org.picocontainer:picocontainer:jar:<managed>
-* org.slf4j:slf4j-api:jar:<managed>
-* org.springframework:spring-test:jar:<managed>
-* org.springframework.boot:spring-boot-starter-test:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
 |===
 
-== Regression Tests
+=== REST Client
 
-[plantuml,Regression Tests,svg]
+[plantuml,REST Client,svg]
 ----
-@startuml(id=Regression_Tests)
-title Regression Tests - Containers
+@startuml(id=REST_Client)
+title REST Client - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -2784,81 +2974,42 @@ skinparam rectangle<<3>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-package "Regression Tests\n[Software System]" {
-  rectangle "==Apache Isis - Regression Tests\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis - Regression Tests (stable)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+package "REST Client\n[Software System]" {
+  rectangle "==Apache Isis Ext - REST Client (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Ext - REST Client (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
 2 .[#707070].> 3 : ""
 @enduml
 ----
-.Projects/Modules (Regression Tests)
+.Projects/Modules (REST Client)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis - Regression Tests
+|Apache Isis Ext - REST Client (parent)
 [source,yaml]
 ----
-Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests
+Group: org.apache.isis.mappings
+Artifact: isis-mappings-restclient
 Type: pom
-Folder: \regressiontests
+Folder: \mappings\restclient
 ----
-|Collection of JUnit tests covering core functionalities of the framework.
-        (Targeted for JVM 11+)
-
-_Dependencies_
-
-* org.apache.directory.server:apacheds-test-framework:jar:2.0.0.AM26
-* org.apache.isis.extensions:isis-extensions-modelannotation:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-shiro-realm-ldap-impl:jar:<managed>
-* org.apache.isis.mappings:isis-mappings-restclient-applib:jar:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jpa:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed>
-* org.apache.isis.security:isis-security-shiro:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
-* org.apache.isis.tooling:isis-tooling-model4adoc:jar:${project.version}
-* org.apache.isis.viewer:isis-viewer-common:jar:<managed>
-* org.glassfish:javax.json:jar:1.1.4
-* org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
+|A client for the Restful Objects Viewer
 
-|Apache Isis - Regression Tests (stable)
+|Apache Isis Ext - REST Client (applib)
 [source,yaml]
 ----
-Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable
+Group: org.apache.isis.mappings
+Artifact: isis-mappings-restclient-applib
 Type: jar
-Folder: \regressiontests\stable
+Folder: \mappings\restclient\applib
 ----
-|_Components_
-
-* o.a.i.testdomain.applayer.ApplicationLayerTestFactory
-* o.a.i.testdomain.applayer.ApplicationLayerTestFactory$PreCommitListener
-* o.a.i.testdomain.applayer.publishing.CommandSubscriberForTesting
-* o.a.i.testdomain.applayer.publishing.EntityChangesSubscriberForTesting
-* o.a.i.testdomain.applayer.publishing.EntityPropertyChangeSubscriberForTesting
-* o.a.i.testdomain.applayer.publishing.ExecutionSubscriberForTesting
-* o.a.i.testdomain.conf.Configuration_headless$HeadlessCommandSupport
-* o.a.i.testdomain.jpa.springdata.EmployeeRepository
-* o.a.i.testdomain.util.interaction.InteractionBoundaryProbe
-* o.a.i.testdomain.util.kv.KVStoreForTesting
-* o.a.i.testdomain.util.rest.RestEndpointService
+|A client for the Restful Objects Viewer
 
 _Dependencies_
 
-* org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
-* org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed>
+* org.springframework:spring-context:jar:<managed>
 |===
 
 == Extensions
@@ -2882,61 +3033,6 @@ skinparam rectangle<<22>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<23>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<24>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<25>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<26>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<27>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<28>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<29>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<30>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<31>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<32>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -3027,198 +3123,80 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<10>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
 package "Extensions\n[Software System]" {
-  rectangle "==Apache Isis Ext - @Model\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
-  rectangle "==Apache Isis Ext - CORS (impl)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Ext - CORS (parent)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
-  rectangle "==Apache Isis Ext - Command Log\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Ext - Command Log Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Ext - Command Replay\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
-  rectangle "==Apache Isis Ext - Command Replay for Primary\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Ext - Command Replay for Secondary\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Ext - Flyway\n<size:10>[Container: packaging: pom]</size>" <<12>> as 12
-  rectangle "==Apache Isis Ext - Flyway Impl\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis Ext - Quartz\n<size:10>[Container: packaging: pom]</size>" <<22>> as 22
-  rectangle "==Apache Isis Ext - Quartz Impl\n<size:10>[Container: packaging: jar]</size>" <<23>> as 23
-  rectangle "==Apache Isis Ext - Sec Man\n<size:10>[Container: packaging: pom]</size>" <<24>> as 24
-  rectangle "==Apache Isis Ext - Sec Man API\n<size:10>[Container: packaging: jar]</size>" <<25>> as 25
-  rectangle "==Apache Isis Ext - Sec Man Encryption (Using jbcrypt)\n<size:10>[Container: packaging: jar]</size>" <<26>> as 26
-  rectangle "==Apache Isis Ext - Sec Man Model\n<size:10>[Container: packaging: jar]</size>" <<27>> as 27
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<28>> as 28
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<29>> as 29
-  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<30>> as 30
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<32>> as 32
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<31>> as 31
-  rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (parent)\n<size:10>[Container: packaging: pom]</size>" <<10>> as 10
-  rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (ui)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (applib)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (parent)\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
-  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (ui)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
-  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (applib)\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
-  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
-  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (parent)\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
-  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (ui)\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
+  rectangle "==Apache Isis Ext - CORS (impl)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Ext - CORS (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Ext - Sec Man\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
+  rectangle "==Apache Isis Ext - Sec Man API\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis Ext - Sec Man Encryption (Using jbcrypt)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis Ext - Sec Man Model\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
+  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<21>> as 21
+  rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (parent)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
+  rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (ui)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (applib)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
+  rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (ui)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (applib)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (parent)\n<size:10>[Container: packaging: pom]</size>" <<10>> as 10
+  rectangle "==Apache Isis Ext - Wicket Viewer - pdf.js (ui)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
   rectangle "==Apache Isis Extensions\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
-8 .[#707070].> 9 : ""
 3 .[#707070].> 4 : ""
-5 .[#707070].> 6 : ""
-5 .[#707070].> 7 : ""
-12 .[#707070].> 13 : ""
-22 .[#707070].> 23 : ""
-24 .[#707070].> 25 : ""
-24 .[#707070].> 26 : ""
-24 .[#707070].> 27 : ""
-24 .[#707070].> 28 : ""
-24 .[#707070].> 29 : ""
-24 .[#707070].> 30 : ""
-31 .[#707070].> 32 : ""
-10 .[#707070].> 11 : ""
 14 .[#707070].> 15 : ""
 14 .[#707070].> 16 : ""
-18 .[#707070].> 19 : ""
-18 .[#707070].> 20 : ""
-18 .[#707070].> 21 : ""
-2 .[#707070].> 17 : ""
-2 .[#707070].> 8 : ""
+14 .[#707070].> 17 : ""
+14 .[#707070].> 18 : ""
+14 .[#707070].> 19 : ""
+14 .[#707070].> 20 : ""
+21 .[#707070].> 22 : ""
+5 .[#707070].> 6 : ""
+7 .[#707070].> 8 : ""
+7 .[#707070].> 9 : ""
+10 .[#707070].> 11 : ""
+10 .[#707070].> 12 : ""
+10 .[#707070].> 13 : ""
 2 .[#707070].> 3 : ""
+2 .[#707070].> 14 : ""
+2 .[#707070].> 21 : ""
 2 .[#707070].> 5 : ""
-2 .[#707070].> 12 : ""
-2 .[#707070].> 22 : ""
-2 .[#707070].> 24 : ""
-2 .[#707070].> 31 : ""
+2 .[#707070].> 7 : ""
 2 .[#707070].> 10 : ""
-2 .[#707070].> 14 : ""
-2 .[#707070].> 18 : ""
 @enduml
 ----
 .Projects/Modules (Extensions)
 [cols="3a,5a", options="header"]
 |===
-|Coordinates |Description 
-
-|Apache Isis Extensions
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions
-Type: pom
-Folder: \extensions
-----
-|Extensions to the Apache Isis framework itself.
-		These are _not_ intended to be called by the domain logic of an Apache Isis application (see instead org.apache.isis.platform).
-
-_Dependencies_
-
-* org.projectlombok:lombok:jar:<managed>
-
-|Apache Isis Ext - Command Log
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-command-log
-Type: pom
-Folder: \extensions\core\command-log
-----
-|Logs commands
-
-|Apache Isis Ext - Command Log Implementation (JDO)
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-command-log-jdo
-Type: jar
-Folder: \extensions\core\command-log\impl
-----
-|_Components_
-
-* o.a.i.extensions.commandlog.impl.CommandSubscriberForJdo
-* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TableColumnOrderDefault
-* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TitleProvider
-* o.a.i.extensions.commandlog.impl.jdo.CommandJdoRepository
-* o.a.i.extensions.commandlog.impl.ui.CommandServiceMenu
-
-_Dependencies_
-
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
-
-|Apache Isis Ext - Command Replay
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-command-replay
-Type: pom
-Folder: \extensions\core\command-replay
-----
-|Replays commands to secondary system
-
-|Apache Isis Ext - Command Replay for Primary
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-command-replay-primary
-Type: jar
-Folder: \extensions\core\command-replay\primary
-----
-|A module for obtaining commands from a primary
-
-_Components_
-
-* o.a.i.extensions.commandreplay.primary.config.PrimaryConfig
-* o.a.i.extensions.commandreplay.primary.spiimpl.CaptureResultOfCommand
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
-* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
-* org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
-
-|Apache Isis Ext - Command Replay for Secondary
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-command-replay-secondary
-Type: jar
-Folder: \extensions\core\command-replay\secondary
-----
-|A module providing a Quartz Job to run on a secondary system,
-		for obtaining commands from a primary and saving them so that they are replayed.
-
-_Components_
-
-* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserException
-* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserResult
-* o.a.i.extensions.commandreplay.secondary.analysis.CommandReplayAnalysisService
-* o.a.i.extensions.commandreplay.secondary.clock.TickingClockService
-* o.a.i.extensions.commandreplay.secondary.config.SecondaryConfig
-* o.a.i.extensions.commandreplay.secondary.executor.CommandExecutorServiceWithTime
-* o.a.i.extensions.commandreplay.secondary.fetch.CommandFetcher
+|Coordinates |Description 
+
+|Apache Isis Extensions
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions
+Type: pom
+Folder: \extensions
+----
+|Extensions to the Apache Isis framework itself.
+These are _not_ intended to be called by the domain logic of an Apache Isis application (see instead org.apache.isis.platform).
 
 _Dependencies_
 
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.core:isis-schema:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-quartz-impl:jar:<managed>
-* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
-* org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
 
 |Apache Isis Ext - CORS (parent)
 [source,yaml]
@@ -3273,32 +3251,6 @@ _Dependencies_
 * org.apache.poi:poi-ooxml:jar:<managed>
 * org.apache.poi:poi-ooxml-schemas:jar:<managed>
 
-|Apache Isis Ext - Flyway
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-flyway
-Type: pom
-Folder: \extensions\core\flyway
-----
-|Integrates Flyway when using any (relational) persistence store
-
-|Apache Isis Ext - Flyway Impl
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-flyway-impl
-Type: jar
-Folder: \extensions\core\flyway\impl
-----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-config:jar:<managed>
-* org.flywaydb:flyway-core:jar:<managed>
-* org.springframework:spring-context:jar:<managed>
-* org.springframework:spring-jdbc:jar:<managed>
-* org.springframework.boot:spring-boot-autoconfigure:jar:<managed>
-
 |Apache Isis Ext - Wicket Viewer - fullcalendar (parent)
 [source,yaml]
 ----
@@ -3336,258 +3288,594 @@ Folder: \extensions\vw\fullcalendar\ui
 * org.apache.isis.extensions:isis-extensions-fullcalendar-applib:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
-|Apache Isis Ext - @Model
+|Apache Isis Ext - Wicket Viewer - pdf.js (parent)
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-modelannotation
+Artifact: isis-extensions-pdfjs
+Type: pom
+Folder: \extensions\vw\pdfjs
+----
+|A component for Apache Isis' Wicket viewer, allowing BLOBs containing PDFs to be rendered in a panel using pdf.js.
+
+|Apache Isis Ext - Wicket Viewer - pdf.js (applib)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-pdfjs-applib
 Type: jar
-Folder: \extensions\core\model-annotation
+Folder: \extensions\vw\pdfjs\applib
 ----
-|Allows supporting methods to be annotated as @Model, to make explicit the bounds of the metamodel.
+|_Dependencies_
 
-_Components_
+* de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
 
-* o.a.i.extensions.modelannotation.metamodel.services.IncubatorMetaModelPlugin
+|Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-pdfjs-metamodel
+Type: jar
+Folder: \extensions\vw\pdfjs\metamodel
+----
+|_Components_
+
+* o.a.i.extensions.viewer.wicket.pdfjs.metamodel.facet.PdfJsViewerFacetFromAnnotationFactory$Register
 
 _Dependencies_
 
+* de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed>
+
+|Apache Isis Ext - Wicket Viewer - pdf.js (ui)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-pdfjs-ui
+Type: jar
+Folder: \extensions\vw\pdfjs\ui
+----
+|_Components_
+
+* o.a.i.extensions.viewer.wicket.pdfjs.ui.components.PdfJsViewerPanelComponentFactory
+
+_Dependencies_
+
+* org.apache.isis.extensions:isis-extensions-pdfjs-metamodel:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (parent)
+|Apache Isis Ext - Sec Man
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-pdfjs
+Artifact: isis-extensions-secman
 Type: pom
-Folder: \extensions\vw\pdfjs
+Folder: \extensions\security\secman
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.core:isis-core-security:jar:<managed>
+
+|Apache Isis Ext - Sec Man API
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-api
+Type: jar
+Folder: \extensions\security\secman\api
+----
+|
+
+|Apache Isis Ext - Sec Man Encryption (Using jbcrypt)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-encryption-jbcrypt
+Type: jar
+Folder: \extensions\security\secman\encryption-jbcrypt
+----
+|_Components_
+
+* o.a.i.extensions.secman.encryption.jbcrypt.services.PasswordEncryptionServiceUsingJBcrypt
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
+* org.mindrot:jbcrypt:jar:<managed>
+
+|Apache Isis Ext - Sec Man Model
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-model
+Type: jar
+Folder: \extensions\security\secman\model
+----
+|_Components_
+
+* o.a.i.extensions.secman.model.facets.TenantedAuthorizationFacetFactory$Register
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
+
+|Apache Isis Ext - Sec Man Persistence (Using JDO)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-persistence-jdo
+Type: jar
+Folder: \extensions\security\secman\persistence-jdo
+----
+|_Components_
+
+* o.a.i.extensions.secman.jdo.dom.permission.ApplicationPermissionRepository
+* o.a.i.extensions.secman.jdo.dom.role.ApplicationRoleRepository
+* o.a.i.extensions.secman.jdo.dom.tenancy.ApplicationTenancyRepository
+* o.a.i.extensions.secman.jdo.dom.user.ApplicationUserRepository
+* o.a.i.extensions.secman.jdo.seed.SeedSecurityModuleService
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+
+|Apache Isis Ext - Sec Man Persistence (Using JPA)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-persistence-jpa
+Type: jar
+Folder: \extensions\security\secman\persistence-jpa
+----
+|_Components_
+
+* o.a.i.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository
+* o.a.i.extensions.secman.jpa.dom.role.ApplicationRoleRepository
+* o.a.i.extensions.secman.jpa.dom.tenancy.ApplicationTenancyRepository
+* o.a.i.extensions.secman.jpa.dom.user.ApplicationUserRepository
+* o.a.i.extensions.secman.jpa.seed.SeedSecurityModuleService
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
+* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+
+|Apache Isis Ext - Sec Man Realm (Using Shiro)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-shiro-realm
+Type: jar
+Folder: \extensions\security\secman\shiro-realm
+----
+|_Components_
+
+* o.a.i.extensions.secman.shiro.services.SecurityRealmServiceUsingShiro
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-secman-api:jar:2.0.0-SNAPSHOT
+* org.apache.isis.security:isis-security-shiro:jar:<managed>
+
+|Apache Isis Ext - Security - Shiro LDAP Realm (parent)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-shiro-realm-ldap
+Type: pom
+Folder: \extensions\security\shiro-realm-ldap
+----
+|Implementation of Shiro Realm using LDAP.
+
+|Apache Isis Ext - Security - Shiro LDAP Realm (impl)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-shiro-realm-ldap-impl
+Type: jar
+Folder: \extensions\security\shiro-realm-ldap\impl
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.security:isis-security-shiro:jar:<managed>
+|===
+
+=== Core: Command Log
+
+[plantuml,Core: Command Log,svg]
+----
+@startuml(id=Core:_Command_Log)
+title Core: Command Log - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Core: Command Log\n[Software System]" {
+  rectangle "==Apache Isis Ext - Command Log\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Ext - Command Log Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+}
+2 .[#707070].> 3 : ""
+@enduml
 ----
-|A component for Apache Isis' Wicket viewer, allowing BLOBs containing PDFs to be rendered in a panel using pdf.js.
+.Projects/Modules (Core: Command Log)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (applib)
+|Apache Isis Ext - Command Log
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-pdfjs-applib
-Type: jar
-Folder: \extensions\vw\pdfjs\applib
+Artifact: isis-extensions-command-log
+Type: pom
+Folder: \extensions\core\command-log
 ----
-|_Dependencies_
-
-* de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
+|Logs commands
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)
+|Apache Isis Ext - Command Log Implementation (JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-pdfjs-metamodel
+Artifact: isis-extensions-command-log-jdo
 Type: jar
-Folder: \extensions\vw\pdfjs\metamodel
+Folder: \extensions\core\command-log\impl
 ----
 |_Components_
 
-* o.a.i.extensions.viewer.wicket.pdfjs.metamodel.facet.PdfJsViewerFacetFromAnnotationFactory$Register
+* o.a.i.extensions.commandlog.impl.CommandSubscriberForJdo
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TableColumnOrderDefault
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TitleProvider
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdoRepository
+* o.a.i.extensions.commandlog.impl.ui.CommandServiceMenu
 
 _Dependencies_
 
-* de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed>
-
-|Apache Isis Ext - Wicket Viewer - pdf.js (ui)
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-pdfjs-ui
-Type: jar
-Folder: \extensions\vw\pdfjs\ui
-----
-|_Components_
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
+|===
 
-* o.a.i.extensions.viewer.wicket.pdfjs.ui.components.PdfJsViewerPanelComponentFactory
+=== Core: Command Replay
 
-_Dependencies_
+[plantuml,Core: Command Replay,svg]
+----
+@startuml(id=Core:_Command_Replay)
+title Core: Command Replay - Containers
+caption Artifact Hierarchy (Maven)
 
-* org.apache.isis.extensions:isis-extensions-pdfjs-metamodel:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Core: Command Replay\n[Software System]" {
+  rectangle "==Apache Isis Ext - Command Replay\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Ext - Command Replay for Primary\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Ext - Command Replay for Secondary\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+}
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+@enduml
+----
+.Projects/Modules (Core: Command Replay)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Ext - Quartz
+|Apache Isis Ext - Command Replay
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-quartz
+Artifact: isis-extensions-command-replay
 Type: pom
-Folder: \extensions\core\quartz
+Folder: \extensions\core\command-replay
 ----
-|Integrates Quartz
+|Replays commands to secondary system
 
-|Apache Isis Ext - Quartz Impl
+|Apache Isis Ext - Command Replay for Primary
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-quartz-impl
+Artifact: isis-extensions-command-replay-primary
 Type: jar
-Folder: \extensions\core\quartz\impl
+Folder: \extensions\core\command-replay\primary
 ----
-|_Dependencies_
+|A module for obtaining commands from a primary
+
+_Components_
+
+* o.a.i.extensions.commandreplay.primary.config.PrimaryConfig
+* o.a.i.extensions.commandreplay.primary.spiimpl.CaptureResultOfCommand
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-config:jar:<managed>
-* org.apache.isis.core:isis-core-security:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
-* org.springframework.boot:spring-boot-starter-quartz:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 
-|Apache Isis Ext - Sec Man
+|Apache Isis Ext - Command Replay for Secondary
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman
-Type: pom
-Folder: \extensions\security\secman
+Artifact: isis-extensions-command-replay-secondary
+Type: jar
+Folder: \extensions\core\command-replay\secondary
 ----
-|_Dependencies_
+|A module providing a Quartz Job to run on a secondary system,
+for obtaining commands from a primary and saving them so that they are replayed.
 
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.core:isis-core-security:jar:<managed>
+_Components_
 
-|Apache Isis Ext - Sec Man API
-[source,yaml]
+* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserException
+* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserResult
+* o.a.i.extensions.commandreplay.secondary.analysis.CommandReplayAnalysisService
+* o.a.i.extensions.commandreplay.secondary.clock.TickingClockService
+* o.a.i.extensions.commandreplay.secondary.config.SecondaryConfig
+* o.a.i.extensions.commandreplay.secondary.executor.CommandExecutorServiceWithTime
+* o.a.i.extensions.commandreplay.secondary.fetch.CommandFetcher
+
+_Dependencies_
+
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.apache.isis.core:isis-core-runtime:jar:<managed>
+* org.apache.isis.core:isis-schema:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-quartz-impl:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+|===
+
+=== Core: Flyway
+
+[plantuml,Core: Flyway,svg]
 ----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-api
-Type: jar
-Folder: \extensions\security\secman\api
+@startuml(id=Core:_Flyway)
+title Core: Flyway - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Core: Flyway\n[Software System]" {
+  rectangle "==Apache Isis Ext - Flyway\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Ext - Flyway Impl\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+}
+2 .[#707070].> 3 : ""
+@enduml
 ----
-|
+.Projects/Modules (Core: Flyway)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Ext - Sec Man Encryption (Using jbcrypt)
+|Apache Isis Ext - Flyway
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-encryption-jbcrypt
-Type: jar
-Folder: \extensions\security\secman\encryption-jbcrypt
+Artifact: isis-extensions-flyway
+Type: pom
+Folder: \extensions\core\flyway
 ----
-|_Components_
-
-* o.a.i.extensions.secman.encryption.jbcrypt.services.PasswordEncryptionServiceUsingJBcrypt
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
-* org.mindrot:jbcrypt:jar:<managed>
+|Integrates Flyway when using any (relational) persistence store
 
-|Apache Isis Ext - Sec Man Model
+|Apache Isis Ext - Flyway Impl
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-model
+Artifact: isis-extensions-flyway-impl
 Type: jar
-Folder: \extensions\security\secman\model
+Folder: \extensions\core\flyway\impl
 ----
-|_Components_
-
-* o.a.i.extensions.secman.model.facets.TenantedAuthorizationFacetFactory$Register
+|_Dependencies_
 
-_Dependencies_
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.flywaydb:flyway-core:jar:<managed>
+* org.springframework:spring-context:jar:<managed>
+* org.springframework:spring-jdbc:jar:<managed>
+* org.springframework.boot:spring-boot-autoconfigure:jar:<managed>
+|===
 
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
+=== Core: Model Annotation
 
-|Apache Isis Ext - Sec Man Persistence (Using JDO)
-[source,yaml]
+[plantuml,Core: Model Annotation,svg]
 ----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-persistence-jdo
-Type: jar
-Folder: \extensions\security\secman\persistence-jdo
+@startuml(id=Core:_Model_Annotation)
+title Core: Model Annotation - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Core: Model Annotation\n[Software System]" {
+  rectangle "==Apache Isis Ext - @Model\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
 ----
-|_Components_
-
-* o.a.i.extensions.secman.jdo.dom.permission.ApplicationPermissionRepository
-* o.a.i.extensions.secman.jdo.dom.role.ApplicationRoleRepository
-* o.a.i.extensions.secman.jdo.dom.tenancy.ApplicationTenancyRepository
-* o.a.i.extensions.secman.jdo.dom.user.ApplicationUserRepository
-* o.a.i.extensions.secman.jdo.seed.SeedSecurityModuleService
-
-_Dependencies_
-
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+.Projects/Modules (Core: Model Annotation)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Ext - Sec Man Persistence (Using JPA)
+|Apache Isis Ext - @Model
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-persistence-jpa
+Artifact: isis-extensions-modelannotation
 Type: jar
-Folder: \extensions\security\secman\persistence-jpa
+Folder: \extensions\core\model-annotation
 ----
-|_Components_
+|Allows supporting methods to be annotated as @Model, to make explicit the bounds of the metamodel.
 
-* o.a.i.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository
-* o.a.i.extensions.secman.jpa.dom.role.ApplicationRoleRepository
-* o.a.i.extensions.secman.jpa.dom.tenancy.ApplicationTenancyRepository
-* o.a.i.extensions.secman.jpa.dom.user.ApplicationUserRepository
-* o.a.i.extensions.secman.jpa.seed.SeedSecurityModuleService
+_Components_
 
-_Dependencies_
+* o.a.i.extensions.modelannotation.metamodel.services.IncubatorMetaModelPlugin
 
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
-* org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
-* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+_Dependencies_
 
-|Apache Isis Ext - Sec Man Realm (Using Shiro)
-[source,yaml]
-----
-Group: org.apache.isis.extensions
-Artifact: isis-extensions-secman-shiro-realm
-Type: jar
-Folder: \extensions\security\secman\shiro-realm
-----
-|_Components_
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.core:isis-core-webapp:jar:<managed>
+* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
+|===
 
-* o.a.i.extensions.secman.shiro.services.SecurityRealmServiceUsingShiro
+=== Core: Quartz
 
-_Dependencies_
+[plantuml,Core: Quartz,svg]
+----
+@startuml(id=Core:_Quartz)
+title Core: Quartz - Containers
+caption Artifact Hierarchy (Maven)
 
-* org.apache.isis.core:isis-core-runtime:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-api:jar:2.0.0-SNAPSHOT
-* org.apache.isis.security:isis-security-shiro:jar:<managed>
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Core: Quartz\n[Software System]" {
+  rectangle "==Apache Isis Ext - Quartz\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Ext - Quartz Impl\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+}
+2 .[#707070].> 3 : ""
+@enduml
+----
+.Projects/Modules (Core: Quartz)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
-|Apache Isis Ext - Security - Shiro LDAP Realm (parent)
+|Apache Isis Ext - Quartz
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-shiro-realm-ldap
+Artifact: isis-extensions-quartz
 Type: pom
-Folder: \extensions\security\shiro-realm-ldap
+Folder: \extensions\core\quartz
 ----
-|Implementation of Shiro Realm using LDAP.
+|Integrates Quartz
 
-|Apache Isis Ext - Security - Shiro LDAP Realm (impl)
+|Apache Isis Ext - Quartz Impl
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-shiro-realm-ldap-impl
+Artifact: isis-extensions-quartz-impl
 Type: jar
-Folder: \extensions\security\shiro-realm-ldap\impl
+Folder: \extensions\core\quartz\impl
 ----
 |_Dependencies_
 
-* org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
-* org.apache.isis.security:isis-security-shiro:jar:<managed>
+* org.apache.isis.core:isis-core-config:jar:<managed>
+* org.apache.isis.core:isis-core-security:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
+* org.springframework.boot:spring-boot-starter-quartz:jar:<managed>
 |===
 
+=== Security: Secman
+
+=== Security: Shiro LDAP Realm
+
+=== RO Viewer: CORS
+
+=== Wicket Viewer: Excel Download
+
+=== Wicket Viewer: Full Calendar
+
+=== Wicket Viewer: Pdf.js
+
 == Subdomains
 
 [plantuml,Subdomains,svg]
@@ -3604,61 +3892,241 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<12>> {
+skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<23>> {
+skinparam rectangle<<3>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<13>> {
+skinparam rectangle<<4>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<14>> {
+skinparam rectangle<<5>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<15>> {
+skinparam rectangle<<6>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<16>> {
+skinparam rectangle<<7>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<17>> {
+skinparam rectangle<<8>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<18>> {
+skinparam rectangle<<9>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<19>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
+package "Subdomains\n[Software System]" {
+  rectangle "==Apache Isis Sub - Docx (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Sub - Docx (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Sub - Freemarker (applib)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Sub - Freemarker (parent)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
+  rectangle "==Apache Isis Sub - Ognl (applib)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Sub - Ognl (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
+  rectangle "==Apache Isis Sub - PDF Box (applib)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis Sub - PDF Box (parent)\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
+  rectangle "==Apache Isis Sub - Zip (applib)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Sub - Zip (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
+  rectangle "==Apache Isis Subdomains\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+3 .[#707070].> 4 : ""
+5 .[#707070].> 6 : ""
+7 .[#707070].> 8 : ""
+9 .[#707070].> 10 : ""
+11 .[#707070].> 12 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 7 : ""
+2 .[#707070].> 9 : ""
+2 .[#707070].> 11 : ""
+@enduml
+----
+.Projects/Modules (Subdomains)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis Subdomains
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains
+Type: pom
+Folder: \subdomains
+----
+|A library of domain services and of supporting subdomains (often technical in nature), to be called from the
+core domain of an Apache Isis applications.
+
+_Dependencies_
+
+* org.projectlombok:lombok:jar:<managed>
+
+|Apache Isis Sub - Docx (parent)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-docx
+Type: pom
+Folder: \subdomains\docx
+----
+|Uses the Apache POI library for mail merge functions of .docx Word documents
+
+|Apache Isis Sub - Docx (applib)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-docx-applib
+Type: jar
+Folder: \subdomains\docx\applib
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-applib:jar:<managed>
+
+|Apache Isis Sub - Freemarker (parent)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-freemarker
+Type: pom
+Folder: \subdomains\freemarker
+----
+|Integrates Freemarker Library
+
+|Apache Isis Sub - Freemarker (applib)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-freemarker-applib
+Type: jar
+Folder: \subdomains\freemarker\applib
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-applib:jar:<managed>
+
+|Apache Isis Sub - Ognl (parent)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-ognl
+Type: pom
+Folder: \subdomains\ognl
+----
+|Integrates Ognl Library
+
+|Apache Isis Sub - Ognl (applib)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-ognl-applib
+Type: jar
+Folder: \subdomains\ognl\applib
+----
+|_Dependencies_
+
+* org.apache.isis.core:isis-applib:jar:<managed>
+
+|Apache Isis Sub - PDF Box (parent)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-pdfbox
+Type: pom
+Folder: \subdomains\pdfbox
+----
+|Integrates PDF Box Library
+
+|Apache Isis Sub - PDF Box (applib)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-pdfbox-applib
+Type: jar
+Folder: \subdomains\pdfbox\applib
+----
+|Integrates PDF Box Library
+
+_Dependencies_
+
+* org.apache.isis.core:isis-applib:jar:<managed>
+
+|Apache Isis Sub - Zip (parent)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-zip
+Type: pom
+Folder: \subdomains\zip
+----
+|A domain service for Apache Isis', for zipping utilities.
+
+|Apache Isis Sub - Zip (applib)
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-zip-applib
+Type: jar
+Folder: \subdomains\zip\applib
+----
+|_Components_
+
+* o.a.i.extensions.zip.dom.impl.ZipService
+
+_Dependencies_
+
+* org.apache.isis.commons:isis-commons:jar:<managed>
+* org.apache.isis.core:isis-applib:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
+|===
+
+=== Base
+
+[plantuml,Base,svg]
+----
+@startuml(id=Base)
+title Base - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -3669,118 +4137,18 @@ skinparam rectangle<<3>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<6>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<7>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<8>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<9>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<20>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<21>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Subdomains\n[Software System]" {
-  rectangle "==Apache Isis Sub - Base (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Sub - Base (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Sub - Docx (applib)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Sub - Docx (parent)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
-  rectangle "==Apache Isis Sub - Excel (Fixtures)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Sub - Excel (Integ Tests)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Sub - Excel (applib)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Sub - Excel (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
-  rectangle "==Apache Isis Sub - Excel (testing support)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis Sub - Freemarker (applib)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis Sub - Freemarker (parent)\n<size:10>[Container: packaging: pom]</size>" <<12>> as 12
-  rectangle "==Apache Isis Sub - Ognl (applib)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis Sub - Ognl (parent)\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
-  rectangle "==Apache Isis Sub - PDF Box (applib)\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
-  rectangle "==Apache Isis Sub - PDF Box (parent)\n<size:10>[Container: packaging: pom]</size>" <<16>> as 16
-  rectangle "==Apache Isis Sub - Spring (applib)\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
-  rectangle "==Apache Isis Sub - Spring (parent)\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
-  rectangle "==Apache Isis Sub - XdocReport (applib)\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
-  rectangle "==Apache Isis Sub - XdocReport (parent)\n<size:10>[Container: packaging: pom]</size>" <<20>> as 20
-  rectangle "==Apache Isis Sub - Zip (applib)\n<size:10>[Container: packaging: jar]</size>" <<23>> as 23
-  rectangle "==Apache Isis Sub - Zip (parent)\n<size:10>[Container: packaging: pom]</size>" <<22>> as 22
-  rectangle "==Apache Isis Subdomains\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+package "Base\n[Software System]" {
+  rectangle "==Apache Isis Sub - Base (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Sub - Base (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
-3 .[#707070].> 4 : ""
-5 .[#707070].> 6 : ""
-7 .[#707070].> 9 : ""
-7 .[#707070].> 10 : ""
-7 .[#707070].> 8 : ""
-7 .[#707070].> 11 : ""
-12 .[#707070].> 13 : ""
-14 .[#707070].> 15 : ""
-16 .[#707070].> 17 : ""
-18 .[#707070].> 19 : ""
-20 .[#707070].> 21 : ""
-22 .[#707070].> 23 : ""
 2 .[#707070].> 3 : ""
-2 .[#707070].> 5 : ""
-2 .[#707070].> 7 : ""
-2 .[#707070].> 12 : ""
-2 .[#707070].> 14 : ""
-2 .[#707070].> 16 : ""
-2 .[#707070].> 18 : ""
-2 .[#707070].> 20 : ""
-2 .[#707070].> 22 : ""
 @enduml
 ----
-.Projects/Modules (Subdomains)
+.Projects/Modules (Base)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Apache Isis Subdomains
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains
-Type: pom
-Folder: \subdomains
-----
-|A library of domain services and of supporting subdomains (often technical in nature), to be called from the
-		core domain of an Apache Isis applications.
-
-_Dependencies_
-
-* org.projectlombok:lombok:jar:<managed>
-
 |Apache Isis Sub - Base (parent)
 [source,yaml]
 ----
@@ -3810,28 +4178,66 @@ _Dependencies_
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
+|===
 
-|Apache Isis Sub - Docx (parent)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-docx
-Type: pom
-Folder: \subdomains\docx
-----
-|Uses the Apache POI library for mail merge functions of .docx Word documents
+=== Excel
 
-|Apache Isis Sub - Docx (applib)
-[source,yaml]
+[plantuml,Excel,svg]
 ----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-docx-applib
-Type: jar
-Folder: \subdomains\docx\applib
-----
-|_Dependencies_
+@startuml(id=Excel)
+title Excel - Containers
+caption Artifact Hierarchy (Maven)
 
-* org.apache.isis.core:isis-applib:jar:<managed>
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<6>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Excel\n[Software System]" {
+  rectangle "==Apache Isis Sub - Excel (Fixtures)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Sub - Excel (Integ Tests)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Sub - Excel (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Sub - Excel (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Sub - Excel (testing support)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+}
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 6 : ""
+@enduml
+----
+.Projects/Modules (Excel)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Sub - Excel (parent)
 [source,yaml]
@@ -3842,8 +4248,8 @@ Type: pom
 Folder: \subdomains\excel
 ----
 |A domain service for Apache Isis', allowing collections
-        of (view model) objects to be exported/imported to/from an
-        Excel spreadsheet.  Also support for excel-based fixtures.
+of (view model) objects to be exported/imported to/from an
+Excel spreadsheet.  Also support for excel-based fixtures.
 
 |Apache Isis Sub - Excel (applib)
 [source,yaml]
@@ -3900,87 +4306,58 @@ Folder: \subdomains\excel\integtests
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
 * org.hsqldb:hsqldb:jar:<managed>
 
-|Apache Isis Sub - Excel (testing support)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-excel-testing
-Type: jar
-Folder: \subdomains\excel\testing
-----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-metamodel:jar:<managed>
-* org.apache.isis.subdomains:isis-subdomains-excel-applib:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
-
-|Apache Isis Sub - Freemarker (parent)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-freemarker
-Type: pom
-Folder: \subdomains\freemarker
-----
-|Integrates Freemarker Library
-
-|Apache Isis Sub - Freemarker (applib)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-freemarker-applib
-Type: jar
-Folder: \subdomains\freemarker\applib
-----
-|_Dependencies_
-
-* org.apache.isis.core:isis-applib:jar:<managed>
-
-|Apache Isis Sub - Ognl (parent)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-ognl
-Type: pom
-Folder: \subdomains\ognl
-----
-|Integrates Ognl Library
-
-|Apache Isis Sub - Ognl (applib)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-ognl-applib
-Type: jar
-Folder: \subdomains\ognl\applib
-----
-|_Dependencies_
-
-* org.apache.isis.core:isis-applib:jar:<managed>
-
-|Apache Isis Sub - PDF Box (parent)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-pdfbox
-Type: pom
-Folder: \subdomains\pdfbox
-----
-|Integrates PDF Box Library
-
-|Apache Isis Sub - PDF Box (applib)
+|Apache Isis Sub - Excel (testing support)
 [source,yaml]
 ----
 Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-pdfbox-applib
+Artifact: isis-subdomains-excel-testing
 Type: jar
-Folder: \subdomains\pdfbox\applib
+Folder: \subdomains\excel\testing
 ----
-|Integrates PDF Box Library
+|_Dependencies_
 
-_Dependencies_
+* org.apache.isis.core:isis-core-metamodel:jar:<managed>
+* org.apache.isis.subdomains:isis-subdomains-excel-applib:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
+|===
 
-* org.apache.isis.core:isis-applib:jar:<managed>
+=== Spring
+
+[plantuml,Spring,svg]
+----
+@startuml(id=Spring)
+title Spring - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Spring\n[Software System]" {
+  rectangle "==Apache Isis Sub - Spring (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Sub - Spring (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+2 .[#707070].> 3 : ""
+@enduml
+----
+.Projects/Modules (Spring)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Sub - Spring (parent)
 [source,yaml]
@@ -4008,6 +4385,45 @@ _Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
+|===
+
+=== XDocReport
+
+[plantuml,XDocReport,svg]
+----
+@startuml(id=XDocReport)
+title XDocReport - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "XDocReport\n[Software System]" {
+  rectangle "==Apache Isis Sub - XdocReport (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Sub - XdocReport (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+}
+2 .[#707070].> 3 : ""
+@enduml
+----
+.Projects/Modules (XDocReport)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Sub - XdocReport (parent)
 [source,yaml]
@@ -4041,34 +4457,6 @@ _Dependencies_
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
-
-|Apache Isis Sub - Zip (parent)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-zip
-Type: pom
-Folder: \subdomains\zip
-----
-|A domain service for Apache Isis', for zipping utilities.
-
-|Apache Isis Sub - Zip (applib)
-[source,yaml]
-----
-Group: org.apache.isis.subdomains
-Artifact: isis-subdomains-zip-applib
-Type: jar
-Folder: \subdomains\zip\applib
-----
-|_Components_
-
-* o.a.i.extensions.zip.dom.impl.ZipService
-
-_Dependencies_
-
-* org.apache.isis.commons:isis-commons:jar:<managed>
-* org.apache.isis.core:isis-applib:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
 |===
 
 == Tooling
@@ -4152,9 +4540,9 @@ Artifact: isis-tooling
 Type: pom
 Folder: \tooling
 ----
-|Libraries and tools not depending on the _Apache Isis Core_ ecosystem, 
-        eg. code mining, automated documentation.
-        (Targeted for JVM 11+)
+|Libraries and tools not depending on the _Apache Isis Core_ ecosystem,
+eg. code mining, automated documentation.
+(Targeted for JVM 11+)
 
 _Dependencies_
 
@@ -4177,7 +4565,7 @@ Folder: \tooling\c4modeling
 ----
 |Library for programmatic C4 Model generation.
 
-        See https://c4model.com/
+See https://c4model.com/
 
 _Dependencies_
 
@@ -4248,12 +4636,12 @@ Folder: \tooling\model4adoc
 ----
 |Library for programmatic AsciiDoc generation.
 
-        The AsciiDoc name is trademarked by the Eclipse Foundation (https://www.eclipse.org/).
-		This project is *not* part of the specification effort for _AsciiDoc_ under the
-		AsciiDoc Working Group. See https://projects.eclipse.org/proposals/asciidoc-language
-		and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to
-		help with transfer of source code, if any project (under the umbrella of the
-		AsciiDoc Working Group) is willing to take over.
+The AsciiDoc name is trademarked by the Eclipse Foundation (https://www.eclipse.org/).
+This project is *not* part of the specification effort for _AsciiDoc_ under the
+AsciiDoc Working Group. See https://projects.eclipse.org/proposals/asciidoc-language
+and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to
+help with transfer of source code, if any project (under the umbrella of the
+AsciiDoc Working Group) is willing to take over.
 
 _Dependencies_
 
@@ -4277,12 +4665,12 @@ _Dependencies_
 * org.gradle:gradle-tooling-api:jar:<managed>
 |===
 
-== Examples
+== Regression Tests
 
-[plantuml,Examples,svg]
+[plantuml,Regression Tests,svg]
 ----
-@startuml(id=Examples)
-title Examples - Containers
+@startuml(id=Regression_Tests)
+title Regression Tests - Containers
 caption Artifact Hierarchy (Maven)
 
 skinparam {
@@ -4303,350 +4691,81 @@ skinparam rectangle<<3>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<6>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<7>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Examples\n[Software System]" {
-  rectangle "==Demo - Domain\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Demo - JavaFX\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Demo - Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Demo - Vaadin\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Demo - Web\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Demo - Wicket\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+package "Regression Tests\n[Software System]" {
+  rectangle "==Apache Isis - Regression Tests\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis - Regression Tests (stable)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
 }
 2 .[#707070].> 3 : ""
-2 .[#707070].> 4 : ""
-2 .[#707070].> 5 : ""
-2 .[#707070].> 6 : ""
-2 .[#707070].> 7 : ""
 @enduml
 ----
-.Projects/Modules (Examples)
+.Projects/Modules (Regression Tests)
 [cols="3a,5a", options="header"]
 |===
 |Coordinates |Description 
 
-|Demo - Parent
+|Apache Isis - Regression Tests
 [source,yaml]
 ----
-Group: org.apache.isis.examples.apps
-Artifact: demo-parent
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests
 Type: pom
-Folder: \examples\demo
-----
-|_Dependencies_
-
-* com.h2database:h2:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-modelannotation:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-persistence-jdo-dn5:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-persistence-jdo-dn5:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
-
-|Demo - Domain
-[source,yaml]
-----
-Group: org.apache.isis.examples.apps
-Artifact: demo-domain
-Type: jar
-Folder: \examples\demo\domain
+Folder: \regressiontests
 ----
-|_Components_
-
-* demoapp.dom.AppConfiguration
-* demoapp.dom._infra.DefaultTitleProvider
-* demoapp.dom._infra.LibraryPreloadingService
-* demoapp.dom._infra.fixtures.DemoFixtureScriptSpecificationProvider
-* demoapp.dom._infra.resources.AsciiDocConverterService
-* demoapp.dom._infra.resources.AsciiDocReaderService
-* 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.ActionCommandPublishingJdoEntities
-* demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingJdoSeedService
-* demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdoEntities
-* demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdoSeedService
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoSeedService
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoSeedService
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities
-* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService
-* demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.ChildJdoEntities
-* demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.seed.ChildJdoSeedService
-* demoapp.dom.domain.objects.other.embedded.NumberConstantJdoRepository
-* demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingJdoEntities
-* demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingJdoSeedService
-* demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingJdoEntities
-* demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingJdoSeedService
-* demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoEntities
-* demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoSeedService
-* demoapp.dom.domain.properties.PropertyLayout.navigable.FileTreeNodeService
-* demoapp.dom.domain.properties.PropertyLayout.repainting.PdfJsViewerAdvisorFallback
-* demoapp.dom.featured.customui.geocoding.GeoapifyClient
-* demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoImplementation
-* demoapp.dom.services.core.eventbusservice.EventLogEntryJdoRepository
-* demoapp.dom.services.core.eventbusservice.EventSubscriberDemoImplementation
-* demoapp.dom.services.core.wrapperFactory.WrapperFactoryJdoEntities
-* demoapp.dom.services.core.wrapperFactory.WrapperFactoryJdoSeedService
-* demoapp.dom.services.extensions.secman.apptenancy.ApplicationTenancyEvaluatorForDemo
-* demoapp.dom.services.extensions.secman.apptenancy.entities.TenantedJdoEntities
-* demoapp.dom.services.extensions.secman.apptenancy.entities.seed.TenantedJdoSeedService
-* demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoEntities
-* demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoSeedService
-* demoapp.dom.types.isis.blobs.samples.IsisBlobsSamples
-* demoapp.dom.types.isis.clobs.jdo.IsisClobJdoEntities
-* demoapp.dom.types.isis.clobs.jdo.IsisClobJdoSeedService
-* demoapp.dom.types.isis.clobs.samples.IsisClobsSamples
-* demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoEntities
-* demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoSeedService
-* demoapp.dom.types.isis.localresourcepaths.samples.IsisLocalResourcePathsSamples
-* demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoEntities
-* demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoSeedService
-* demoapp.dom.types.isis.markups.samples.IsisMarkupSamples
-* demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoEntities
-* demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoSeedService
-* demoapp.dom.types.isis.passwords.samples.IsisPasswordsSamples
-* demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoEntities
-* demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoSeedService
-* demoapp.dom.types.isisext.asciidocs.samples.IsisAsciiDocSamples
-* demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoEntities
-* demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoSeedService
-* demoapp.dom.types.isisext.markdowns.samples.IsisMarkdownSamples
-* demoapp.dom.types.javaawt.images.jdo.JavaAwtImageJdoEntities
-* demoapp.dom.types.javaawt.images.jdo.JavaAwtImageJdoSeedService
-* demoapp.dom.types.javaawt.images.samples.JavaAwtImageService
-* demoapp.dom.types.javaawt.images.samples.JavaAwtImagesSamples
-* demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoEntities
-* demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoSeedService
-* demoapp.dom.types.javalang.booleans.samples.WrapperBooleanSamples
-* demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoEntities
-* demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoSeedService
-* demoapp.dom.types.javalang.bytes.samples.WrapperByteSamples
-* demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoEntities
-* demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoSeedService
-* demoapp.dom.types.javalang.characters.samples.WrapperCharacterSamples
-* demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoEntities
-* demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoSeedService
-* demoapp.dom.types.javalang.doubles.samples.WrapperDoubleSamples
-* demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoEntities
-* demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoSeedService
-* demoapp.dom.types.javalang.floats.samples.WrapperFloatSamples
-* demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoEntities
-* demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoSeedService
-* demoapp.dom.types.javalang.integers.samples.WrapperIntegerSamples
-* demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoEntities
-* demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoSeedService
-* demoapp.dom.types.javalang.longs.samples.WrapperLongSamples
-* demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoEntities
-* demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoSeedService
-* demoapp.dom.types.javalang.shorts.samples.WrapperShortSamples
-* demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoEntities
-* demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoSeedService
-* demoapp.dom.types.javalang.strings.samples.JavaLangStringSamples
-* demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoEntities
-* demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoSeedService
-* demoapp.dom.types.javamath.bigdecimals.samples.JavaMathBigDecimalSamples
-* demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoEntities
-* demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoSeedService
-* demoapp.dom.types.javamath.bigintegers.samples.JavaMathBigIntegerSamples
-* demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoEntities
-* demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoSeedService
-* demoapp.dom.types.javanet.urls.samples.JavaNetUrlSamples
-* demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoEntities
-* demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoSeedService
-* demoapp.dom.types.javasql.javasqldate.samples.JavaSqlDateSamples
-* demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoEntities
-* demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoSeedService
-* demoapp.dom.types.javasql.javasqltimestamp.samples.JavaSqlTimestampSamples
-* demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoEntities
-* demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoSeedService
-* demoapp.dom.types.javatime.javatimelocaldate.samples.JavaTimeLocalDateSamples
-* demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoEntities
-* demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoSeedService
-* demoapp.dom.types.javatime.javatimelocaldatetime.samples.JavaTimeLocalDateTimeSamples
-* demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoEntities
-* demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoSeedService
-* demoapp.dom.types.javatime.javatimeoffsetdatetime.samples.JavaTimeOffsetDateTimeSamples
-* demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoEntities
-* demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoSeedService
-* demoapp.dom.types.javatime.javatimeoffsettime.samples.JavaTimeOffsetTimeSamples
-* demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoEntities
-* demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoSeedService
-* demoapp.dom.types.javatime.javatimezoneddatetime.samples.JavaTimeZonedDateTimeSamples
-* demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoEntities
-* demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoSeedService
-* demoapp.dom.types.javautil.javautildate.samples.JavaUtilDateSamples
-* demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoEntities
-* demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoSeedService
-* demoapp.dom.types.javautil.uuids.samples.JavaUtilUuidSamples
-* demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoEntities
-* demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoSeedService
-* demoapp.dom.types.jodatime.jodadatetime.samples.JodaDateTimeSamples
-* demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoEntities
-* demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoSeedService
-* demoapp.dom.types.jodatime.jodalocaldate.samples.JodaLocalDateSamples
-* demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoEntities
-* demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoSeedService
-* demoapp.dom.types.jodatime.jodalocaldatetime.samples.JodaLocalDateTimeSamples
-* demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntities
-* demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoSeedService
-* demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoEntities
-* demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoSeedService
-* demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoEntities
-* demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoSeedService
-* demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntities
-* demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoSeedService
-* demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntities
-* demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoSeedService
-* demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntities
-* demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoSeedService
-* demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntities
-* demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoSeedService
-* demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities
-* demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoSeedService
+|Collection of JUnit tests covering core functionalities of the framework.
+(Targeted for JVM 11+)
 
 _Dependencies_
 
-* com.h2database:h2:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed>
+* org.apache.directory.server:apacheds-test-framework:jar:2.0.0.AM26
 * org.apache.isis.extensions:isis-extensions-modelannotation:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-model:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed>
-* org.apache.isis.testing:isis-testing-h2console-ui:jar:<managed>
-* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
-* org.assertj:assertj-core:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
-* org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
-
-|Demo - JavaFX
-[source,yaml]
-----
-Group: org.apache.isis.examples.apps
-Artifact: demo-javafx
-Type: jar
-Folder: \examples\demo\javafx
-----
-|_Dependencies_
-
-* org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
-* org.apache.isis.core:isis-core-security:jar:<managed>
-* org.apache.isis.examples.apps:demo-domain:jar:${project.version}
-* org.apache.isis.incubator.viewer:isis-viewer-javafx-viewer:jar:${project.version}
-* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
-* org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
-* org.apache.isis.security:isis-security-bypass:jar:<managed>
-* org.apache.isis.security:isis-security-shiro:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui:pom:${project.version}
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui:pom:${project.version}
-* org.projectlombok:lombok:jar:<managed>
-
-|Demo - Vaadin
-[source,yaml]
-----
-Group: org.apache.isis.examples.apps
-Artifact: demo-vaadin
-Type: jar
-Folder: \examples\demo\vaadin
-----
-|_Dependencies_
-
-* org.apache.isis.examples.apps:demo-web:jar:${project.version}
-* org.apache.isis.incubator.viewer:isis-viewer-vaadin-viewer:jar:${project.version}
-* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-vaa:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-wkt:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui-wkt:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
-* org.projectlombok:lombok:jar:<managed>
-
-|Demo - Web
-[source,yaml]
-----
-Group: org.apache.isis.examples.apps
-Artifact: demo-web
-Type: jar
-Folder: \examples\demo\web
-----
-|_Components_
-
-* demoapp.web._infra.utils.ThereCanBeOnlyOne
-
-_Dependencies_
-
-* org.apache.isis.examples.apps:demo-domain:jar:${project.version}
-* org.apache.isis.extensions:isis-extensions-command-replay-primary:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-command-replay-secondary:jar:<managed>
-* org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
+* org.apache.isis.extensions:isis-extensions-shiro-realm-ldap-impl:jar:<managed>
+* org.apache.isis.mappings:isis-mappings-restclient-applib:jar:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdk11:pom:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jdo:pom:<managed>
+* org.apache.isis.mavendeps:isis-mavendeps-jpa:pom:<managed>
 * org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed>
-* org.springframework.boot:spring-boot-starter:jar:<managed>
-* org.springframework.boot:spring-boot-starter-actuator:jar:<managed>
-* org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
+* org.apache.isis.security:isis-security-shiro:jar:<managed>
+* org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed>
+* org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
+* org.apache.isis.tooling:isis-tooling-model4adoc:jar:${project.version}
+* org.apache.isis.viewer:isis-viewer-common:jar:<managed>
+* org.glassfish:javax.json:jar:1.1.4
+* org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
+* org.projectlombok:lombok:jar:<managed>
 
-|Demo - Wicket
+|Apache Isis - Regression Tests (stable)
 [source,yaml]
 ----
-Group: org.apache.isis.examples.apps
-Artifact: demo-wicket
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-stable
 Type: jar
-Folder: \examples\demo\wicket
+Folder: \regressiontests\stable
 ----
 |_Components_
 
-* demoapp.webapp.wicket.ui.custom.WhereInTheWorldPanelFactory
+* o.a.i.testdomain.applayer.ApplicationLayerTestFactory
+* o.a.i.testdomain.applayer.ApplicationLayerTestFactory$PreCommitListener
+* o.a.i.testdomain.applayer.publishing.CommandSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.EntityChangesSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.EntityPropertyChangeSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.ExecutionSubscriberForTesting
+* o.a.i.testdomain.conf.Configuration_headless$HeadlessCommandSupport
+* o.a.i.testdomain.jpa.springdata.EmployeeRepository
+* o.a.i.testdomain.util.interaction.InteractionBoundaryProbe
+* o.a.i.testdomain.util.kv.KVStoreForTesting
+* o.a.i.testdomain.util.rest.RestEndpointService
 
 _Dependencies_
 
-* org.apache.isis.examples.apps:demo-web:jar:${project.version}
-* org.apache.isis.extensions:isis-extensions-pdfjs-ui:jar:<managed>
-* org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-wkt:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-markdown-ui-wkt:jar:<managed>
-* org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
-* org.apache.isis.viewer:isis-viewer-wicket-ui:jar:2.0.0-SNAPSHOT
-* org.apache.isis.viewer:isis-viewer-wicket-viewer:jar:2.0.0-SNAPSHOT
+* org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
+* org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
 |===
 
 == Incubator
@@ -4665,76 +4784,14 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<6>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<7>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<8>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<9>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 package "Incubator\n[Software System]" {
-  rectangle "==Apache Isis Inc - Client kroViz\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Inc - Viewer JavaFX\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
-  rectangle "==Apache Isis Inc - Viewer JavaFX (Model)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Inc - Viewer JavaFX (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Inc - Viewer JavaFX (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Inc - Viewer Vaadin\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
-  rectangle "==Apache Isis Inc - Viewer Vaadin (Model)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Inc - Viewer Vaadin (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Inc - Viewer Vaadin (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
   rectangle "==Apache Isis Incubator\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
-4 .[#707070].> 5 : ""
-4 .[#707070].> 6 : ""
-4 .[#707070].> 7 : ""
-8 .[#707070].> 9 : ""
-8 .[#707070].> 10 : ""
-8 .[#707070].> 11 : ""
-2 .[#707070].> 4 : ""
-2 .[#707070].> 8 : ""
 @enduml
 ----
 .Projects/Modules (Incubator)
@@ -4755,6 +4812,38 @@ Folder: \incubator
 _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
+|===
+
+=== Kroviz Client
+
+[plantuml,Kroviz Client,svg]
+----
+@startuml(id=Kroviz_Client)
+title Kroviz Client - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Kroviz Client\n[Software System]" {
+  rectangle "==Apache Isis Inc - Client kroViz\n<size:10>[Container: packaging: jar]</size>" <<2>> as 2
+}
+@enduml
+----
+.Projects/Modules (Kroviz Client)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Inc - Client kroViz
 [source,yaml]
@@ -4765,6 +4854,59 @@ Type: jar
 Folder: \incubator\clients\kroviz
 ----
 |Initial sketches
+|===
+
+=== JavaFX Viewer
+
+[plantuml,JavaFX Viewer,svg]
+----
+@startuml(id=JavaFX_Viewer)
+title JavaFX Viewer - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "JavaFX Viewer\n[Software System]" {
+  rectangle "==Apache Isis Inc - Viewer JavaFX\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Inc - Viewer JavaFX (Model)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Inc - Viewer JavaFX (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Inc - Viewer JavaFX (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+}
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+@enduml
+----
+.Projects/Modules (JavaFX Viewer)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Inc - Viewer JavaFX
 [source,yaml]
@@ -4840,6 +4982,59 @@ Folder: \incubator\viewers\javafx\viewer
 |_Dependencies_
 
 * org.apache.isis.incubator.viewer:isis-viewer-javafx-ui:jar:<managed>
+|===
+
+=== Vaadin Viewer
+
+[plantuml,Vaadin Viewer,svg]
+----
+@startuml(id=Vaadin_Viewer)
+title Vaadin Viewer - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Vaadin Viewer\n[Software System]" {
+  rectangle "==Apache Isis Inc - Viewer Vaadin\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Inc - Viewer Vaadin (Model)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis Inc - Viewer Vaadin (UI Components)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Inc - Viewer Vaadin (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+}
+2 .[#707070].> 3 : ""
+2 .[#707070].> 4 : ""
+2 .[#707070].> 5 : ""
+@enduml
+----
+.Projects/Modules (Vaadin Viewer)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
 
 |Apache Isis Inc - Viewer Vaadin
 [source,yaml]
@@ -5091,66 +5286,3 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 |===
-
-== Other
-
-[plantuml,Other,svg]
-----
-@startuml(id=Other)
-title Other - Containers
-caption Artifact Hierarchy (Maven)
-
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
-}
-hide stereotype
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Other\n[Software System]" {
-  rectangle "==Apache Isis Starter Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-}
-@enduml
-----
-.Projects/Modules (Other)
-[cols="3a,5a", options="header"]
-|===
-|Coordinates |Description 
-
-|Apache Isis Starter Parent
-[source,yaml]
-----
-Group: org.apache.isis.app
-Artifact: isis-app-starter-parent
-Type: pom
-Folder: \starters
-----
-|Parent pom providing dependency and plugin management for Apache Isis applications
-		built with Maven.  Builds on top of spring-boot-starter-parent.
-
-|Apache Isis Supplemental - Legal Info
-[source,yaml]
-----
-Group: org.apache.isis
-Artifact: supplemental-model
-Type: jar
-Folder: \supplemental-model
-----
-|For example, the templates used by many Apache distributions assemble a listing of project dependencies 
-  	according to their organization name (and URL), along with the URL each project's website. When dependency 
-  	POMs are missing this information, the dependency notice file that the Remote Resources Plugin renders can 
-  	be invalid.
-	To compensate for incomplete dependency POMs, we use the supplemental models support.
-|===
diff --git a/antora/supplemental-ui/css/site-custom.css b/antora/supplemental-ui/css/site-custom.css
index 362e9fb..1cf950d 100644
--- a/antora/supplemental-ui/css/site-custom.css
+++ b/antora/supplemental-ui/css/site-custom.css
@@ -49,9 +49,14 @@ div.paragraph code {
     padding-left: 1rem;
 }
 
-input#algolia-search-layout {
+input.ds-input {
     min-width: 23em;
     padding: 5px;
     border: 2px solid #87a83f;
     border-radius: 5px;
 }
+
+div.imageblock.kroki > div.content > img,
+div.imageblock.kroki > div.content > object {
+    max-width: 100%;
+}
diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index c3135d8..d29255f 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -876,7 +876,7 @@ mvn -pl webapp jetty:run</pre>
 
       <div class="col-md-8">
         <div class="copyright">
-          Copyright © 2010~2020 The Apache Software Foundation, licensed under the Apache License, v2.0.
+          Copyright © 2010~2021 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/ROOT/nav.adoc b/core/adoc/modules/ROOT/nav.adoc
index 798e16a..2285634 100644
--- a/core/adoc/modules/ROOT/nav.adoc
+++ b/core/adoc/modules/ROOT/nav.adoc
@@ -2,3 +2,6 @@
 :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[]
+
+* see also:
+** xref:system:generated:system-overview.adoc[System Overview]
diff --git a/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc b/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
index 25b26af..4a4800a 100644
--- a/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
+++ b/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
@@ -76,78 +76,191 @@ Inspect its https://github.com/apache/isis/blob/master/tooling/cli/src/main/java
 
 == Commands
 
-There is currently only one subcommand, namely "projdoc".
+All commands accept two parameters:
 
-=== projdoc
+* `-p` indicates the location of the multi-project root `pom.xml`
++
+in other words, the root of the git repo.
+
+* `-o` the output target root for generated _adoc_
+
+These are specified first in the command line.
+The command is then specified, along with any command-specific options.
+
+A number of global configuration options can be specified under the `global` entry in the `isis-tooling.yml` file.
+
+[source,yml]
+.isis-tooling.yml
+----
+global:
+  outputRootFolder:                                                       # <.>
+  licenseHeader: "Licensed to the Apache Software Foundation (ASF) ..."   # <.>
+  documentPagesPath: "pages"                                              # <.>
+  namespacePartsSkipCount: 3                                              # <.>
+  sections:                                                               # <.>
+    App: org.apache.isis.app.*
+    Mavendeps: org.apache.isis.mavendeps.*
+    ...
+    Core: org.apache.isis.core.*
+    Persistence: org.apache.isis.persistence
+    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+    ...
+----
+
+<.> the output target root for generated _adoc_; corresponds to command line option `-o` (if empty the current dir is used)
+<.> license header to include with each generated adoc file
+<.> sub-folder name for _adoc_ pages
+<.> how many namespace parts in a _fqn_ one wants to skip, eg. in `org.apache.isis.applib.Xxx` if we skip 3 namespace parts we'll end up with `applib.Xxx`
+<.> Logical grouping of modules for the system overview, but also used to determine which modules to scan for index files.
++
+If not specified the natural Maven project hierarchy is reflected as is.
+
+The `sections` configuration key is used to group module artifacts into named sections.
+It consists of key:value pairs:
+
+* the key is the section name (eg "App", or "JDO")
+* the value is a pattern that identifies Maven artifacts.
+
+This pattern in turn can be either:
+
+* an exact Maven `groupId`, such as `org.apache.isis.persistence`
++
+This matches all Maven modules with exactly that `groupId`.
+
+* a Maven `groupId` with wildcard, such as `org.apache.isis.core.*`
++
+This matches all Maven modules whose `groupId` pattern matches the groupId.
+
+* a Maven group and artifact optionally with wildcard, such as `org.apache.isis.persistence:isis-persistence-jdo.*`
++
+This matches all Maven modules whose `groupId` pattern equals the specified groupId and whose `artifactId` pattern matches the specified `artifactId`.
+
+If a Maven module matches more than one section, then the more specific section (with both group and artifact) is used.
+
+These different types of sections are exploited by the `overview` command, described <<system-overview-overview,below>>.
+
+=== System Overview (`overview`)
+
+This command generates the _System Overview_ (`.adoc) page.
+
+This page summarises the contents of each section (defined by the `global.sections` configuration key), also with a link:https://c4model.com/[C4] diagram showing how the modules relate.
+
+As described <<configuration-file,above>>, sections are defined that either match on a group or on a group and artifact.
+The overview command places these under a level 2 or a level 3 heading respectively.
+By sequencing the sections correctly, this therefore allows a hierarchy to be created.
+
+For example,
+
+[source,yml]
+.isis-tooling.yml
+----
+global:
+  ...
+  sections:                                                               # <.>
+    ...
+    Persistence: org.apache.isis.persistence
+    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+    ...
+----
+
+The `overview` command will render "Persistence" section at level 2 (because its pattern is only for a `groupId`), and then the "JDO" and "JPA" sections underneath at level 3 (because there patterns also include an `artifactId`).
+
+In this way, sections can be defined that create a hierarchy.
 
-Generates the _System Overview_ and the _Document Global Index_ (adoc) files.
 
-The `projdoc` command is usually invoked as follows:
+=== Usage
+
+The `overview` command is usually invoked as follows:
 
 [source]
-.Example Usage
 ----
 java -jar tooling/cli/target/isis-tooling-cli.jar \
     -p . \
-    projdoc \
-    -o antora/components/system/modules/generated
+    -o antora/components/system/modules/generated \
+    overview
 ----
 
 where :
 
-* `-p` indicates the location of the multi-project root `pom.xml`
-+
-in other words, the root of the git repo.
+* `-p` and `-o` are the global options for all commands
 
-* `projdoc` is CLI sub-command
-+
-selecting the _Project Doc Generator_ functionality
+* `overview` selects this sub-command
+
+There are no command-specific options.
 
-* `-o` the output target root for generated _adoc_
 
 
+[[overview-configuration]]
+==== Configuration
+
+The `overview` command supports a number of command-specific configuration options:
+
+[source,yml]
+.isis-tooling.yml
+----
+commands:
+  overview:
+    description: "These tables summarize all Maven artifacts ..."           # <.>
+    systemOverviewFilename: "system-overview.adoc"                          # <.>
+----
+<.> _System Overview_ head line
+<.> name of the _System Overview_ (adoc) file
+
+
+
+=== Index (`index`)
+
+This command generates the _Document Global Index_ (`.adoc`) files.
+
 Any class found with magic `{@index}` in its _java-doc_ section at type level, will be included with the _Document Global Index_.
-Adoc files may refer to the _Document Global Index_ via `xref` or `include` statements using paths like eg. `system:generated:index/applib/Xxx.adoc`.
+
+Asciidoc files may refer to the _Document Global Index_ via `xref` or `include` statements using paths such as `system:generated:index/applib/Xxx.adoc`.
 
 
+==== Usage
+
+The `index` command is usually invoked as follows:
+
+[source]
+----
+java -jar tooling/cli/target/isis-tooling-cli.jar \
+    -p . \
+    -o antora/components/system/modules/generated \
+    overview
+----
+
+where :
+
+* `-p` and `-o` are the global options for all commands
+
+* `index` selects this sub-command
+
+There are no command-specific options.
+
+
+[[index-configuration]]
 ==== Configuration
 
-The `projdoc` command can be configured using the `projectDoc` entry in `isis-tooling.yml` file.
+The `index` command supports a number of command-specific configuration options:
 
 [source,yml]
 .isis-tooling.yml
 ----
-projectDoc:
-  description: "These tables summarize all Maven artifacts ..."           # <.>
-  licenseHeader: "Licensed to the Apache Software Foundation (ASF) ..."   # <.>
-  outputRootFolder:                                                       # <.>
-  documentPagesPath: "pages"                                              # <.>
-  documentGlobalIndexPath: "pages/index"                                  # <.>
-  documentGlobalIndexXrefPageIdFormat: "system:generated:index/%s.adoc"   # <.>
-  systemOverviewFilename: "system-overview.adoc"                          # <.>
-  fixOrphanedAdocIncludeStatements: true                                  # <.>
-  namespacePartsSkipCount: 3                                              # <.>
-  artifactGroups:                                                         # <.>
-    Base: org.apache.isis
-    Commons: org.apache.isis.commons.*
-    Core: org.apache.isis.core.*
-    App: org.apache.isis.app.*
-    ...
+commands:
+  index:
+    documentGlobalIndexPath: "pages/index"                                  # <.>
+    documentGlobalIndexXrefPageIdFormat: "system:generated:index/%s.adoc"   # <.>
+    fixOrphanedAdocIncludeStatements: true                                  # <.>
 ----
-
-<.> _System Overview_ head line
-<.> license header to include with each generated _adoc_ file
-<.> the output target root for generated _adoc_; corresponds to command line option `-o` (if empty the current dir is used)
-<.> sub-folder name for _adoc_ pages
 <.> sub-folder name for the _Document Global Index_
-<.> format for include statements via which other _adoc_ files may refer to _the Document Global Index_
-<.> name of the _System Overview_ (adoc) file
-<.> whether to activate the `OrphanedIncludeStatementFixer`
-<.> how many namespace parts in a _fqn_ one wants to skip when generating the _Document Global Index_, eg. in `org.apache.isis.applib.Xxx` if we skip 3 namespace parts we'll end up with `applib.Xxx`
-<.> logical grouping of artifacts for the system overview, if not specified the natural Maven project hierarchy is reflected as is
+<.> format for include statements via which other _adoc_ files may refer to the Document Global Index
+<.> whether to activate the `OrphanedIncludeStatementFixer`, discussed below.
 
 The CLI also has an experimental `OrphanedIncludeStatementFixer` that checks orphaned index references in all _adoc_ files and tries to fix them.
 
+
 ==== Limitations
 
 There are currently a couple of limitations:
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
index aeaab1a..5207145 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
@@ -87,11 +87,6 @@ class Cli implements Callable<Integer> {
             description = "Writes a System Overview document (AsciiDoc) to given output.")
     static class SystemOverviewCommand extends CliCommandAbstract {
 
-        @Option(
-                names = {"-o", "--output"},
-                description = "path to the output file (default: NONE = write to std.out)")
-        private String outputFilePath;
-
         @Override
         public Integer call() throws Exception {
 
@@ -115,7 +110,7 @@ class Cli implements Callable<Integer> {
         @Override
         public Integer call() throws Exception {
 
-            if(getOutputPath() !=null) {
+            if(getOutputPath() != null) {
                 getConfig().getGlobal().setOutputRootFolder(getOutputPath());
             }
 
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
index 74bc655..e45b6cd 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
@@ -20,6 +20,7 @@ package org.apache.isis.tooling.cli.projdoc;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -28,6 +29,8 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.function.BiFunction;
+import java.util.function.BinaryOperator;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -303,6 +306,11 @@ public class ProjectDocModel {
                         : "===";
         titleBlock.setSource(String.format("%s %s", headingLevel, sectionName));
 
+        val sectionModules = section.getMatchingProjectNodes();
+        if(sectionModules.isEmpty()) {
+            return;
+        }
+
         val descriptionBlock = block(doc);
         val groupDiagram = new GroupDiagram(C4.of(sectionName, null));
 
@@ -319,7 +327,7 @@ public class ProjectDocModel {
         val projRoot = _Files.canonicalPath(projTree.getProjectDirectory())
                 .orElseThrow(()->_Exceptions.unrecoverable("cannot resolve project root"));
 
-        section.getMatchingProjectNodes()
+        sectionModules
                 .forEach(module -> {
                     if(mode == Mode.INDEX) {
                         gatherAdocFiles(module.getProjectDirectory(), onAdocFile);
@@ -400,7 +408,7 @@ public class ProjectDocModel {
     }
 
     private String details(ProjectNode module, J2AdocContext j2aContext) {
-        val description = module.getDescription().trim();
+        val description = sanitizeDescription(module.getDescription());
         val dependencyList = module.getDependencies()
                 .stream()
                 .map(Dependency::getArtifactCoordinates)
@@ -441,6 +449,12 @@ public class ProjectDocModel {
         return sb.toString();
     }
 
+    static String sanitizeDescription(String str) {
+        return Arrays.stream(str.split("\n"))
+                .map(String::trim)
+                .reduce("", (x, y) -> x + (x.isEmpty() ? "" : "\n") + y);
+    }
+
     private static String toAdocSection(String title, String content) {
         return String.format("_%s_\n\n%s\n\n", title, content);
     }
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel_sanitizeDescription_Test.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel_sanitizeDescription_Test.java
new file mode 100644
index 0000000..aa02213
--- /dev/null
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel_sanitizeDescription_Test.java
@@ -0,0 +1,35 @@
+package org.apache.isis.tooling.cli.projdoc;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.apache.isis.tooling.projectmodel.ProjectNode;
+
+class ProjectDocModel_sanitizeDescription_Test {
+
+    @Test
+    void strips() {
+
+        final String str = ProjectDocModel.sanitizeDescription(
+                "JDO Spring integration.\n" +
+                "\t\t\n" +
+                "\t\tThis is a fork of the Spring ORM JDO sources at github, \n" +
+                "        for which support had been dropped back in 2016 [1].\n" +
+                "\t\t\n" +
+                "\t\tCredits to the original authors.\n" +
+                "\t\t\n" +
+                "\t\t[1] https://github.com/spring-projects/spring-framework/issues/18702");
+
+        Assertions.assertEquals(str,
+                "JDO Spring integration.\n" +
+                "\n" +
+                "This is a fork of the Spring ORM JDO sources at github,\n" +
+                "for which support had been dropped back in 2016 [1].\n" +
+                "\n" +
+                "Credits to the original authors.\n" +
+                "\n" +
+                "[1] https://github.com/spring-projects/spring-framework/issues/18702");
+    }
+}
diff --git a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocFactory.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocFactory.java
index 9e25ca1..434a299 100644
--- a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocFactory.java
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocFactory.java
@@ -45,14 +45,14 @@ import lombok.NonNull;
 import lombok.val;
 
 /**
- * Provides convenient factory methods to build a (AsciiDoc) Document Model.  
+ * Provides convenient factory methods to build a (AsciiDoc) Document Model.
  * @since Sep 10, 2020
  * @apiNote The <i>AsciiDoc<i> name is trademarked by the <i>Eclipse Foundation</i>.
  * <p>
-    This project is <b>not</b> part of the specification effort for <i>AsciiDoc<i> under the 
+    This project is <b>not</b> part of the specification effort for <i>AsciiDoc<i> under the
     <i>AsciiDoc Working Group</i>. See https://projects.eclipse.org/proposals/asciidoc-language
-    and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to 
-    help with transfer of source code, if any project (under the umbrella of the 
+    and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to
+    help with transfer of source code, if any project (under the umbrella of the
     <i>AsciiDoc Working Group</i>) is willing to take over.
     </p>
  */
@@ -62,15 +62,15 @@ public class AsciiDocFactory {
      * @return a blank/empty document object
      */
     public static Document doc() {
-        return new SimpleDocument();     
+        return new SimpleDocument();
     }
-    
+
     // -- ATTRIBUTES
-    
+
     public static void attrNotice(Document node, String value) {
         node.setAttribute("notice", value, true);
     }
-    
+
     // -- ADMONITIONS
 
     //NOTE
@@ -78,53 +78,53 @@ public class AsciiDocFactory {
     //IMPORTANT
     //CAUTION
     //WARNING
-    
+
     public static Block note(StructuralNode parent) {
         return admonition("Note", parent, null);
     }
-    
+
     public static Block note(StructuralNode parent, String source) {
         return admonition("Note", parent, source);
     }
-    
+
     public static Block tip(StructuralNode parent) {
         return admonition("Tip", parent, null);
     }
-    
+
     public static Block tip(StructuralNode parent, String source) {
         return admonition("Tip", parent, source);
     }
-    
+
     public static Block important(StructuralNode parent) {
         return admonition("Important", parent, null);
     }
-    
+
     public static Block important(StructuralNode parent, String source) {
         return admonition("Important", parent, source);
     }
-    
+
     public static Block caution(StructuralNode parent) {
         return admonition("Caution", parent, null);
     }
-    
+
     public static Block caution(StructuralNode parent, String source) {
         return admonition("Caution", parent, source);
     }
-    
+
     public static Block warning(StructuralNode parent) {
         return admonition("Warning", parent, null);
     }
-    
+
     public static Block warning(StructuralNode parent, String source) {
         return admonition("Warning", parent, source);
     }
-    
+
     // -- BLOCK
-    
+
     public static Block block(StructuralNode parent) {
         return block(parent, null);
     }
-    
+
     public static Block block(StructuralNode parent, String source) {
         val block = new SimpleBlock();
         block.setSource(source);
@@ -133,40 +133,40 @@ public class AsciiDocFactory {
         block.setParent(parent);
         return block;
     }
-    
+
     public static Block openBlock(ListItem listItem) {
         val openBlock = block(listItem);
         openBlock.setStyle("open");
         return openBlock;
     }
-    
+
     public static Block listingBlock(StructuralNode parent, @NonNull String source) {
         val listingBlock = block(parent, source);
         listingBlock.setStyle("listing");
         return listingBlock;
     }
-    
+
     // -- FOOTNOTES
-    
+
     public static org.asciidoctor.ast.List footnotes(StructuralNode parent) {
         val footnoteList = list(parent);
         footnoteList.setStyle("arabic");
         return footnoteList;
     }
-    
+
     public static ListItem footnote(org.asciidoctor.ast.List parent, @NonNull String source) {
         return listItem(parent, source);
     }
-    
+
     // -- TABLE
-    
+
     public static Table table(StructuralNode parent) {
         val table = new SimpleTable();
         parent.getBlocks().add(table);
         table.setParent(parent);
         return table;
     }
-    
+
     public static Column col(Table table) {
         val column = new SimpleColumn();
         table.getColumns().add(column);
@@ -179,19 +179,19 @@ public class AsciiDocFactory {
         table.getBody().add(row);
         return row;
     }
-    
+
     public static Row headRow(Table table) {
         val row = new SimpleRow();
         table.getHeader().add(row);
         return row;
     }
-    
+
     public static Row footRow(Table table) {
         val row = new SimpleRow();
         table.getFooter().add(row);
         return row;
     }
-    
+
     public static Cell cell(Row row, Column column, String source) {
         val cell = new SimpleCell();
         row.getCells().add(cell);
@@ -199,7 +199,7 @@ public class AsciiDocFactory {
         cell.setSource(source);
         return cell;
     }
-    
+
     public static Cell cell(Table table, Row row, String source) {
         val colIndex = row.getCells().size();
         val column = getOrCreateColumn(table, colIndex);
@@ -211,19 +211,19 @@ public class AsciiDocFactory {
         val col = getOrCreateColumn(table, colIndex);
         return cell(row, col, source);
     }
-    
+
     public static Cell headCell(Table table, int rowIndex, int colIndex, String source) {
         val row = getOrCreateHeadRow(table, rowIndex);
         val col = getOrCreateColumn(table, colIndex);
         return cell(row, col, source);
     }
-    
+
     public static Cell footCell(Table table, int rowIndex, int colIndex, String source) {
         val row = getOrCreateFootRow(table, rowIndex);
         val col = getOrCreateColumn(table, colIndex);
         return cell(row, col, source);
     }
-    
+
     public static org.asciidoctor.ast.List list(StructuralNode parent) {
         val list = new SimpleList();
         list.setLevel(parent.getLevel()+1);
@@ -231,11 +231,11 @@ public class AsciiDocFactory {
         list.setParent(parent);
         return list;
     }
-    
+
     public static ListItem listItem(org.asciidoctor.ast.List parent) {
         return listItem(parent, null);
     }
-    
+
     public static ListItem listItem(org.asciidoctor.ast.List parent, String source) {
         val listItem = new SimpleListItem();
         listItem.setLevel(parent.getLevel());
@@ -244,7 +244,7 @@ public class AsciiDocFactory {
         listItem.setSource(source);
         return listItem;
     }
-    
+
     public static class SourceFactory {
 
         public static String wrap(@NonNull String sourceType, @NonNull String source, @Nullable String title, Can<String> options) {
@@ -263,11 +263,11 @@ public class AsciiDocFactory {
             sb.append("----\n");
             return sb.toString();
         }
-        
+
         public static String xml(@NonNull String xmlSource, @Nullable String title) {
             return wrap("source,xml", xmlSource, title, Can.empty());
         }
-        
+
 //        [source,java]
 //        .title
 //        ----
@@ -278,59 +278,59 @@ public class AsciiDocFactory {
         public static String java(@NonNull String javaSource, @Nullable String title) {
             return wrap("source,java", javaSource, title, Can.empty());
         }
-        
+
         public static String json(@NonNull String jsonSource, @Nullable String title) {
             return wrap("source,json", jsonSource, title, Can.empty());
         }
-        
+
         public static String yaml(@NonNull String yamlSource, @Nullable String title) {
             return wrap("source,yaml", yamlSource, title, Can.empty());
         }
-        
-//      [plantuml,c4-demo,svg]
+
+//      [plantuml,c4-demo,png]
 //      ----
 //      @startuml
 //      ...
 //      @enduml
 //      ----
         public static String plantuml(@NonNull String plantumlSource, @NonNull String diagramKey, @Nullable String title) {
-            return wrap(String.format("plantuml,%s,svg", diagramKey), plantumlSource, title, Can.of());
+            return wrap(String.format("plantuml,%s,png", diagramKey), plantumlSource, title, Can.of());
         }
-        
-        
+
+
     }
-    
+
     // -- HELPER
-    
+
     private static Column getOrCreateColumn(Table table, int colIndex) {
-        int maxIndexAvailable = table.getColumns().size() - 1; 
+        int maxIndexAvailable = table.getColumns().size() - 1;
         int colsToBeCreated = colIndex - maxIndexAvailable;
         for(int i=0; i<colsToBeCreated; ++i) {
             col(table);
         }
         return table.getColumns().get(colIndex);
     }
-    
+
     private static Row getOrCreateRow(Table table, int rowIndex) {
-        int maxIndexAvailable = table.getBody().size() - 1; 
+        int maxIndexAvailable = table.getBody().size() - 1;
         int rowsToBeCreated = rowIndex - maxIndexAvailable;
         for(int i=0; i<rowsToBeCreated; ++i) {
             row(table);
         }
         return table.getBody().get(rowIndex);
     }
-    
+
     private static Row getOrCreateHeadRow(Table table, int rowIndex) {
-        int maxIndexAvailable = table.getHeader().size() - 1; 
+        int maxIndexAvailable = table.getHeader().size() - 1;
         int rowsToBeCreated = rowIndex - maxIndexAvailable;
         for(int i=0; i<rowsToBeCreated; ++i) {
             headRow(table);
         }
         return table.getHeader().get(rowIndex);
     }
-    
+
     private static Row getOrCreateFootRow(Table table, int rowIndex) {
-        int maxIndexAvailable = table.getFooter().size() - 1; 
+        int maxIndexAvailable = table.getFooter().size() - 1;
         int rowsToBeCreated = rowIndex - maxIndexAvailable;
         for(int i=0; i<rowsToBeCreated; ++i) {
             footRow(table);
@@ -346,7 +346,7 @@ public class AsciiDocFactory {
         return admonition;
     }
 
-    
 
-    
+
+
 }


[isis] 01/04: ISIS-2444: splits tooling into two commands

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4e54b03a41d9ef0ebeb889049795b77cc858936c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 31 14:16:38 2021 +0000

    ISIS-2444: splits tooling into two commands
---
 .run/isis-tooling-cli (overview).run.xml           |  42 ++++
 .../components/docs/modules/ROOT/pages/about.adoc  |  79 +++----
 antora/components/system/antora.yml                |   4 +
 .../modules/generated/pages/system-overview.adoc   | 111 +++++++--
 antora/playbooks/site-mappings.yml                 |   2 +-
 antora/playbooks/site-tooling.yml                  |   9 +
 antora/playbooks/site.yml                          |   4 +-
 antora/supplemental-ui/css/site-custom.css         |   6 +
 core/adoc/modules/ROOT/pages/about.adoc            |  11 +-
 .../adoc/modules/config/pages/sections/Other.adoc  |  35 +++
 .../modules/config/pages/sections/isis.applib.adoc | 139 +++++-------
 .../pages/sections/isis.core.meta-model.adoc       |   2 +-
 .../isis.core.meta-model.introspector.adoc         |   4 +-
 .../sections/isis.core.meta-model.validator.adoc   |  38 +---
 .../pages/sections/isis.core.runtime-services.adoc |  29 ++-
 .../config/pages/sections/isis.extensions.adoc     |  29 ++-
 .../sections/isis.persistence.jdo-datanucleus.adoc |   4 +-
 .../isis.persistence.jdo-datanucleus.impl.adoc     |  33 +--
 .../config/pages/sections/isis.value-types.adoc    |  26 +--
 .../pages/sections/isis.viewer.restfulobjects.adoc |  24 +-
 .../config/pages/sections/isis.viewer.wicket.adoc  |  54 +++--
 .../modules/config/pages/sections/resteasy.adoc    |   2 +-
 isis-tooling.yml                                   |  85 +++++--
 .../adoc/modules/ROOT/partials/component-nav.adoc  |   8 +-
 .../adoc/antora.yml                                |   0
 .../adoc/modules/outbox-publisher/nav.adoc         |   0
 .../adoc/modules/outbox-publisher/pages/about.adoc |   0
 .../outbox-publisher/partials/module-nav.adoc      |   0
 preview.sh                                         |  13 +-
 .../regressiontests/partials/module-nav.adoc       |   2 +-
 .../{_adoc-gen-index.sh => _adoc-gen-tooling.sh}   |   7 +-
 scripts/ci/_build-site.sh                          |   9 +-
 .../adoc/modules/ROOT/partials/component-nav.adoc  |   7 +-
 .../adoc/modules/ROOT/partials/component-nav.adoc  |  12 +-
 tooling/adoc/modules/ROOT/pages/about.adoc         |  15 +-
 .../adoc/modules/ROOT/partials/component-nav.adoc  |  23 +-
 tooling/cli/adoc/antora.yml                        |   2 +-
 .../modules/tooling-cli/examples/isis-tooling.yml  |   2 +-
 .../cli/adoc/modules/tooling-cli/pages/about.adoc  |  35 +--
 .../modules/tooling-cli/partials/module-nav.adoc   |   2 +-
 .../main/java/org/apache/isis/tooling/cli/Cli.java |  69 ++++--
 .../isis/tooling/cli/CliCommandAbstract.java       |   8 +-
 .../org/apache/isis/tooling/cli/CliConfig.java     |  74 +++---
 .../cli/adocfix/OrphanedIncludeStatementFixer.java |   4 +-
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  | 247 +++++++++++++++------
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java | 136 +++++++-----
 .../isis/tooling/cli/test/CliConfigTest.java       |  15 +-
 .../apache/isis/tooling/cli/test/isis-tooling.yml  | 101 ++++++---
 48 files changed, 987 insertions(+), 576 deletions(-)

diff --git a/.run/isis-tooling-cli (overview).run.xml b/.run/isis-tooling-cli (overview).run.xml
new file mode 100644
index 0000000..4dafc48
--- /dev/null
+++ b/.run/isis-tooling-cli (overview).run.xml	
@@ -0,0 +1,42 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="isis-tooling-cli (overview)" type="Application" factoryName="Application">
+    <option name="ALTERNATIVE_JRE_PATH" value="C:\Program Files\OpenJDK\openjdk-11.0.7_10" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.tooling.cli.Cli" />
+    <module name="isis-tooling-cli" />
+    <option name="PROGRAM_PARAMETERS" value="-p . -o antora/components/system/modules/generated overview" />
+    <extension name="net.ashald.envfile">
+      <option name="IS_ENABLED" value="false" />
+      <option name="IS_SUBST" value="false" />
+      <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
+      <option name="IS_IGNORE_MISSING_FILES" value="false" />
+      <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
+      <ENTRIES>
+        <ENTRY IS_ENABLED="true" PARSER="runconfig" />
+      </ENTRIES>
+    </extension>
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+  <configuration default="false" name="isis-tooling-cli (overview)" type="Application" factoryName="Application">
+    <option name="ALTERNATIVE_JRE_PATH" value="C:\Program Files\OpenJDK\openjdk-11.0.7_10" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
+    <option name="MAIN_CLASS_NAME" value="org.apache.isis.tooling.cli.Cli" />
+    <module name="isis-tooling-cli" />
+    <option name="PROGRAM_PARAMETERS" value="-p . -o antora/components/system/modules/generated overview" />
+    <extension name="net.ashald.envfile">
+      <option name="IS_ENABLED" value="false" />
+      <option name="IS_SUBST" value="false" />
+      <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
+      <option name="IS_IGNORE_MISSING_FILES" value="false" />
+      <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
+      <ENTRIES>
+        <ENTRY IS_ENABLED="true" PARSER="runconfig" />
+      </ENTRIES>
+    </extension>
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/antora/components/docs/modules/ROOT/pages/about.adoc b/antora/components/docs/modules/ROOT/pages/about.adoc
index 139c9a5..7c30f5d 100644
--- a/antora/components/docs/modules/ROOT/pages/about.adoc
+++ b/antora/components/docs/modules/ROOT/pages/about.adoc
@@ -25,9 +25,9 @@
 _Starter Apps_
 
 * xref:docs:starters:helloworld.adoc[HelloWorld]
-(link:https://helloworld.isis.incode.work[preview])
+(link:https://helloworld.isis.incode.work[online])
 * xref:docs:starters:simpleapp.adoc[SimpleApp]
-(link:https://simpleapp.isis.incode.work[preview])
+(link:https://simpleapp.isis.incode.work[online])
 
 _POMs_
 
@@ -36,11 +36,11 @@ _POMs_
 
 |
 [discrete]
-== Demos & Tutorial
+== Demos
 
 * xref:docs:demo:about.adoc[Demo App]
-(link:https://demo-wicket.isis.incode.work[preview])
-* link:https://danhaywood.gitlab.io/isis-petclinic-tutorial-docs/petclinic/1.16.2/intro.html[Petclinic (v1.16.2)]
+(link:https://demo-wicket.isis.incode.work[online])
+//* link:https://danhaywood.gitlab.io/isis-petclinic-tutorial-docs/petclinic/1.16.2/intro.html[Petclinic (v1.16.2)]
 
 [discrete]
 == Resources
@@ -85,10 +85,6 @@ _Other_
 [discrete]
 == Components
 
-_Overview_
-
-* xref:system:generated:system-overview.adoc[System Overview]
-
 _Viewers_
 
 * xref:vw:ROOT:about.adoc[Wicket UI]
@@ -133,18 +129,26 @@ _Nightly Builds (not ASF)_
 [discrete]
 == Framework
 
+_Process_
+
 * xref:conguide:ROOT:about.adoc[Contributors' Guide]
 * xref:comguide:ROOT:about.adoc[Committers' Guide]
-* xref:core:ROOT:about.adoc[Design Docs]
-* xref:more-thanks/more-thanks.adoc[Acknowledgements]
+** xref:tooling:ROOT:about.adoc[Tooling]
 
+_Design_
 
+* xref:system:generated:system-overview.adoc[System Overview]
+* xref:core:ROOT:about.adoc[Core Framework]
 
 _Analysis_
 
 * link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
 * link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
 
+_Thanks_
+
+* xref:more-thanks/more-thanks.adoc[Acknowledgements]
+
 
 |
 [discrete]
@@ -166,38 +170,37 @@ _Academia_
 
 
 
-|
-[discrete]
-== Real-world Apps
-
-* https://github.com/estatio/estatio[Estatio]
-* https://github.com/incodehq/contactapp[ContactApp]
-* https://github.com/incodehq/ecpcrm[ECP CRM]
-
-_Example Apps_
-
-* https://github.com/apache/isis-app-todoapp[TodoApp]
-* https://github.com/isisaddons/isis-app-kitchensink[Kitchensink]
-* https://github.com/isisaddons/isis-app-quickstart[Quickstart]
-
-_Experiments_
+//|
+//[discrete]
+//== Real-world Apps
+//
+//* https://github.com/estatio/estatio[Estatio]
+//* https://github.com/incodehq/contactapp[ContactApp]
+//* https://github.com/incodehq/ecpcrm[ECP CRM]
 
-* https://github.com/isisaddons/isis-app-neoapp[Neo4J Example]
-* https://github.com/isisaddons/isis-app-simpledsl[Isis DSL Example]
+//_Example Apps_
 
+//* https://github.com/apache/isis-app-todoapp[TodoApp]
+//* https://github.com/isisaddons/isis-app-kitchensink[Kitchensink]
+//* https://github.com/isisaddons/isis-app-quickstart[Quickstart]
 
-|
-[discrete]
-== 3rd party
-
-_Restful Objects viewers_
+//_Experiments_
+//
+//* https://github.com/isisaddons/isis-app-neoapp[Neo4J Example]
+//* https://github.com/isisaddons/isis-app-simpledsl[Isis DSL Example]
 
-* link:https://github.com/sebastianslutzky/AngularViewerCLI[AngularViewer]
-* link:https://github.com/sebastianslutzky/rob[ROB]
-* link:https://github.com/joerg-rade/kroviz[Kroviz]
 
-|
-[discrete]
+//|
+//[discrete]
+//== 3rd party
+//
+//_Restful Objects viewers_
+//
+//* link:https://github.com/sebastianslutzky/AngularViewerCLI[AngularViewer]
+//* link:https://github.com/sebastianslutzky/rob[ROB]
+//
+//|
+//[discrete]
 
 
 
diff --git a/antora/components/system/antora.yml b/antora/components/system/antora.yml
index 851f1ee..6e4ac78 100644
--- a/antora/components/system/antora.yml
+++ b/antora/components/system/antora.yml
@@ -20,3 +20,7 @@ title: "System Overview"
 version: latest
 start_page: generated:system-overview.adoc
 
+nav:
+- modules/generated/nav.adoc
+
+
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 4613a68..82fbe17 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -499,7 +499,7 @@ Folder: \core\runtime
 
 _Components_
 
-* o.a.i.core.runtime.events.AppLifecycleEventService
+* o.a.i.core.runtime.events.MetamodelEventService
 * o.a.i.core.runtime.events.TransactionEventEmitter
 
 _Dependencies_
@@ -528,12 +528,11 @@ _Components_
 * o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
 * o.a.i.core.runtimeservices.email.EmailServiceDefault
 * o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring
-* o.a.i.core.runtimeservices.exceprecog.ExceptionRecognizerServiceDefault
 * o.a.i.core.runtimeservices.executor.MemberExecutorServiceDefault
 * o.a.i.core.runtimeservices.factory.FactoryServiceDefault
 * o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault
 * o.a.i.core.runtimeservices.i18n.po.TranslationServicePo
-* o.a.i.core.runtimeservices.ixn.InteractionDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.interaction.InteractionDtoServiceInternalDefault
 * o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault
 * o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault
 * o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3
@@ -543,17 +542,23 @@ _Components_
 * o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault
 * o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
 * o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
+* o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForDataAlreadyExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForObjectNotFound
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForOtherDataAccessProblem
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForRelatedDataExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForUnableToSaveData
 * o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
 * o.a.i.core.runtimeservices.routing.RoutingServiceDefault
 * o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
 * o.a.i.core.runtimeservices.session.InteractionFactoryDefault
 * o.a.i.core.runtimeservices.sudo.SudoServiceDefault
+* o.a.i.core.runtimeservices.transaction.TransactionServiceSpring
 * o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression
 * o.a.i.core.runtimeservices.user.UserServiceDefault
 * o.a.i.core.runtimeservices.userprof.UserProfileServiceDefault
 * o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault
 * o.a.i.core.runtimeservices.wrapper.WrapperFactoryDefault
-* o.a.i.core.runtimeservices.xactn.TransactionServiceSpring
 * o.a.i.core.runtimeservices.xml.XmlServiceDefault
 * o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault
 
@@ -1237,10 +1242,9 @@ _Components_
 * o.a.i.persistence.jdo.datanucleus.config.DnEntityDiscoveryListener
 * o.a.i.persistence.jdo.datanucleus.config.DnSettings
 * o.a.i.persistence.jdo.datanucleus.entities.DnEntityStateProvider
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDODataStoreException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDOObjectNotFoundException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException
+* o.a.i.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceDefault
+* o.a.i.persistence.jdo.datanucleus.metamodel.JdoDataNucleusProgrammingModel
+* o.a.i.persistence.jdo.datanucleus.schema.JdoSchemaService
 
 _Dependencies_
 
@@ -1269,12 +1273,6 @@ Folder: \persistence\jdo\integration
 ----
 |JDO Integration (powered by DataNucleus)
 
-_Components_
-
-* o.a.i.persistence.jdo.integration.jdosupport.IsisJdoSupportDN5
-* o.a.i.persistence.jdo.integration.metamodel.JdoIntegrationProgrammingModel
-* o.a.i.persistence.jdo.integration.schema.JdoSchemaService
-
 _Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
@@ -1426,6 +1424,10 @@ Folder: \persistence\jpa\metamodel
 ----
 |JPA Metamodel Facets / Programming Model
 
+_Components_
+
+* o.a.i.persistence.jpa.metamodel.JpaProgrammingModel
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -2925,12 +2927,12 @@ skinparam rectangle<<31>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<32>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<32>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3528,7 +3530,15 @@ Artifact: isis-extensions-secman-persistence-jpa
 Type: jar
 Folder: \extensions\security\secman\persistence-jpa
 ----
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository
+* o.a.i.extensions.secman.jpa.dom.role.ApplicationRoleRepository
+* o.a.i.extensions.secman.jpa.dom.tenancy.ApplicationTenancyRepository
+* o.a.i.extensions.secman.jpa.dom.user.ApplicationUserRepository
+* o.a.i.extensions.secman.jpa.seed.SeedSecurityModuleService
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
@@ -3604,12 +3614,12 @@ skinparam rectangle<<11>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<23>> {
+skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<12>> {
+skinparam rectangle<<23>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -5081,3 +5091,66 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 |===
+
+== Other
+
+[plantuml,Other,svg]
+----
+@startuml(id=Other)
+title Other - Containers
+caption Artifact Hierarchy (Maven)
+
+skinparam {
+  shadowing false
+  arrowFontSize 10
+  defaultTextAlignment center
+  wrapWidth 200
+  maxMessageSize 100
+}
+hide stereotype
+skinparam rectangle<<2>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+package "Other\n[Software System]" {
+  rectangle "==Apache Isis Starter Parent\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+}
+@enduml
+----
+.Projects/Modules (Other)
+[cols="3a,5a", options="header"]
+|===
+|Coordinates |Description 
+
+|Apache Isis Starter Parent
+[source,yaml]
+----
+Group: org.apache.isis.app
+Artifact: isis-app-starter-parent
+Type: pom
+Folder: \starters
+----
+|Parent pom providing dependency and plugin management for Apache Isis applications
+		built with Maven.  Builds on top of spring-boot-starter-parent.
+
+|Apache Isis Supplemental - Legal Info
+[source,yaml]
+----
+Group: org.apache.isis
+Artifact: supplemental-model
+Type: jar
+Folder: \supplemental-model
+----
+|For example, the templates used by many Apache distributions assemble a listing of project dependencies 
+  	according to their organization name (and URL), along with the URL each project's website. When dependency 
+  	POMs are missing this information, the dependency notice file that the Remote Resources Plugin renders can 
+  	be invalid.
+	To compensate for incomplete dependency POMs, we use the supplemental models support.
+|===
diff --git a/antora/playbooks/site-mappings.yml b/antora/playbooks/site-mappings.yml
index 3b0d2e0..7d478a9 100644
--- a/antora/playbooks/site-mappings.yml
+++ b/antora/playbooks/site-mappings.yml
@@ -44,7 +44,7 @@ content:
       start_path: mappings/minio/adoc # mappings
       branches: HEAD
     - url: .
-      start_path: mappings/publisher/adoc # mappings
+      start_path: mappings/outbox-publisher/adoc # mappings
       branches: HEAD
     - url: .
       start_path: mappings/restclient/adoc # mappings
diff --git a/antora/playbooks/site-tooling.yml b/antora/playbooks/site-tooling.yml
index 3384db2..e32af13 100644
--- a/antora/playbooks/site-tooling.yml
+++ b/antora/playbooks/site-tooling.yml
@@ -30,6 +30,15 @@ content:
     - url: .
       start_path: antora/components/comguide # comguide
       branches: HEAD
+    - url: .
+      start_path: antora/components/system # system
+      branches: HEAD
+
+# core
+    - url: .
+      start_path: core/adoc # core (design docs)
+      branches: HEAD
+
 # examples
     - url: .
       start_path: examples/demo/domain/src/main/adoc # docs
diff --git a/antora/playbooks/site.yml b/antora/playbooks/site.yml
index 67c3d45..9ecf72e 100644
--- a/antora/playbooks/site.yml
+++ b/antora/playbooks/site.yml
@@ -59,7 +59,7 @@ content:
 
 # core
     - url: .
-      start_path: core/adoc # core
+      start_path: core/adoc  # core (design docs)
       branches: HEAD
     - url: .
       start_path: core/codegen-bytebuddy/src/main/adoc # core
@@ -198,7 +198,7 @@ content:
       start_path: mappings/minio/adoc # mappings
       branches: HEAD
     - url: .
-      start_path: mappings/publisher/adoc # mappings
+      start_path: mappings/outbox-publisher/adoc # mappings
       branches: HEAD
     - url: .
       start_path: mappings/restclient/adoc # mappings
diff --git a/antora/supplemental-ui/css/site-custom.css b/antora/supplemental-ui/css/site-custom.css
index 11b8a16..362e9fb 100644
--- a/antora/supplemental-ui/css/site-custom.css
+++ b/antora/supplemental-ui/css/site-custom.css
@@ -49,3 +49,9 @@ div.paragraph code {
     padding-left: 1rem;
 }
 
+input#algolia-search-layout {
+    min-width: 23em;
+    padding: 5px;
+    border: 2px solid #87a83f;
+    border-radius: 5px;
+}
diff --git a/core/adoc/modules/ROOT/pages/about.adoc b/core/adoc/modules/ROOT/pages/about.adoc
index 06416f6..e6c0129 100644
--- a/core/adoc/modules/ROOT/pages/about.adoc
+++ b/core/adoc/modules/ROOT/pages/about.adoc
@@ -3,9 +3,12 @@
 :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 guide documents the design and implementation of the core framework.
+This section documents the design and implementation of the core framework.
 
-There is documentation for most, though not all, of the core framework.
-The ones that are missing - for example the `core/applib` module - instead contribute to the end-user documentation set.
-They will therefore be found in either the xref:userguide:ROOT:about.adoc[user guide], xref:refguide:ROOT:about.adoc[reference guide], xref:security:ROOT:about.adoc[security guide] or xref:testing:ROOT:about.adoc[testing guide].
+We also include some design documentation - where it provides useful context - in the end-user documentation set:
+
+* 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].
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
index 369e82c..8e2eded 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
@@ -19,6 +19,41 @@ isis.as-map
 | null
 
 
+|
+[[isis.persistence.jpa.additional-orm-files]]
+isis.persistence.jpa. +
+additional-orm-files
+
+| 
+| Does lookup additional "mapping-files" in META-INF/orm-_name_.xml (equivalent to "mapping-file" entries in persistence.xml) and adds these to those that are already configured the _Spring Data_ way (if any).
+
+
+|
+[[isis.persistence.jpa.auto-create-schemas]]
+isis.persistence.jpa. +
+auto-create-schemas
+
+| 
+| List of additional schemas to be auto-created.
+
+Explicitly creates given list of schemas by using the specified ``#getCreateSchemaSqlTemplate()`` to generate the actual SQL statement against the configured data-source.
+
+This configuration mechanism does not consider any schema-auto-creation configuration (if any), that independently is provided the standard JPA way.
+
+
+|
+[[isis.persistence.jpa.create-schema-sql-template]]
+isis.persistence.jpa. +
+create-schema-sql-template
+
+| 
+| SQL syntax to create a DB schema.
+
+This template is passed through schemaName) to make the actual SQL statement thats to be used against the configured data-source.
+
+Default template is \{@literal CREATE SCHEMA IF NOT EXISTS %S} with the schema name converted to upper-case.
+
+
 
 |===
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
index 9f0ea2b..e679f8a 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
@@ -6,8 +6,6 @@
 
 include::../section-hooks/isis.applib~pre.adoc[]
 
-WARNING: TODO, outdated due to changes in Nov '20 ... the table below should rather be auto-generated from IsisConfiguration's java-doc.  
-
 [cols="3a,2a,5a", options="header"]
 |===
 |Property
@@ -41,14 +39,14 @@ The CSS class for individual actions can be overridden using ``ActionLayout#cssC
 
 
 |
-[[isis.applib.annotation.action.command]]
+[[isis.applib.annotation.action.command-publishing]]
 isis.applib.annotation.action. +
-command
+command-publishing
 
 | 
-| The default for whether action invocations should be reified as a ``Command``, to be sent to any registered ``CommandServiceListener``s, either for auditing or for replayed against a secondary system, eg for regression testing.
+| TODO[2464] semantic renaming audit/dispatch -> publishing The default for whether action invocations should be reified as a ``Command``, to be sent to any registered ``CommandSubscriber``s, either for auditing or for replayed against a secondary system, eg for regression testing.
 
-This setting can be overridden on a case-by-case basis using ``Action#command()``.
+This setting can be overridden on a case-by-case basis using ``Action#commandPublishing()``.
 
 
 |
@@ -56,7 +54,7 @@ This setting can be overridden on a case-by-case basis using ``Action#command()`
 isis.applib.annotation.action. +
 domain-event.post-for-default
 
-|  true
+| 
 | Influences whether an ``ActionDomainEvent`` should be published (on the internal ``EventBusService``) whenever an action is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
@@ -69,25 +67,25 @@ The algorithm for determining whether (and what type of) an event is actually se
 
 
 |
-[[isis.applib.annotation.action.explicit]]
+[[isis.applib.annotation.action.execution-publishing]]
 isis.applib.annotation.action. +
-explicit
+execution-publishing
 
 | 
-| Whether or not a public method needs to be annotated with @``Action`` in order to be picked up as an action in the metamodel.
+| TODO[2464] semantic renaming audit/dispatch -> publishing The default for whether action invocations should be sent through to the ``ExecutionSubscriber`` for publishing.
+
+The service's publish method is called only once per transaction, with ``Execution`` collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
+
+This setting can be overridden on a case-by-case basis using ``Action#executionDispatch()``.
 
 
 |
-[[isis.applib.annotation.action.publishing]]
+[[isis.applib.annotation.action.explicit]]
 isis.applib.annotation.action. +
-publishing
+explicit
 
 | 
-| The default for whether action invocations should be sent through to the ``PublisherService`` for publishing.
-
-The service's publish method is called only once per transaction, with ``Execution`` collecting details of the identity of the target object, the action invoked, the action arguments and the returned object (if any).
-
-This setting can be overridden on a case-by-case basis using ``Action#publishing()``.
+| Whether or not a public method needs to be annotated with @``Action`` in order to be picked up as an action in the metamodel.
 
 
 |
@@ -106,7 +104,7 @@ The value of this can be overridden on a case-by-case basis using ``CollectionLa
 isis.applib.annotation. +
 collection-layout.paged
 
-|  12
+| 
 | Defines the default number of objects that are shown in a "parented" collection of a domain object, result of invoking an action.
 
 This can be overridden on a case-by-case basis using ``CollectionLayout#paged()``.
@@ -117,7 +115,7 @@ This can be overridden on a case-by-case basis using ``CollectionLayout#paged()`
 isis.applib.annotation.collection. +
 domain-event.post-for-default
 
-|  true
+| 
 | Influences whether an ``CollectionDomainEvent`` should be published (on the internal ``EventBusService``) whenever a collection is being interacted with.
 
 Up to two different events can be fired during an interaction, with the event's phase determining which (hide, disable)Subscribers can influence the behaviour at each of these phases.
@@ -191,7 +189,7 @@ The default is ``false``, because otherwise the mere presence of ``@DomainObject
 isis.applib.annotation. +
 domain-object-layout.paged
 
-|  25
+| 
 | Defines the default number of objects that are shown in a "standalone" collection obtained as the result of invoking an action.
 
 This can be overridden on a case-by-case basis using ``DomainObjectLayout#paged()``.
@@ -216,26 +214,13 @@ The default is ``false``, because otherwise the mere presence of ``@DomainObject
 
 
 |
-[[isis.applib.annotation.domain-object.auditing]]
-isis.applib.annotation. +
-domain-object.auditing
-
-| 
-| The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to the ``AuditerService``.
-
-This setting can be overridden on a case-by-case basis using ``DomainObject#auditing()`` DomainObject#getAuditing()}
-
-Note: this applies only to domain entities, not view models.
-
-
-|
 [[isis.applib.annotation.domain-object.created-lifecycle-event.post-for-default]]
 isis.applib.annotation. +
 domain-object. +
 created-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectCreatedEvent`` should be published (on the internal ``EventBusService``) whenever a domain object has been created using ``FactoryService``.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(createdLifecycleEvent=...) for the domain object in question.
@@ -257,13 +242,27 @@ This setting can be overridden on a case-by-case basis using DomainObject#getEdi
 
 
 |
+[[isis.applib.annotation.domain-object.entity-change-publishing]]
+isis.applib.annotation. +
+domain-object. +
+entity-change-publishing
+
+| 
+| TODO[2464] semantic renaming audit/dispatch -> publishing The default for whether _domain entities_ should be audited or not (meaning that any changes are sent through to ``EntityChangesSubscriber``s and sent through to ``EntityPropertyChangeSubscriber``.
+
+This setting can be overridden on a case-by-case basis using ``DomainObject#entityChangePublishing()``
+
+Note: this applies only to domain entities, not view models.
+
+
+|
 [[isis.applib.annotation.domain-object.loaded-lifecycle-event.post-for-default]]
 isis.applib.annotation. +
 domain-object. +
 loaded-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectLoadedEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ has been loaded from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(loadedLifecycleEvent=...) for the domain object in question.
@@ -282,7 +281,7 @@ domain-object. +
 persisted-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectPersistedEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistedLifecycleEvent=...) for the domain object in question.
@@ -301,7 +300,7 @@ domain-object. +
 persisting-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectPersistingEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistingLifecycleEvent=...) for the domain object in question.
@@ -314,26 +313,13 @@ Note: this applies only to domain entities, not to view models.
 
 
 |
-[[isis.applib.annotation.domain-object.publishing]]
-isis.applib.annotation. +
-domain-object.publishing
-
-| 
-| The default for whether the identities of changed objects should be sent through to the ``PublisherService`` for publishing.
-
-The service's publish method is called only once per transaction, with ``PublishedObjects`` collecting details of all changed domain objects.
-
-This setting can be overridden on a case-by-case basis using ``DomainObject#publishing()``.
-
-
-|
 [[isis.applib.annotation.domain-object.removing-lifecycle-event.post-for-default]]
 isis.applib.annotation. +
 domain-object. +
 removing-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectRemovingEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(removingLifecycleEvent=...) for the domain object in question.
@@ -354,7 +340,7 @@ domain-object. +
 updated-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectUpdatedEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ has been updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatedLifecycleEvent=...) for the domain object in question.
@@ -373,7 +359,7 @@ domain-object. +
 updating-lifecycle-event. +
 post-for-default
 
-|  true
+| 
 | Influences whether an ``ObjectUpdatingEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ is about to be updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatingLifecycleEvent=...) for the domain object in question.
@@ -412,14 +398,14 @@ If left as ``LabelPosition#NOT_SPECIFIED`` and not overridden, then the position
 
 
 |
-[[isis.applib.annotation.property.command]]
+[[isis.applib.annotation.property.command-publishing]]
 isis.applib.annotation.property. +
-command
+command-publishing
 
 | 
-| The default for whether property edits should be reified as a ``Command``, to be sent to any registered ``CommandServiceListener``s, either for auditing or for replayed against a secondary system, eg for regression testing.
+| TODO[2464] semantic renaming audit/dispatch -> publishing The default for whether property edits should be reified as a ``Command``, to be sent to any registered ``CommandSubscriber``s, either for auditing or for replayed against a secondary system, eg for regression testing.
 
-This setting can be overridden on a case-by-case basis using ``Property#command()``.
+This setting can be overridden on a case-by-case basis using ``Property#commandDispatch()``.
 
 
 |
@@ -427,7 +413,7 @@ This setting can be overridden on a case-by-case basis using ``Property#command(
 isis.applib.annotation.property. +
 domain-event.post-for-default
 
-|  true
+| 
 | Influences whether an ``PropertyDomainEvent`` should be published (on the internal ``EventBusService``) whenever an property is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
@@ -440,12 +426,12 @@ The algorithm for determining whether (and what type of) an event is actually se
 
 
 |
-[[isis.applib.annotation.property.publishing]]
+[[isis.applib.annotation.property.execution-publishing]]
 isis.applib.annotation.property. +
-publishing
+execution-publishing
 
 | 
-| The default for whether property edits should be sent through to the ``PublisherService`` for publishing.
+| TODO[2464] semantic renaming audit/dispatch -> publishing The default for whether property edits should be sent through to the ``ExecutionSubscriber`` for publishing.
 
 The service's publish method is called only once per transaction, with ``Execution`` collecting details of the identity of the target object, the property edited, and the new value of the property.
 
@@ -459,11 +445,10 @@ view-model-layout. +
 css-class-ui-event. +
 post-for-default
 
-|  true
-| Influences whether an ``CssClassUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @DomainObject(nature=VIEW_MODEL)) is about to be rendered in the UI - thereby allowing subscribers to optionally ``CssClassUiEvent#setCssClass(String)`` change) the CSS classes that are used.
+| 
+| Influences whether an ``CssClassUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``CssClassUiEvent#setCssClass(String)`` change) the CSS classes that are used.
 
-(TODO: ViewModel and ViewModelLayout have been removed) 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``DomainObjectLayout#cssClassUiEvent()`` @DomainObjectLayout(cssClassEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#cssClassUiEvent()`` @ViewModelLayout(cssClassEvent=...)} for the domain object in question:
 
 * If set to some subtype of CssClassUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of CssClassUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -476,11 +461,10 @@ isis.applib.annotation. +
 view-model-layout.icon-ui-event. +
 post-for-default
 
-|  true
-| Influences whether an ``IconUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @DomainObject(nature=VIEW_MODEL)) is about to be rendered in the UI - thereby allowing subscribers to optionally ``IconUiEvent#setIconName(String)`` change) the icon that is used.
+| 
+| Influences whether an ``IconUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``IconUiEvent#setIconName(String)`` change) the icon that is used.
 
-(TODO: ViewModel and ViewModelLayout have been removed)
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``DomainObjectLayout#iconUiEvent()`` @DomainObjectLayout(iconEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#iconUiEvent()`` @ViewModelLayout(iconEvent=...)} for the domain object in question:
 
 * If set to some subtype of IconUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of IconUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -493,13 +477,12 @@ isis.applib.annotation. +
 view-model-layout.layout-ui-event. +
 post-for-default
 
-|  true
-| Influences whether an ``LayoutUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @DomainObject(nature=VIEW_MODEL)) is about to be rendered in the UI - thereby allowing subscribers to optionally ``LayoutUiEvent#setLayout(String)`` change) the layout that is used.
+| 
+| Influences whether an ``LayoutUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``LayoutUiEvent#setLayout(String)`` change) the layout that is used.
 
-(TODO: ViewModel and ViewModelLayout have been removed)
 If a different layout value has been set, then a layout in the form ``xml`` use used (where ``zzz`` is the name of the layout).
 
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``DomainObjectLayout#layoutUiEvent()`` @DomainObjectLayout(layoutEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#layoutUiEvent()`` @ViewModelLayout(layoutEvent=...)} for the domain object in question:
 
 * If set to some subtype of LayoutUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of LayoutUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -512,11 +495,10 @@ isis.applib.annotation. +
 view-model-layout.title-ui-event. +
 post-for-default
 
-|  true
-| Influences whether an ``TitleUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @DomainObject(nature=VIEW_MODEL)) is about to be rendered in the UI - thereby allowing subscribers to optionally ``TitleUiEvent#setTitle(String)`` change) the title that is used.
+| 
+| Influences whether an ``TitleUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``TitleUiEvent#setTitle(String)`` change) the title that is used.
 
-(TODO: ViewModel and ViewModelLayout have been removed)
-The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``DomainObjectLayout#titleUiEvent()`` @DomainObjectLayout(titleEvent=...)} for the domain object in question:
+The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#titleUiEvent()`` @ViewModelLayout(titleEvent=...)} for the domain object in question:
 
 * If set to some subtype of TitleUiEvent.Noop, then _no_ event is sent.
 * If set to some subtype of TitleUiEvent.Default, then an event is sent _if and only if_ this configuration setting is set.
@@ -530,8 +512,7 @@ validation.semantic-checking. +
 enable
 
 | 
-| (TODO: ViewModel and ViewModelLayout have been removed) 
-Whether to check for inconsistencies between the usage of ``DomainObject``, ``ViewModel``, ``DomainObjectLayout`` and ``ViewModelLayout``.
+| Whether to check for inconsistencies between the usage of ``DomainObject``, ``ViewModel``, ``DomainObjectLayout`` and ``ViewModelLayout``.
 
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
index a194ad1..a2dcbfe 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.core.meta-model~pre.adoc[]
 isis.core.meta-model. +
 filter-visibility
 
-|  true
+| 
 | Whether domain objects to which the current user does not have visibility access should be rendered within collections or drop-down choices/autocompletes.
 
 One reason this filtering may be necessary is for multi-tenanted applications, whereby an end-user should only be able to "see" what data that they own. For efficiency, the application should only query for objects that the end-user owns. This configuration property acts as a safety net to prevent the end-user from viewing domain objects _even if_ those domain objects were rehydrated from the persistence store.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
index d288d75..a55b77f 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.core.meta-model.introspector~pre.adoc[]
 isis.core.meta-model.introspector. +
 lock-after-full-introspection
 
-|  true
+| 
 | If true, then no new specifications will be allowed to be loaded once introspection has been complete.
 
 Only applies if the introspector is configured to perform full introspection up-front (either because of ``IntrospectionMode#FULL`` or ``IntrospectionMode#LAZY_UNLESS_PRODUCTION`` when in production); otherwise is ignored.
@@ -49,7 +49,7 @@ For now this is _experimental_. Leave this disabled (the default).
 isis.core.meta-model.introspector. +
 validate-incrementally
 
-|  true
+| 
 | If true, then metamodel validation is performed after any new specification has been loaded (after the initial bootstrapping).
 
 This does _not_ apply if the introspector is configured to perform full introspection up-front AND when the metamodel is locked after initial bootstrapping (because in that case the lock check will simply prevent any new specs from being loaded). But it will apply otherwise.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
index 34b4a40..468b40d 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
@@ -17,7 +17,7 @@ isis.core.meta-model.validator. +
 action-collection-parameter- +
 choices
 
-|  true
+| 
 | Whether to validate that any actions that accept action parameters have either a corresponding choices or auto-complete for that action parameter, or are associated with a collection of the appropriate type.
 
 
@@ -26,7 +26,7 @@ choices
 isis.core.meta-model.validator. +
 allow-deprecated
 
-|  true
+| 
 | This setting is used to determine whether the use of such deprecated features is allowed.
 
 If not allowed, then metamodel validation errors will be flagged.
@@ -39,7 +39,7 @@ Note that this settings has no effect if the programming model has been configur
 isis.core.meta-model.validator. +
 ensure-unique-object-types
 
-|  true
+| 
 | Whether to ensure that the object type of all objects (which can be set either explicitly using ``DomainObject#objectType()`` or ``DomainService#objectType()``, or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
 
 It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see ``#isExplicitObjectType()``.
@@ -62,7 +62,7 @@ isis.core.meta-model.validator. +
 jaxb-view-model. +
 date-time-type-adapter
 
-|  true
+| 
 | If set, then ensures that for all properties of JAXB-style view models where the property's type is a date or time, then that property has been correctly annotated with @``XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
@@ -80,7 +80,7 @@ jaxb-view-model.no-arg-constructor
 isis.core.meta-model.validator. +
 jaxb-view-model.not-abstract
 
-|  true
+| 
 | If set, then ensures that all JAXB-style view models are concrete classes, not abstract.
 
 
@@ -89,7 +89,7 @@ jaxb-view-model.not-abstract
 isis.core.meta-model.validator. +
 jaxb-view-model.not-inner-class
 
-|  true
+| 
 | If set, then ensures that all JAXB-style view models are either top-level classes or nested static classes (in other words, checks that they are not anonymous, local nor nested non-static classes).
 
 
@@ -99,7 +99,7 @@ isis.core.meta-model.validator. +
 jaxb-view-model. +
 reference-type-adapter
 
-|  true
+| 
 | If set, then ensures that for all properties of JAXB-style view models where the property's type is an entity, then that entity's type has been correctly annotated with @``XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
@@ -108,7 +108,7 @@ reference-type-adapter
 isis.core.meta-model.validator. +
 jdoql.from-clause
 
-|  true
+| 
 | If set, then ensures that the 'FROM' clause within any JDOQL ``@Query``s annotations relates to a known entity type, and moreover that that type is compatible with the type on which the annotation appears: meaning its either a supertype of or the same type as the annotated type.
 
 
@@ -117,7 +117,7 @@ jdoql.from-clause
 isis.core.meta-model.validator. +
 jdoql.variables-clause
 
-|  true
+| 
 | If set, then ensures that the 'VARIABLES' clause within any JDOQL ``@Query``s relates to a known entity type.
 
 
@@ -139,28 +139,10 @@ Note that this aspect of the programming model relates to the ``hideXxx`` and ``
 isis.core.meta-model.validator. +
 parallelize
 
-|  true
+| 
 | Whether to perform metamodel validation in parallel.
 
 
-|
-[[isis.core.meta-model.validator.mixins-only]]
-isis.core.meta-model.validator. +
-mixins-only
-
-|  true
-| If set, then domain services actions are not contributed to domain objects. @deprecated - in that in the future the programming model will simply not support contributed actions from domain services.
-
-
-|
-[[isis.core.meta-model.validator.service-actions-only]]
-isis.core.meta-model.validator. +
-service-actions-only
-
-|  true
-| If set, checks that any domain services have only actions associated with them, not properties or collections. @deprecated - in that in the future the programming model will simply not search for properties or collections of domain services.
-
-
 
 |===
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
index 23be405..1451ea6 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
@@ -52,7 +52,7 @@ override.to
 isis.core.runtime-services.email. +
 port
 
-|  587
+| 
 | The port to use for sending email.
 
 
@@ -107,7 +107,7 @@ If not specified, then the sender's email address will be used instead.
 isis.core.runtime-services.email. +
 socket-connection-timeout
 
-|  2000
+| 
 | The maximum number of millseconds to wait to obtain a socket connection before timing out.
 
 
@@ -116,7 +116,7 @@ socket-connection-timeout
 isis.core.runtime-services.email. +
 socket-timeout
 
-|  2000
+| 
 | The maximum number of millseconds to wait to obtain a socket before timing out.
 
 
@@ -125,7 +125,7 @@ socket-timeout
 isis.core.runtime-services.email. +
 throw-exception-on-fail
 
-|  true
+| 
 | If an email fails to send, whether to propagate the exception (meaning that potentially the end-user might see the exception), or whether instead to just indicate failure through the return value of the method (List, List, String, String, DataSource...) that's being called.
 
 
@@ -134,17 +134,17 @@ throw-exception-on-fail
 isis.core.runtime-services.email. +
 tls.enabled
 
-|  true
+| 
 | Whether TLS encryption should be started (that is, ``STARTTLS``).
 
 
 |
-[[isis.core.runtime-services.exception-recognizer.jdo.disable]]
+[[isis.core.runtime-services.exception-recognizer.dae.disable]]
 isis.core.runtime-services. +
-exception-recognizer.jdo.disable
+exception-recognizer.dae.disable
 
 | 
-| Whether the ``ExceptionRecognizer`` implementation for JDO/DataNucleus object store - which attempts to sanitize any exceptions arising from that object store - should be disabled (meaning that exceptions will potentially propagate as more serious to the end user).
+| Whether the ``ExceptionRecognizer`` implementation for Spring's DataAccessException - which attempts to sanitize any exceptions arising from object stores - should be disabled (meaning that exceptions will potentially propagate as more serious to the end user).
 
 
 |
@@ -176,6 +176,19 @@ There are three modes:
 * The disabled performs no translation and simply returns the original string unchanged. Unlike the write mode, it does _not_ keep track of translation requests.
 
 
+|
+[[isis.core.runtime-services.translation.resource-location]]
+isis.core.runtime-services. +
+translation.resource-location
+
+| 
+| Specifies the relative resource path to look for translation files.
+
+If \{@code null} uses \{@code servletContext.getResource("/WEB-INF/")}.
+
+Replaces the former Servlet context parameter 'isis.config.dir';
+
+
 
 |===
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
index 6ec6bfe..6a0fe5a 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.extensions~pre.adoc[]
 isis.extensions.command-replay. +
 analyser.exception.enabled
 
-|  true
+| 
 | null
 
 
@@ -25,7 +25,7 @@ analyser.exception.enabled
 isis.extensions.command-replay. +
 analyser.result.enabled
 
-|  true
+| 
 | null
 
 
@@ -34,7 +34,7 @@ analyser.result.enabled
 isis.extensions.command-replay. +
 batch-size
 
-|  10
+| 
 | null
 
 
@@ -80,7 +80,7 @@ isis.extensions.command-replay. +
 quartz-replicate-and-replay-job. +
 repeat-interval
 
-|  10000
+| 
 | Number of milliseconds before running again.
 
 
@@ -90,7 +90,7 @@ isis.extensions.command-replay. +
 quartz-replicate-and-replay-job. +
 start-delay
 
-|  15000
+| 
 | Number of milliseconds before starting the job.
 
 
@@ -99,8 +99,7 @@ start-delay
 isis.extensions.command-replay. +
 quartz-session.roles
 
-|  isisModuleExtCommandReplaySecondar +
-yRole
+| 
 | null
 
 
@@ -109,8 +108,7 @@ yRole
 isis.extensions.command-replay. +
 quartz-session.user
 
-|  isisModuleExtCommandReplaySecondar +
-yUser
+| 
 | The user that runs the replay session secondary.
 
 
@@ -124,6 +122,15 @@ secondary-access.base-url-wicket
 
 
 |
+[[isis.extensions.cors.allow-credentials]]
+isis.extensions.cors. +
+allow-credentials
+
+| 
+| TODO missing java-doc
+
+
+|
 [[isis.extensions.cors.allowed-headers]]
 isis.extensions.cors. +
 allowed-headers
@@ -150,7 +157,7 @@ For more information, check the usage of the ``methods`` init parameter for http
 isis.extensions.cors. +
 allowed-origins
 
-|  *
+| 
 | Which origins are allowed to make CORS requests.
 
 The default is the wildcard ("*") but this can be made more restrictive if necessary.
@@ -163,7 +170,7 @@ For more information, check the usage of the ``origins`` init parameter for http
 isis.extensions.cors. +
 exposed-headers
 
-|  Authorization
+| 
 | Which HTTP headers are exposed in a CORS request.
 
 For more information, check the usage of the ``headers`` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
index 496e236..b5745c5 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
@@ -16,9 +16,7 @@ include::../section-hooks/isis.persistence.jdo-datanucleus~pre.adoc[]
 isis.persistence.jdo-datanucleus. +
 class-metadata-loaded-listener
 
-|  org.apache.isis.persistence.jdo. +
-datanucleus5.datanucleus. +
-CreateSchemaObjectFromClassMetadata
+| 
 | null
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
index 986e28a..307b8d7 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
@@ -65,7 +65,7 @@ impl.datanucleus.cache.level2.mode
 isis.persistence.jdo-datanucleus. +
 impl.datanucleus.cache.level2.type
 
-|  none
+| 
 | Name of the type of Level 2 Cache to use.
 
 Can be used to interface with external caching products. Use "none" to turn off L2 caching.
@@ -131,36 +131,12 @@ impl.datanucleus.identifier.case
 
 
 |
-[[isis.persistence.jdo-datanucleus.impl.datanucleus.object-provider.class-name]]
-isis.persistence.jdo-datanucleus. +
-impl.datanucleus.object-provider. +
-class-name
-
-|  org.apache.isis.persistence.jdo. +
-datanucleus5.datanucleus. +
-JDOStateManagerForIsis
-| Enables dependency injection into entities
-
-See also ``json`` (camelCasing instead of kebab-casing).
-
-
-|
-[[isis.persistence.jdo-datanucleus.impl.datanucleus.objectProvider.className]]
-isis.persistence.jdo-datanucleus. +
-impl.datanucleus.objectProvider. +
-className
-
-| 
-| null
-
-
-|
 [[isis.persistence.jdo-datanucleus.impl.datanucleus.persistence-unit-load-classes]]
 isis.persistence.jdo-datanucleus. +
 impl.datanucleus. +
 persistence-unit-load-classes
 
-|  true
+| 
 | Used when we have specified the persistence-unit name for a PMF/EMF and where we want the datastore "tables" for all classes of that persistence-unit loading up into the StoreManager.
 
 Defaults to true, which is the opposite of DataNucleus' own default. (The reason that DN defaults to false is because some databases are slow so such an operation would slow down the startup process).
@@ -236,7 +212,7 @@ isis.persistence.jdo-datanucleus. +
 impl.datanucleus.schema. +
 validate-all
 
-|  true
+| 
 | See also ``json`` (camelCasing instead of kebab-casing).
 
 NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
@@ -399,8 +375,7 @@ isis.persistence.jdo-datanucleus. +
 impl.javax.jdo. +
 persistence-manager-factory-class
 
-|  org.datanucleus.api.jdo. +
-JDOPersistenceManagerFactory
+| 
 | See also ``json`` (camelCasing instead of kebab-casing).
 
 NOTE: changing this property from its default is used to enable the flyway extension (in combination with ``Schema#isAutoCreateAll()``
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
index a026acc..6bc178e 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
@@ -88,7 +88,7 @@ big-integer.format
 isis.value-types.java-sql.date. +
 format
 
-|  medium
+| 
 | Configures the formats understood by ``JavaSqlDateValueSemanticsProvider``. @deprecated
 
 
@@ -97,7 +97,7 @@ format
 isis.value-types.java-sql.time. +
 format
 
-|  short
+| 
 | Configures the formats understood by ``JavaSqlTimeValueSemanticsProvider``. @deprecated
 
 
@@ -106,7 +106,7 @@ format
 isis.value-types.java-sql. +
 timestamp.format
 
-|  short
+| 
 | Configures the formats understood by ``JavaSqlTimeStampValueSemanticsProvider``. @deprecated
 
 
@@ -115,7 +115,7 @@ timestamp.format
 isis.value-types.java-time. +
 local-date-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``LocalDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -124,7 +124,7 @@ local-date-time.format
 isis.value-types.java-time. +
 local-date.format
 
-|  medium
+| 
 | Configures the formats understood by ``LocalDateValueSemanticsProvider``. @deprecated
 
 
@@ -133,7 +133,7 @@ local-date.format
 isis.value-types.java-time. +
 local-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``LocalTimeValueSemanticsProvider``. @deprecated
 
 
@@ -142,7 +142,7 @@ local-time.format
 isis.value-types.java-time. +
 offset-date-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``OffsetDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -151,7 +151,7 @@ offset-date-time.format
 isis.value-types.java-time. +
 offset-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``OffsetTimeValueSemanticsProvider``. @deprecated
 
 
@@ -160,7 +160,7 @@ offset-time.format
 isis.value-types.java-time. +
 zoned-date-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``ZonedDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -169,7 +169,7 @@ zoned-date-time.format
 isis.value-types.java-util.date. +
 format
 
-|  medium
+| 
 | Configures the formats understood by ``JavaUtilDateValueSemanticsProvider``. @deprecated
 
 
@@ -178,7 +178,7 @@ format
 isis.value-types.joda.date-time. +
 format
 
-|  medium
+| 
 | Configures the formats understood by ``JodaDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -187,7 +187,7 @@ format
 isis.value-types.joda. +
 local-date-time.format
 
-|  medium
+| 
 | Configures the formats understood by ``JodaLocalDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -196,7 +196,7 @@ local-date-time.format
 isis.value-types.joda.local-date. +
 format
 
-|  medium
+| 
 | Configures the formats understood by ``JodaLocalDateValueSemanticsProvider``. @deprecated
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.restfulobjects.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.restfulobjects.adoc
index 4754fd6..b0933aa 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.restfulobjects.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.restfulobjects.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.viewer.restfulobjects~pre.adoc[]
 isis.viewer.restfulobjects. +
 base-uri
 
-|
+| 
 | If left unset (the default), then the RO viewer will use the ``UriInfo`` (injected using ``Context``) to figure out the base Uri (used to render ``href``s).
 
 This will be correct much of the time, but will almost certainly be wrong if there is a reverse proxy.
@@ -29,7 +29,7 @@ If set, eg ``com/``, then this value will be used instead.
 isis.viewer.restfulobjects. +
 honor-ui-hints
 
-|
+| 
 | Whether to enable the ``x-ro-follow-links`` support, to minimize round trips.
 
 The RO viewer provides the capability for the client to set the optional ``x-ro-follow-links`` query parameter, as described in section 34.4 of the RO spec v1.0. If used, the resultant representation includes the result of following the associated link, but through a server-side "join", somewhat akin to GraphQL.
@@ -42,7 +42,7 @@ By default this functionality is disabled, this configuration property enables t
 isis.viewer.restfulobjects. +
 object-property-values-only
 
-|
+| 
 | When rendering domain objects, if set the representation returned is stripped back to a minimal set, excluding links to actions and collections and with a simplified representation of an object's properties.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
@@ -53,7 +53,7 @@ This is disabled by default. If enabled, then the representations returned are n
 isis.viewer.restfulobjects. +
 strict-accept-checking
 
-|
+| 
 | If set, then any unrecognised ``Accept`` headers will result in an HTTP _Not Acceptable_ response code (406).
 
 
@@ -62,7 +62,7 @@ strict-accept-checking
 isis.viewer.restfulobjects. +
 suppress-described-by-links
 
-|
+| 
 | If set, then the representations returned will omit any links to the formal domain-type representations.
 
 
@@ -71,7 +71,7 @@ suppress-described-by-links
 isis.viewer.restfulobjects. +
 suppress-member-disabled-reason
 
-|
+| 
 | If set, then - should there be an interaction with an action, property or collection that is disabled - then this will prevent the ``disabledReason`` reason from being added to the returned representation.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
@@ -82,7 +82,7 @@ This is disabled by default. If enabled, then the representations returned are n
 isis.viewer.restfulobjects. +
 suppress-member-extensions
 
-|
+| 
 | If set, then the ``x-isis-format`` key (under ``extensions``) for properties will be suppressed.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
@@ -93,8 +93,8 @@ This is disabled by default. If enabled, then the representations returned are n
 isis.viewer.restfulobjects. +
 suppress-member-id
 
-|
-| If set, then the ``id`` key for all pathsToInclude will be suppressed.
+| 
+| If set, then the ``id`` key for all members will be suppressed.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
 
@@ -104,8 +104,8 @@ This is disabled by default. If enabled, then the representations returned are n
 isis.viewer.restfulobjects. +
 suppress-member-links
 
-|
-| If set, then the detail link (in other words ``]``) for all pathsToInclude will be suppressed.
+| 
+| If set, then the detail link (in other words ``]``) for all members will be suppressed.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
 
@@ -115,7 +115,7 @@ This is disabled by default. If enabled, then the representations returned are n
 isis.viewer.restfulobjects. +
 suppress-update-link
 
-|
+| 
 | If set, then the update link (in other words `` ]`` to perform a bulk update of an object) will be suppressed.
 
 This is disabled by default. If enabled, then the representations returned are non-standard with respect to the RO Spec v1.0.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
index bd7ce2a..69b0e77 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
@@ -23,9 +23,7 @@ isis.viewer.wicket.ajax-debug-mode
 [[isis.viewer.wicket.app]]
 isis.viewer.wicket.app
 
-|  org.apache.isis.viewer.wicket. +
-viewer.wicketapp. +
-IsisWicketApplication
+| 
 | Specifies the subclass of ``IsisWicketApplication`` that is used to bootstrap Wicket.
 
 There is usually very little reason to change this from its default.
@@ -107,7 +105,7 @@ A typical value is ``js``. This will result in this file being read from the ``s
 isis.viewer.wicket.application. +
 menubars-layout-xml
 
-|  menubars.layout.xml
+| 
 | Specifies the file name containing the menubars.
 
 This is expected to be a local resource.
@@ -118,7 +116,7 @@ This is expected to be a local resource.
 isis.viewer.wicket.application. +
 name
 
-|  Apache Isis â„¢
+| 
 | Identifies the application on the sign-in page (unless a sign-in image is configured) and on top-left in the header (unless a header image is configured).
 
 
@@ -137,7 +135,7 @@ If present, then this will be shown in the footer on every page as well as on th
 [[isis.viewer.wicket.base-path]]
 isis.viewer.wicket.base-path
 
-|  /wicket/
+| 
 | The base path at which the Wicket viewer is mounted.
 
 
@@ -146,7 +144,7 @@ isis.viewer.wicket.base-path
 isis.viewer.wicket. +
 bookmarked-pages.max-size
 
-|  15
+| 
 | Specifies the maximum number of bookmarks to show.
 
 These are aged out on an MRU-LRU basis.
@@ -157,7 +155,7 @@ These are aged out on an MRU-LRU basis.
 isis.viewer.wicket. +
 bookmarked-pages.show-chooser
 
-|  true
+| 
 | Whether the panel providing linsk to previously visited object should be accessible from the top-left of the header.
 
 
@@ -167,7 +165,7 @@ isis.viewer.wicket. +
 bookmarked-pages. +
 show-drop-down-on-footer
 
-|  true
+| 
 | Whether the drop-down list of previously visited objects should be shown in the footer.
 
 
@@ -176,7 +174,7 @@ show-drop-down-on-footer
 isis.viewer.wicket.breadcrumbs. +
 enabled
 
-|  true
+| 
 | Whether to enable the 'where am i' feature, in other words the breadcrumbs.
 
 
@@ -185,7 +183,7 @@ enabled
 isis.viewer.wicket.breadcrumbs. +
 max-parent-chain-length
 
-|  64
+| 
 | null
 
 
@@ -216,7 +214,7 @@ NOTE: For further discussion, see for example https://stackoverflow.com/question
 [[isis.viewer.wicket.date-pattern]]
 isis.viewer.wicket.date-pattern
 
-|  dd-MM-yyyy
+| 
 | The pattern used for rendering and parsing dates.
 
 Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
@@ -227,7 +225,7 @@ Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()
 isis.viewer.wicket.date-picker. +
 max-date
 
-|  2100-01-01T00:00:00.000Z
+| 
 | Defines the first date available in the date picker.
 
 As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
@@ -238,7 +236,7 @@ As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in I
 isis.viewer.wicket.date-picker. +
 min-date
 
-|  1900-01-01T00:00:00.000Z
+| 
 | Defines the first date available in the date picker.
 
 As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
@@ -249,7 +247,7 @@ As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in I
 isis.viewer.wicket. +
 date-time-pattern
 
-|  dd-MM-yyyy HH:mm
+| 
 | The pattern used for rendering and parsing date/times.
 
 Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
@@ -322,7 +320,7 @@ tables
 isis.viewer.wicket. +
 max-title-length-in-tables
 
-|  12
+| 
 | The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either ``#getMaxTitleLengthInParentedTables()`` or ``#getMaxTitleLengthInStandaloneTables()``.
 
 If truncated, then the remainder of the title will be replaced with ellipses (...).
@@ -334,7 +332,7 @@ isis.viewer.wicket. +
 prevent-double-click-for-form- +
 submit
 
-|  true
+| 
 | Whether to disable a form submit button after it has been clicked, to prevent users causing an error if they do a double click. This behaviour is enabled by default, but can be disabled using this flag.
 
 
@@ -344,7 +342,7 @@ isis.viewer.wicket. +
 prevent-double-click-for-no-arg- +
 action
 
-|  true
+| 
 | Whether to disable a no-arg action button after it has been clicked, to prevent users causing an error if they do a double click.
 
 This behaviour is enabled by default, but can be disabled using this flag.
@@ -378,7 +376,7 @@ This behaviour is disabled by default; the viewer will update the existing page
 isis.viewer.wicket.remember-me. +
 cookie-key
 
-|  isisWicketRememberMe
+| 
 | If the "remember me" feature is available, specifies the key to hold the encrypted credentials in the cookie.
 
 
@@ -414,7 +412,7 @@ isis.viewer.wicket. +
 replace-disabled-tag-with-readonly- +
 tag
 
-|  true
+| 
 | In Firefox and more recent versions of Chrome 54+, cannot copy out of disabled fields; instead we use the readonly attribute (https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute)
 
 This behaviour is enabled by default but can be disabled using this flag
@@ -424,7 +422,7 @@ This behaviour is enabled by default but can be disabled using this flag
 [[isis.viewer.wicket.show-footer]]
 isis.viewer.wicket.show-footer
 
-|  true
+| 
 | Whether to show the footer menu bar.
 
 This is enabled by default.
@@ -435,7 +433,7 @@ This is enabled by default.
 isis.viewer.wicket. +
 strip-wicket-tags
 
-|  true
+| 
 | Whether Wicket tags should be stripped from the markup.
 
 By default this is enabled, in other words Wicket tags are stripped. Please be aware that if tags are _not_ stripped, then this may break CSS rules on some browsers.
@@ -475,7 +473,7 @@ isis.viewer.wicket.themes.enabled
 [[isis.viewer.wicket.themes.initial]]
 isis.viewer.wicket.themes.initial
 
-|  Flatly
+| 
 | The initial theme to use.
 
 Expected to be in the list of ``#getEnabled()`` themes.
@@ -485,9 +483,7 @@ Expected to be in the list of ``#getEnabled()`` themes.
 [[isis.viewer.wicket.themes.provider]]
 isis.viewer.wicket.themes.provider
 
-|  org.apache.isis.viewer.wicket.ui. +
-components.widgets.themepicker. +
-IsisWicketThemeSupportDefault
+| 
 | Specifies an implementation of ``IsisWicketThemeSupport``
 
 
@@ -505,7 +501,7 @@ show-chooser
 isis.viewer.wicket. +
 use-indicator-for-form-submit
 
-|  true
+| 
 | Whether to show an indicator for a form submit button that it has been clicked.
 
 This behaviour is enabled by default.
@@ -516,7 +512,7 @@ This behaviour is enabled by default.
 isis.viewer.wicket. +
 use-indicator-for-no-arg-action
 
-|  true
+| 
 | Whether to show an indicator for a no-arg action button that it has been clicked.
 
 This behaviour is enabled by default.
@@ -546,7 +542,7 @@ This behaviour is disabled by default. Please be aware that enabloing it can sub
 isis.viewer.wicket. +
 timestamp-pattern
 
-|  yyyy-MM-dd HH:mm:ss.SSS
+| 
 | @deprecated - seemingly unused
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc b/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
index 984e90f..9526703 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
@@ -48,7 +48,7 @@ resteasy.jaxrs.app.registration
 [[resteasy.jaxrs.default-path]]
 resteasy.jaxrs.default-path
 
-|  /restful
+| 
 | The path at which the RO viewer should be mounted.
 
 Note that this is used rather than ``prefix`` because there is _NO_ implementation of ``Application``, so we rely on it being automatically created.
diff --git a/isis-tooling.yml b/isis-tooling.yml
index 57d0451..77fba0f 100644
--- a/isis-tooling.yml
+++ b/isis-tooling.yml
@@ -17,35 +17,84 @@
 #  under the License.
 #
 
-projectDoc:
-  description: "These tables summarize all Maven artifacts available with _Apache Isis_."
-  fixOrphanedAdocIncludeStatements: true
+global:
   namespacePartsSkipCount: 3
-  artifactGroups:
-    Base: org.apache.isis
+
+  sections:
+    App: org.apache.isis.app.*
+    Mavendeps: org.apache.isis.mavendeps.*
+    Testing: org.apache.isis.testing.*
+    Examples: org.apache.isis.examples.*
+
+    Root: org.apache.isis
     Commons: org.apache.isis.commons.*
+
     Core: org.apache.isis.core.*
-    App: org.apache.isis.app.*
 
-    Mavendeps: org.apache.isis.mavendeps.*
-    Mappings: org.apache.isis.mappings.*
+    Persistence: org.apache.isis.persistence
+    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+
+    Security: org.apache.isis.security
+    Bypass: "org.apache.isis.security:isis-security-bypass.*"
+    Keycloak: "org.apache.isis.security:isis-security-keycloak.*"
+    Shiro: "org.apache.isis.security:isis-security-shiro.*"
 
-    Persistence: org.apache.isis.persistence.*
-    Security: org.apache.isis.security.*
+    Viewer: org.apache.isis.viewer
+    "Restful Objects": "org.apache.isis.viewer:isis-viewer-restfulobjects.*"
+    Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
 
     Valuetypes: org.apache.isis.valuetypes.*
-    Viewer: org.apache.isis.viewer.*
 
-    Testing: org.apache.isis.testing.*
-    Regression Tests: org.apache.isis.regressiontests.*
+    Mappings: org.apache.isis.mappings
+    #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
+    "JAX-RS Client Library": "org.apache.isis.mappings:isis-mappings-jaxrsclient.*"
+    #Minio: "org.apache.isis.mappings:isis-mappings-minio.*"
+    "REST Client": "org.apache.isis.mappings:isis-mappings-restclient.*"
+    #"Slack Library": "org.apache.isis.mappings:isis-mappings-slack.*"
 
-    Extensions: org.apache.isis.extensions.*
-    Subdomains: org.apache.isis.subdomains.*
+    Extensions: org.apache.isis.extensions
+    "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
+    "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
+    "Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
+    "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
+    "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
+    #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
+    "Security: Secman": "org.apache.isis.security:isis-extensions-secman.*"
+    #"Security: Session Log": "org.apache.isis.security:isis-extensions-session-log.*"
+    "Security: Shiro LDAP Realm": "org.apache.isis.security:isis-extensions-shiro-realm-ldap.*"
+    "RO Viewer: CORS": "org.apache.isis.security:isis-extensions-cors.*"
+    "Wicket Viewer: Excel Download": "org.apache.isis.security:isis-extensions-exceldownload.*"
+    "Wicket Viewer: Full Calendar": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+    #"Wicket Viewer: Gmap3": "org.apache.isis.security:isis-extensions-gmap3.*"
+    "Wicket Viewer: Pdf.js": "org.apache.isis.security:isis-extensions-fullcalendar.*"
 
-    Tooling: org.apache.isis.tooling.*
+    Subdomains: org.apache.isis.subdomains
+    "Base": "org.apache.isis.subdomains:isis-subdomains-base.*"
+    #"docx": "org.apache.isis.subdomains:isis-subdomains-docx.*"
+    "Excel": "org.apache.isis.subdomains:isis-subdomains-excel.*"
+    #"Freemarker": "org.apache.isis.subdomains:isis-subdomains-freemarker.*"
+    #"OGNL": "org.apache.isis.subdomains:isis-subdomains-ognl.*"
+    #"PDF Box": "org.apache.isis.subdomains:isis-subdomains-pdfbox.*"
+    "Spring": "org.apache.isis.subdomains:isis-subdomains-spring.*"
+    "XDocReport": "org.apache.isis.subdomains:isis-subdomains-xdocreport.*"
+    #"Zip": "org.apache.isis.subdomains:isis-subdomains-zip.*"
 
-    Examples: org.apache.isis.examples.*
+    "Tooling": org.apache.isis.tooling.*
+    "Regression Tests": org.apache.isis.regressiontests.*
+
+    Incubator: org.apache.isis.incubator
+    "Kroviz Client": "org.apache.isis.incubator.clients:isis-client-kroviz.*"
+    "JavaFX Viewer": "org.apache.isis.incubator.viewer:isis-viewer-javafx.*"
+    "Vaadin Viewer": "org.apache.isis.incubator.viewer:isis-viewer-vaadin.*"
 
-    Incubator: org.apache.isis.incubator.*
     Legacy: org.apache.isis.legacy.*
 
+
+commands:
+  overview:
+    description: "These tables summarize all Maven artifacts available with _Apache Isis_."
+
+  index:
+    fixOrphanedAdocIncludeStatements: true
+
diff --git a/mappings/adoc/modules/ROOT/partials/component-nav.adoc b/mappings/adoc/modules/ROOT/partials/component-nav.adoc
index bdbfece..666b9ae 100644
--- a/mappings/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/mappings/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,7 +1,9 @@
 include::mappings:ROOT:partial$module-nav.adoc[]
 
-include::outbox-publisher:partial$module-nav.adoc[]
+// commented out the libraries that have not yet been brought over from incode-platform
+
+//include::outbox-publisher:partial$module-nav.adoc[]
 include::mappings:jaxrsclient:partial$module-nav.adoc[]
-include::mappings:minio:partial$module-nav.adoc[]
+//include::mappings:minio:partial$module-nav.adoc[]
 include::mappings:restclient:partial$module-nav.adoc[]
-include::mappings:slack:partial$module-nav.adoc[]
+//include::mappings:slack:partial$module-nav.adoc[]
diff --git a/mappings/publisher/adoc/antora.yml b/mappings/outbox-publisher/adoc/antora.yml
similarity index 100%
rename from mappings/publisher/adoc/antora.yml
rename to mappings/outbox-publisher/adoc/antora.yml
diff --git a/mappings/publisher/adoc/modules/outbox-publisher/nav.adoc b/mappings/outbox-publisher/adoc/modules/outbox-publisher/nav.adoc
similarity index 100%
rename from mappings/publisher/adoc/modules/outbox-publisher/nav.adoc
rename to mappings/outbox-publisher/adoc/modules/outbox-publisher/nav.adoc
diff --git a/mappings/publisher/adoc/modules/outbox-publisher/pages/about.adoc b/mappings/outbox-publisher/adoc/modules/outbox-publisher/pages/about.adoc
similarity index 100%
rename from mappings/publisher/adoc/modules/outbox-publisher/pages/about.adoc
rename to mappings/outbox-publisher/adoc/modules/outbox-publisher/pages/about.adoc
diff --git a/mappings/publisher/adoc/modules/outbox-publisher/partials/module-nav.adoc b/mappings/outbox-publisher/adoc/modules/outbox-publisher/partials/module-nav.adoc
similarity index 100%
rename from mappings/publisher/adoc/modules/outbox-publisher/partials/module-nav.adoc
rename to mappings/outbox-publisher/adoc/modules/outbox-publisher/partials/module-nav.adoc
diff --git a/preview.sh b/preview.sh
index 2a1b005..374bea9 100644
--- a/preview.sh
+++ b/preview.sh
@@ -14,13 +14,15 @@ export SKIP_INDEX_GENERATION=true
 
 PLAYBOOK_FILE=antora/playbooks/site.yml
 
-while getopts 'ECIAKSeciaksxyhf:' opt
+while getopts 'ECWIAKSecwiaksxyhf:' opt
 do
   case $opt in
     E) export SKIP_EXAMPLES=false
        forcing=true ;;
     C) export SKIP_CONFIGS=false
        forcing=true ;;
+    W) export SKIP_OVERVIEW_GENERATION=false
+       forcing=true ;;
     I) export SKIP_INDEX_GENERATION=false
        forcing=true ;;
     A) export SKIP_ANTORA_GENERATION=false
@@ -34,6 +36,7 @@ do
 
     e) export SKIP_EXAMPLES=true ;;
     c) export SKIP_CONFIGS=true ;;
+    w) export SKIP_OVERVIEW_GENERATION=true ;;
     i) export SKIP_INDEX_GENERATION=true ;;
     a) export SKIP_ANTORA_GENERATION=true
        export SKIP_CLEAR_CACHE=true
@@ -52,6 +55,7 @@ do
        echo "  -e skip examples"
        echo "  -k skip stale example check"
        echo "  -c skip config doc generation"
+       echo "  -w skip system overview generation"
        echo "  -i skip index generation"
        echo "  -a skip Antora generation"
        echo "  -s skip serving generated site"
@@ -60,6 +64,7 @@ do
        echo "  -E force examples"
        echo "  -K force stale example check"
        echo "  -C force config doc generation"
+       echo "  -W force system overview generation"
        echo "  -I force index generation"
        echo "  -A force Antora generation"
        echo "  -S force serving generated site"
@@ -80,6 +85,9 @@ if [ "$forcing" = "true" ]; then
     if [ -z "$SKIP_CONFIGS" ]; then
       export SKIP_CONFIGS=true
     fi
+    if [ -z "$SKIP_OVERVIEW_GENERATION" ]; then
+      export SKIP_OVERVIEW_GENERATION=true
+    fi
     if [ -z "$SKIP_INDEX_GENERATION" ]; then
       export SKIP_INDEX_GENERATION=true
     fi
@@ -99,6 +107,7 @@ fi
 echo ""
 echo "SKIP_EXAMPLES              : $SKIP_EXAMPLES"
 echo "SKIP_STALE_EXAMPLE_CHECK   : $SKIP_STALE_EXAMPLE_CHECK"
+echo "SKIP_OVERVIEW_GENERATION   : $SKIP_OVERVIEW_GENERATION"
 echo "SKIP_INDEX_GENERATION      : $SKIP_INDEX_GENERATION"
 echo "SKIP_CONFIGS               : $SKIP_CONFIGS"
 echo "SKIP_ANTORA_GENERATION     : $SKIP_ANTORA_GENERATION"
@@ -135,7 +144,7 @@ if [[ "$SKIP_SERVE" == "true" ]]; then
   echo "skipping serving"
 else
   echo ""
-  echo "http://localhost:5000"
+  echo "http://localhost:5000/docs/latest/about.html"
   echo ""
 
   serve -S -p 5000 $ANTORA_TARGET_SITE
diff --git a/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc b/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc
index eaf53ea..2d1ef6f 100644
--- a/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc
+++ b/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc
@@ -1,4 +1,4 @@
 
-* xref:regressiontests:about.adoc[Regression Rests]
+* xref:regressiontests:about.adoc[Regression Tests]
 
 
diff --git a/scripts/ci/_adoc-gen-index.sh b/scripts/ci/_adoc-gen-tooling.sh
similarity index 85%
rename from scripts/ci/_adoc-gen-index.sh
rename to scripts/ci/_adoc-gen-tooling.sh
index 6b52515..d128117 100644
--- a/scripts/ci/_adoc-gen-index.sh
+++ b/scripts/ci/_adoc-gen-tooling.sh
@@ -34,10 +34,11 @@ if [ -z "$REVISION" ]; then
 fi
 
 
+MODE=$1
 
 
 ##
-## run groovy
+## run java
 ##
 JAVA_CMD=$(command -v java)
 
@@ -47,9 +48,9 @@ echo ""
 
 # for now meant to run with nightly builds only
 if [ -z "${JAVA_CMD}" ]; then
-  echo "doc gen: no java, skipping"
+  echo "tooling gen: no java, skipping"
 else
-  java $PROJECT_ROOT_PATH/tooling/cli/target/isis-tooling-cli.jar -p $PROJECT_ROOT_PATH projdoc -o $PROJECT_ROOT_PATH/antora/components/system/modules/generated
+  java -jar "${PROJECT_ROOT_PATH}/tooling/cli/target/isis-tooling-cli.jar" -p "${PROJECT_ROOT_PATH}" -o "${PROJECT_ROOT_PATH}/antora/components/system/modules/generated" $MODE
 fi
 
 
diff --git a/scripts/ci/_build-site.sh b/scripts/ci/_build-site.sh
index ac10e29..6412864 100644
--- a/scripts/ci/_build-site.sh
+++ b/scripts/ci/_build-site.sh
@@ -40,10 +40,17 @@ else
 fi
 
 
+if [[ "$SKIP_OVERVIEW_GENERATION" == "true" ]]; then
+  echo "skipping overview generation"
+else
+  bash $SCRIPT_DIR/_adoc-gen-tooling.sh overview
+fi
+
+
 if [[ "$SKIP_INDEX_GENERATION" == "true" ]]; then
   echo "skipping index generation"
 else
-  bash $SCRIPT_DIR/_adoc-gen-index.sh
+  bash $SCRIPT_DIR/_adoc-gen-tooling.sh index
 fi
 
 
diff --git a/security/adoc/modules/ROOT/partials/component-nav.adoc b/security/adoc/modules/ROOT/partials/component-nav.adoc
index e3d48c8..80307c6 100644
--- a/security/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/security/adoc/modules/ROOT/partials/component-nav.adoc
@@ -8,7 +8,10 @@ include::security:keycloak:partial$module-nav.adoc[]
 include::security:ROOT:partial$module-nav-end.adoc[]
 
 * Extensions
-include::security:audit-trail:partial$module-nav.adoc[]
+
+// commented out the libraries that have not yet been brought over from incode-platform
+
+//include::security:audit-trail:partial$module-nav.adoc[]
 include::security:shiro-realm-ldap:partial$module-nav.adoc[]
 include::security:secman:partial$module-nav.adoc[]
-include::security:session-log:partial$module-nav.adoc[]
+//include::security:session-log:partial$module-nav.adoc[]
diff --git a/subdomains/adoc/modules/ROOT/partials/component-nav.adoc b/subdomains/adoc/modules/ROOT/partials/component-nav.adoc
index a98ab5d..5fd1e23 100644
--- a/subdomains/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/subdomains/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,12 +1,14 @@
 include::subdomains:ROOT:partial$module-nav.adoc[]
 
+// commented out the libraries that have not yet been brought over from incode-platform
+
 include::subdomains:base:partial$module-nav.adoc[]
-include::subdomains:docx:partial$module-nav.adoc[]
+//include::subdomains:docx:partial$module-nav.adoc[]
 include::subdomains:excel:partial$module-nav.adoc[]
-include::subdomains:freemarker:partial$module-nav.adoc[]
+//include::subdomains:freemarker:partial$module-nav.adoc[]
+//include::subdomains:ognl:partial$module-nav.adoc[]
+//include::subdomains:pdfbox:partial$module-nav.adoc[]
 include::subdomains:spring:partial$module-nav.adoc[]
-include::subdomains:ognl:partial$module-nav.adoc[]
-include::subdomains:pdfbox:partial$module-nav.adoc[]
 include::subdomains:xdocreport:partial$module-nav.adoc[]
-include::subdomains:zip:partial$module-nav.adoc[]
+//include::subdomains:zip:partial$module-nav.adoc[]
 
diff --git a/tooling/adoc/modules/ROOT/pages/about.adoc b/tooling/adoc/modules/ROOT/pages/about.adoc
index 049b713..7147eaa 100644
--- a/tooling/adoc/modules/ROOT/pages/about.adoc
+++ b/tooling/adoc/modules/ROOT/pages/about.adoc
@@ -1,18 +1,11 @@
-= Extensions Catalog
+= Tooling
 
 
 :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 catalog lists a number of extensions to the framework.
-These typically are for use directly within by the domain application itself.
+This chapter describes the command line tooling used to automatically generate documentation from the program sources (eg `.java` source code and Maven `pom.xml` project files).
 
-For convenience, some of the extensions catalogued here are incorporated in other guides:
+The tooling itself is accessed through a xref:tooling:tooling-cli:about.adoc[command line interface (CLI)] tool.
 
-* in the xref:security:ROOT:about.adoc[security] guide, and the xref:vw:ROOT:about.adoc[wicket viewer] guide).
-+
-These extensions extend the capability of those components, or provide alternative implementations
-
-* in the xref:testing:ROOT:about.adoc[testing] guide
-+
-The extensions here _are_ for use by the domain application, but only for testing or prototyping (eg fixtures) rather than in the business logic itself.
+The tools are used both during the xref:comguide:ROOT:cutting-a-release.adoc[release process] and on an adhoc basis.
diff --git a/tooling/adoc/modules/ROOT/partials/component-nav.adoc b/tooling/adoc/modules/ROOT/partials/component-nav.adoc
index bcba06e..ab1fd97 100644
--- a/tooling/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/tooling/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,24 +1,3 @@
 include::tooling:ROOT:partial$module-nav.adoc[]
 
-* CLI
-
-include::security:session-log:partial$module-nav.adoc[]
-include::extensions:command-log:partial$module-nav.adoc[]
-include::extensions:command-replay:partial$module-nav.adoc[]
-include::userguide:flyway:partial$module-nav.adoc[]
-include::extensions:model-annotation:partial$module-nav.adoc[]
-
-* Security
-include::security:shiro-realm-ldap:partial$module-nav.adoc[]
-include::security:secman:partial$module-nav.adoc[]
-
-* Restful Objects Viewer
-
-include::vro:cors:partial$module-nav.adoc[]
-
-* Wicket Viewer
-
-include::vw:exceldownload:partial$module-nav.adoc[]
-include::vw:fullcalendar:partial$module-nav.adoc[]
-include::vw:gmap3:partial$module-nav.adoc[]
-include::vw:pdfjs:partial$module-nav.adoc[]
+include::tooling:tooling-cli:partial$module-nav.adoc[]
diff --git a/tooling/cli/adoc/antora.yml b/tooling/cli/adoc/antora.yml
index f59b33f..d2f65ab 100644
--- a/tooling/cli/adoc/antora.yml
+++ b/tooling/cli/adoc/antora.yml
@@ -15,5 +15,5 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-name: extensions
+name: tooling
 version: latest
diff --git a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
index 523a205..57d0451 100644
--- a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
+++ b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
@@ -18,9 +18,9 @@
 #
 
 projectDoc:
+  description: "These tables summarize all Maven artifacts available with _Apache Isis_."
   fixOrphanedAdocIncludeStatements: true
   namespacePartsSkipCount: 3
-  description: "These tables summarize all Maven artifacts available with _Apache Isis_."
   artifactGroups:
     Base: org.apache.isis
     Commons: org.apache.isis.commons.*
diff --git a/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc b/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
index 133b079..25b26af 100644
--- a/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
+++ b/tooling/cli/adoc/modules/tooling-cli/pages/about.adoc
@@ -5,8 +5,6 @@
 
 Command Line Interface for the _Apache Isis Tooling_ ecosystem, to generate documentation from program sources (`.java` files, `pom.xml`, etc).
 
-WARNING: This is work-in-progress.
-Regard the following text as an early draft.
 
 
 == Prerequisites
@@ -21,7 +19,7 @@ mvn install -D module-tooling -Dskip.essential
 This will generate the command line CLI as an executable jar in its target directory (`tooling/cli/target`).
 
 
-== Usage
+== Available Commands
 
 Use the help command to see a list of available commands:
 
@@ -31,38 +29,49 @@ Use the help command to see a list of available commands:
 java -jar tooling/cli/target/isis-tooling-cli.jar --help
 ----
 
-which (currently) generates the folloing:
+which (currently) generates the following:
 
 [source]
 ----
-Usage: cli [-hV] [-p=<projectRootPath>] [COMMAND]
+Usage: cli [-hV] [-o=<outputPath>] [-p=<projectRootPath>] [COMMAND]
 CLI for the Apache Isis Tooling Ecosystem
   -h, --help      Show this help message and exit.
+  -o, --output=<outputPath>
+                  path to the output file (default: NONE = write to std.out)
   -p, --project=<projectRootPath>
                   path to the (multi-module) project root (default: current dir)
   -V, --version   Print version information and exit.
 Commands:
-  projdoc  Writes a System Overview document (AsciiDoc) to given output.
+  overview  Writes a System Overview document (AsciiDoc) to given output.
+  index     Writes a Global Index (AsciiDoc) to given output.
 ----
 
-NOTE: there is currently only one subcommand, namely "projdoc".
+By default, the current directory is used as the target to perform commands in.
 
-By default, the current directory is used as the target to perform sub-commands in.
 
-Default options can be overruled by specifying a configuration file located at the root of the repo:
+=== Configuration File
+
+The `isis-tooling.yml` configuration file (found in the root of the repo) provides default options for each command, as well as global defaults applicable to all commands:
 
 [source,yml]
 .isis-tooling.yml
 ----
-projectDoc: # <.>
+global: # <.>
   option ...
   option ...
+command:
+  overview: # <.>
+    ...
+  index:    # <.>
+    ...
 ----
 
-<.> eg. configuration for sub-command `projdoc`
+<.> configuration applicable to all commands
+<.> configuration for the "overview" command
+<.> configuration for the "index" command
 
-This configuration file is mapped onto the `CLIConfig` bean.
-Look it up in the java sources for more detailed information.
+TIP: This configuration file is mapped onto the `CLIConfig` bean.
+Inspect its https://github.com/apache/isis/blob/master/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java#L31[source code] for more detailed information.
 
 
 == Commands
diff --git a/tooling/cli/adoc/modules/tooling-cli/partials/module-nav.adoc b/tooling/cli/adoc/modules/tooling-cli/partials/module-nav.adoc
index 814560b..9b2d812 100644
--- a/tooling/cli/adoc/modules/tooling-cli/partials/module-nav.adoc
+++ b/tooling/cli/adoc/modules/tooling-cli/partials/module-nav.adoc
@@ -1,4 +1,4 @@
 
-** xref:tooling-cli:about.adoc[Tooling CLI]
+* xref:tooling-cli:about.adoc[Tooling CLI]
 
 
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
index ef1d621..aeaab1a 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
@@ -33,19 +33,26 @@ import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 
 @Command(
-        name = "cli", 
-        mixinStandardHelpOptions = true, 
+        name = "cli",
+        mixinStandardHelpOptions = true,
         version = "0.1",
         description = "CLI for the Apache Isis Tooling Ecosystem",
         subcommands = {
-                Cli.ProjectDocCommand.class})
+                Cli.SystemOverviewCommand.class,
+                Cli.GlobalIndexCommand.class,
+        })
 class Cli implements Callable<Integer> {
 
     @Option(
-            names = {"-p", "--project"}, 
+            names = {"-p", "--project"},
             description = "path to the (multi-module) project root (default: current dir)")
     private String projectRootPath;
 
+    @Option(
+            names = {"-o", "--output"},
+            description = "path to the output file (default: NONE = write to std.out)")
+    private String outputPath;
+
     private _Lazy<CliConfig> configRef = _Lazy.threadSafe(()->CliConfig
             .read(projectRootPath!=null
                     ? new File(projectRootPath, "isis-tooling.yml")
@@ -54,15 +61,21 @@ class Cli implements Callable<Integer> {
     public CliConfig getConfig() {
         return configRef.get();
     }
-    
+
     public  File getProjectRoot() {
         return projectRootPath!=null
                 ? new File(projectRootPath)
                 : new File(".");
     }
 
+    public  File getOutputPath() {
+        return outputPath !=null
+                ? new File(outputPath)
+                : new File(".");
+    }
+
     @Override
-    public Integer call() throws Exception { 
+    public Integer call() throws Exception {
         // not used
         return 0;
     }
@@ -70,38 +83,52 @@ class Cli implements Callable<Integer> {
     // -- SUB COMMANDS
 
     @Command(
-            name = "projdoc",
+            name = "overview",
             description = "Writes a System Overview document (AsciiDoc) to given output.")
-    static class ProjectDocCommand extends CliCommandAbstract {
+    static class SystemOverviewCommand extends CliCommandAbstract {
 
         @Option(
-                names = {"-o", "--output"}, 
+                names = {"-o", "--output"},
                 description = "path to the output file (default: NONE = write to std.out)")
         private String outputFilePath;
 
         @Override
         public Integer call() throws Exception {
 
-            if(outputFilePath!=null) {
-                getConfig().getProjectDoc().setOutputRootFolder(new File(outputFilePath));
+            if(getOutputPath()!=null) {
+                getConfig().getGlobal().setOutputRootFolder(getOutputPath());
+            }
+
+            val projTree = ProjectNodeFactory.maven(getProjectRoot());
+            val projectDocModel = new ProjectDocModel(projTree);
+            projectDocModel.generateAsciiDoc(getConfig(), ProjectDocModel.Mode.OVERVIEW);
+            return 0;
+        }
+    }
+
+    @Command(
+            name = "index",
+            description = "Writes a Global Index (AsciiDoc) to given output.")
+    static class GlobalIndexCommand extends CliCommandAbstract {
+
+
+        @Override
+        public Integer call() throws Exception {
+
+            if(getOutputPath() !=null) {
+                getConfig().getGlobal().setOutputRootFolder(getOutputPath());
             }
-            
+
             val projTree = ProjectNodeFactory.maven(getProjectRoot());
             val projectDocModel = new ProjectDocModel(projTree);
-            projectDocModel.generateAsciiDoc(getConfig());
+            projectDocModel.generateAsciiDoc(getConfig(), ProjectDocModel.Mode.INDEX);
             return 0;
         }
     }
-    
+
     //TODO mvn2gradle
     //description = "Detects differences between Maven and Gradle (multi-module) projects.",
-    
 
-    //    @Command
-    //    int shout() {
-    //        System.out.println("HI! " + getConfig());
-    //        return 0;
-    //    }
 
     // -- ENTRY POINT
 
@@ -115,4 +142,4 @@ class Cli implements Callable<Integer> {
     // -- HELPER
 
 
-}
\ No newline at end of file
+}
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliCommandAbstract.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliCommandAbstract.java
index 4e3168b..c2956f9 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliCommandAbstract.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliCommandAbstract.java
@@ -28,10 +28,14 @@ abstract class CliCommandAbstract implements Callable<Integer> {
     public CliConfig getConfig() {
         return _Context.getElseFail(Cli.class).getConfig();
     }
-    
+
     public File getProjectRoot() {
         return _Context.getElseFail(Cli.class).getProjectRoot();
     }
 
-    
+    public File getOutputPath() {
+        return _Context.getElseFail(Cli.class).getOutputPath();
+    }
+
+
 }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
index caee899..fb9e84e 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
@@ -30,54 +30,76 @@ import lombok.NonNull;
 @Data
 public class CliConfig {
 
-    private ProjectDoc projectDoc = new ProjectDoc();
+    private Global global = new Global();
 
     @Data
-    public static class ProjectDoc {
-        private String description = "These tables summarize all Maven artifacts available with this project.";
+    public static class Global {
+
+        private File outputRootFolder = null; // where to write to (overridden by -o flag)
+
         private String licenseHeader =
                 "Licensed to the Apache Software Foundation (ASF) under one or more contributor license "
-                + "agreements. See the NOTICE file distributed with this work for additional information regarding "
-                + "copyright ownership. The ASF licenses this file to you under the Apache License, "
-                + "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 agreed to in writing, software distributed under the License "
-                + "is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express "
-                + "or implied. See the License for the specific language governing permissions and limitations under "
-                + "the License.";
-        private LinkedHashMap<String, String> artifactGroups = new LinkedHashMap<>();
-
-        private File outputRootFolder = null; // where to write eg. system-overview.adoc
+                        + "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 agreed to in writing, software distributed under the License "
+                        + "is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express "
+                        + "or implied. See the License for the specific language governing permissions and limitations under "
+                        + "the License.";
 
         private String documentPagesPath = "pages";
-        private String documentGlobalIndexPath = "pages/index";
-        private String documentGlobalIndexXrefPageIdFormat = "system:generated:index/%s.adoc";
-
-        private boolean fixOrphanedAdocIncludeStatements = false;
-
-        private String systemOverviewFilename = "system-overview.adoc";
 
         // when 3 eg. skips first three parts of the package names 'org.apache.isis'
         private int namespacePartsSkipCount = 0;
 
+        private LinkedHashMap<String, String> sections = new LinkedHashMap<>();
+
         public boolean isDryRun() {
             return getOutputRootFolder() == null;
         }
 
-        public File getDocumentIndexFolder() {
-            return Optional.ofNullable(getOutputRootFolder())
-                    .map(root->new File(root, getDocumentGlobalIndexPath()))
-                    .orElse(null);
-        }
-
         public File getDocumentPagesFolder() {
             return Optional.ofNullable(getOutputRootFolder())
                     .map(root->new File(root, getDocumentPagesPath()))
                     .orElse(null);
         }
+    }
+
+    private Commands commands = new Commands();
+
+    @Data
+    public static class Commands {
+
+        private Overview overview = new Overview();
+
+        @Data
+        public static class Overview {
+            private String systemOverviewFilename = "system-overview.adoc";
+
+            private String description = "These tables summarize all Maven artifacts available with this project.";
+        }
+
+        private Index index = new Index();
+
+        @Data
+        public static class Index {
+
+            private String documentGlobalIndexPath = "pages/index";
+            private String documentGlobalIndexXrefPageIdFormat = "system:generated:index/%s.adoc";
+
+            private boolean fixOrphanedAdocIncludeStatements = false;
+
+            public File getDocumentIndexFolder(File outputRootFolder) {
+                return Optional.ofNullable(outputRootFolder)
+                        .map(root->new File(root, getDocumentGlobalIndexPath()))
+                        .orElse(null);
+            }
+        }
 
     }
 
+
     // -- LOADING
 
     public static CliConfig read(final @NonNull File file) {
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
index 6ac54e3..4565613 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
@@ -41,12 +41,12 @@ public final class OrphanedIncludeStatementFixer {
             final @NonNull CliConfig cliConfig,
             final @NonNull J2AdocContext j2aContext) {
 
-        if(cliConfig.getProjectDoc().isDryRun()) {
+        if(cliConfig.getGlobal().isDryRun()) {
             System.out.println("IncludeStatementFixer: skip (dry-run)");
             return;
         }
 
-        if(!cliConfig.getProjectDoc().isFixOrphanedAdocIncludeStatements()) {
+        if(!cliConfig.getCommands().getIndex().isFixOrphanedAdocIncludeStatements()) {
             System.out.println("IncludeStatementFixer: skip (disabled via config, fixOrphandedAdocIncludeStatements=false)");
             return;
         }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
index a6663e4..74bc655 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
@@ -20,6 +20,8 @@ package org.apache.isis.tooling.cli.projdoc;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -28,6 +30,7 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.annotation.Nullable;
 
@@ -60,6 +63,7 @@ import static org.apache.isis.tooling.model4adoc.AsciiDocFactory.row;
 import static org.apache.isis.tooling.model4adoc.AsciiDocFactory.table;
 
 import lombok.EqualsAndHashCode;
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -84,45 +88,114 @@ public class ProjectDocModel {
         this.projTree = projTree;
     }
 
-    public void generateAsciiDoc(final @NonNull CliConfig cliConfig) {
-        
+    public enum Mode {
+        OVERVIEW,
+        INDEX
+    }
+
+    public void generateAsciiDoc(final @NonNull CliConfig cliConfig, final @NonNull Mode mode) {
+
         modules = new TreeSet<ProjectNode>();
         projTree.depthFirst(modules::add);
-        
+
         final SortedSet<File> asciiDocFiles = new TreeSet<>();
 
         val j2aContext = J2AdocContext
                 //.compactFormat()
                 .javaSourceWithFootnotesFormat()
-                .licenseHeader(cliConfig.getProjectDoc().getLicenseHeader())
-                .xrefPageIdFormat(cliConfig.getProjectDoc().getDocumentGlobalIndexXrefPageIdFormat())
-                .namespacePartsSkipCount(cliConfig.getProjectDoc().getNamespacePartsSkipCount())
+                .licenseHeader(cliConfig.getGlobal().getLicenseHeader())
+                .xrefPageIdFormat(cliConfig.getCommands().getIndex().getDocumentGlobalIndexXrefPageIdFormat())
+                .namespacePartsSkipCount(cliConfig.getGlobal().getNamespacePartsSkipCount())
                 .build();
-        
+
         val doc = doc();
         doc.setTitle("System Overview");
 
-        _Strings.nonEmpty(cliConfig.getProjectDoc().getLicenseHeader())
+        _Strings.nonEmpty(cliConfig.getGlobal().getLicenseHeader())
         .ifPresent(notice->AsciiDocFactory.attrNotice(doc, notice));
-        
-        _Strings.nonEmpty(cliConfig.getProjectDoc().getDescription())
+
+        _Strings.nonEmpty(cliConfig.getCommands().getOverview().getDescription())
         .ifPresent(block(doc)::setSource);
 
-        cliConfig.getProjectDoc().getArtifactGroups().forEach((section, groupId)->{
-            createSection(doc, section, groupId, j2aContext, asciiDocFiles::add);
+        // partition modules into sections
+        val sections = new ArrayList<Section>();
+        cliConfig.getGlobal().getSections().forEach((section, groupIdArtifactIdPattern)->{
+            createSections(modules, section, groupIdArtifactIdPattern, sections::add);
         });
 
+        // ensure that each module is referenced only by a single section,
+        // preferring to be owned by a non-group section (ie more specific)
+        val modulesReferencedByNonGroupSections =
+            sections.stream()
+                .filter(Section::isNotGroupLevelOnly)
+                .flatMap(Section::streamMatchingProjectNodes)
+                .collect(Collectors.toList());
+
+        sections.stream()
+                .filter(Section::isGroupLevelOnly)
+                .forEach(section -> section.removeProjectNodes(modulesReferencedByNonGroupSections));
+
+        // any remaining modules go into an 'Other' section
+        sections.forEach(section -> modules.removeAll(section.getMatchingProjectNodes()));
         if(!modules.isEmpty()) {
-            createSection(doc, "Other", null, j2aContext, asciiDocFile->{ /* don't collect*/});
+            final Section other = new Section("Other", null, false);
+            modules.forEach(other::addProjectNode);
+            sections.add(other);
+            modules.clear();
         }
-        
-        ProjectDocWriter.write(cliConfig, doc, j2aContext);
-        
+
+        // now generate the overview or index
+        writeSections(sections, doc, j2aContext, mode, asciiDocFiles::add);
+
+        if (mode == Mode.OVERVIEW) {
+            ProjectDocWriter.write(cliConfig, doc, j2aContext, mode);
+        }
+
         // update include statements ...
         OrphanedIncludeStatementFixer.fixIncludeStatements(asciiDocFiles, cliConfig, j2aContext);
 
     }
 
+    @RequiredArgsConstructor
+    public static class Section {
+        @Getter
+        private final String sectionName;
+        @Getter
+        private final String groupIdArtifactIdPattern;
+        @Getter
+        private final boolean addAdocFiles;
+
+        private final List<ProjectNode> matchingProjectNodes = new ArrayList<>();
+
+        public List<ProjectNode> getMatchingProjectNodes() {
+            return Collections.unmodifiableList(matchingProjectNodes);
+        }
+
+        public Stream<ProjectNode> streamMatchingProjectNodes() {
+            return matchingProjectNodes.stream();
+        }
+
+        void addProjectNode(ProjectNode projectNode) {
+            matchingProjectNodes.add(projectNode);
+        }
+
+        boolean isGroupLevelOnly() {
+            return ! isNotGroupLevelOnly();
+        }
+        boolean isNotGroupLevelOnly() {
+            return groupIdArtifactIdPattern.contains(":");
+        }
+
+        void removeProjectNodes(Collection<ProjectNode> projectNodes) {
+            matchingProjectNodes.removeAll(projectNodes);
+        }
+
+        @Override
+        public String toString() {
+            return String.format("%s (%s): %d modules", sectionName, isGroupLevelOnly() ? "group" : "non-group", getMatchingProjectNodes().size());
+        }
+    }
+
     // -- HELPER
 
     @RequiredArgsConstructor(staticName = "of")
@@ -131,11 +204,11 @@ public class ProjectDocModel {
         final ProjectNode projectNode;
         @EqualsExclude final Container container;
     }
-    
+
     private static class GroupDiagram {
-        
+
         private final C4 c4;
-        private final List<ProjectNode> projectNodes = new ArrayList<>(); 
+        private final List<ProjectNode> projectNodes = new ArrayList<>();
 
         public GroupDiagram(C4 c4) {
             this.c4 = c4;
@@ -159,8 +232,8 @@ public class ProjectDocModel {
                 return ProjectAndContainerTuple.of(projectNode, container);
             });
 
-            
-            final _Graph<ProjectAndContainerTuple> adjMatrix = 
+
+            final _Graph<ProjectAndContainerTuple> adjMatrix =
                     _Graph.of(tuples, (a, b)->a.projectNode.getChildren().contains(b.projectNode));
 
             tuples.forEach(tuple->{
@@ -183,19 +256,52 @@ public class ProjectDocModel {
 
             return AsciiDocFactory.SourceFactory.plantuml(toPlantUml(softwareSystemName), key, null);
         }
+    }
+
+    private void createSections(
+            final @NonNull SortedSet<ProjectNode> projectNodes,
+            final @NonNull String sectionName,
+            final @Nullable String pattern,
+            final @NonNull Consumer<Section> sectionConsumer) {
+
+        val section = new Section(sectionName, pattern, true);
+
+        projectNodes.stream()
+                .filter(module->matchesGroupId(module, pattern))
+                .forEach(section::addProjectNode);
 
+        sectionConsumer.accept(section);
     }
 
-    private void createSection(
-            final @NonNull Document doc, 
-            final @NonNull String sectionName, 
-            final @Nullable String groupIdPattern, 
+    private void writeSections(
+            final @NonNull List<Section> sections,
+            final @NonNull Document doc,
             final @NonNull J2AdocContext j2aContext,
+            final @NonNull Mode mode,
             final @NonNull Consumer<File> onAdocFile) {
 
+        sections.forEach(section -> {
+            writeSection(section, doc, j2aContext, mode, onAdocFile);
+        });
+    }
+
+    private void writeSection(
+            final @NonNull Section section,
+            final @NonNull Document doc,
+            final @NonNull J2AdocContext j2aContext,
+            final @NonNull Mode mode,
+            final @NonNull Consumer<File> onAdocFile) {
+
+        val sectionName = section.getSectionName();
+        val groupIdPattern = section.getGroupIdArtifactIdPattern();
+
         val titleBlock = block(doc);
 
-        titleBlock.setSource(String.format("== %s", sectionName));
+        val headingLevel =
+                (groupIdPattern == null || !groupIdPattern.contains(":"))
+                        ? "=="
+                        : "===";
+        titleBlock.setSource(String.format("%s %s", headingLevel, sectionName));
 
         val descriptionBlock = block(doc);
         val groupDiagram = new GroupDiagram(C4.of(sectionName, null));
@@ -213,54 +319,59 @@ public class ProjectDocModel {
         val projRoot = _Files.canonicalPath(projTree.getProjectDirectory())
                 .orElseThrow(()->_Exceptions.unrecoverable("cannot resolve project root"));
 
-        Set<ProjectNode> modulesWritten = new HashSet<>();
-
-        modules.stream()
-        .filter(module->matchesGroupId(module, groupIdPattern))
-        .forEach(module->{
-            gatherAdocFiles(module.getProjectDirectory(), onAdocFile);
+        section.getMatchingProjectNodes()
+                .forEach(module -> {
+                    if(mode == Mode.INDEX) {
+                        gatherAdocFiles(module.getProjectDirectory(), onAdocFile);
+                    }
 
-            val projPath = _Files.canonicalPath(module.getProjectDirectory()).get();
-            val projRelativePath = 
-                    Optional.ofNullable(
-                            _Strings.emptyToNull(
-                                    _Files.toRelativePath(projRoot, projPath)))
-                    .orElse("/");
+                    val projPath = _Files.canonicalPath(module.getProjectDirectory()).get();
+                    val projRelativePath =
+                            Optional.ofNullable(
+                                    _Strings.emptyToNull(
+                                            _Files.toRelativePath(projRoot, projPath)))
+                                    .orElse("/");
 
-            modulesWritten.add(module);
-            groupDiagram.collect(module);
+                    groupDiagram.collect(module);
 
-            val row = row(table);
-            cell(table, row, coordinates(module, projRelativePath));
-            cell(table, row, details(module, j2aContext));
-        });
+                    val row = row(table);
+                    cell(table, row, coordinates(module, projRelativePath));
+                    cell(table, row, details(module, j2aContext));
+                });
 
         descriptionBlock.setSource(groupDiagram.toAsciiDoc(sectionName));
-
-        modules.removeAll(modulesWritten);
-
     }
 
     private boolean matchesGroupId(ProjectNode module, String groupIdPattern) {
-        if(_Strings.isNullOrEmpty(module.getArtifactCoordinates().getGroupId())) {
+        val moduleCoords = module.getArtifactCoordinates();
+
+        if(_Strings.isNullOrEmpty(moduleCoords.getGroupId())) {
             return false; // never match on missing data
         }
         if(_Strings.isNullOrEmpty(groupIdPattern)) {
             return true; // no groupIdPattern, always matches
         }
-        if(groupIdPattern.equals(module.getArtifactCoordinates().getGroupId())) {
+        if(groupIdPattern.equals(moduleCoords.getGroupId())) {
             return true; // exact match
         }
         if(groupIdPattern.endsWith(".*")) {
             val groupIdPrefix = groupIdPattern.substring(0, groupIdPattern.length()-2);
-            if(groupIdPrefix.equals(module.getArtifactCoordinates().getGroupId())) {
-                return true; // exact match
-            }
-            if(groupIdPrefix.equals(module.getArtifactCoordinates().getGroupId())) {
-                return true; // exact prefix match
-            }
-            if(module.getArtifactCoordinates().getGroupId().startsWith(groupIdPrefix+".")) {
-                return true; // prefix match
+            if(groupIdPattern.contains(":")) {
+                final String[] split = groupIdPrefix.split(":");
+                val groupId = split[0];
+                val artifactIdPrefix = split[1];
+                if(groupId.equals(moduleCoords.getGroupId())) {
+                    if(moduleCoords.getArtifactId().startsWith(artifactIdPrefix)) {
+                        return true; // match on artifactId
+                    }
+                }
+            } else {
+                if(groupIdPrefix.equals(moduleCoords.getGroupId())) {
+                    return true; // exact prefix match
+                }
+                if(moduleCoords.getGroupId().startsWith(groupIdPrefix+".")) {
+                    return true; // prefix match
+                }
             }
         }
         return false;
@@ -283,11 +394,11 @@ public class ProjectDocModel {
                 module.getName(),
                 AsciiDocFactory.SourceFactory.yaml(coors.toString(), null));
     }
-    
+
     private void appendKeyValue(StringBuilder sb, String key, String value) {
         sb.append(String.format("%s: %s\n", key, value));
     }
-    
+
     private String details(ProjectNode module, J2AdocContext j2aContext) {
         val description = module.getDescription().trim();
         val dependencyList = module.getDependencies()
@@ -303,7 +414,7 @@ public class ProjectDocModel {
                 .map(ProjectDocModel::toAdocListItem)
                 .collect(Collectors.joining())
                 .trim();
-        
+
         val indexEntriesCompactList = gatherGlobalDocIndexXrefs(module.getProjectDirectory(), j2aContext)
                 .stream()
                 .collect(Collectors.joining(", "))
@@ -322,7 +433,7 @@ public class ProjectDocModel {
         if(!dependencyList.isEmpty()) {
             sb.append(toAdocSection("Dependencies", dependencyList));
         }
-        
+
         if(!indexEntriesCompactList.isEmpty()) {
             sb.append(toAdocSection("Document Index Entries", indexEntriesCompactList));
         }
@@ -333,23 +444,23 @@ public class ProjectDocModel {
     private static String toAdocSection(String title, String content) {
         return String.format("_%s_\n\n%s\n\n", title, content);
     }
-    
+
     private static String toAdocListItem(String element) {
         return String.format("* %s\n", element);
     }
 
     private SortedSet<String> gatherGlobalDocIndexXrefs(File projDir, J2AdocContext j2aContext) {
-        
+
         val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.JAVA).main();
 
         final SortedSet<String> docIndexXrefs = analyzerConfig.getSources(JAVA).stream()
         .flatMap(j2aContext::add)
         .map(unit->unit.getAsciiDocXref(j2aContext))
         .collect(Collectors.toCollection(TreeSet::new));
-        
+
         return docIndexXrefs;
     }
-    
+
     private SortedSet<String> gatherSpringComponents(File projDir) {
 
         val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.JAVA).main();
@@ -367,16 +478,16 @@ public class ProjectDocModel {
 
         return components;
     }
-    
+
     private void gatherAdocFiles(File projDir, Consumer<File> onFile) {
-    
+
         val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.ADOC).main();
 
         analyzerConfig.getSources(Language.ADOC)
                 .stream()
                 .forEach(onFile::accept);
     }
-                
+
 
 }
 
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
index 66ac7ec..a457abd 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
@@ -38,91 +38,107 @@ final class ProjectDocWriter {
 
     @SneakyThrows
     static void write(
-            final @NonNull CliConfig cliConfig, 
-            final @NonNull Document systemSummaryAdoc, 
-            final @NonNull J2AdocContext j2aContext) {
-        
-        final BiConsumer<Document, File> docWriter = cliConfig.getProjectDoc().isDryRun()
+            final @NonNull CliConfig cliConfig,
+            final @NonNull Document systemSummaryAdoc,
+            final @NonNull J2AdocContext j2aContext,
+            final @NonNull ProjectDocModel.Mode mode) {
+
+        final BiConsumer<Document, File> docWriter = cliConfig.getGlobal().isDryRun()
                 ? (doc, file)->AsciiDocWriter.print(doc) // print to system out only (dry run)
                 : AsciiDocWriter::writeToFile;
 
         val currentUnit = _Refs.<J2AdocUnit>objectRef(null);
-        val projectDoc = cliConfig.getProjectDoc();
-            
-        val rootFolder = projectDoc.getOutputRootFolder();
-        val pagesFolder = projectDoc.getDocumentPagesFolder();
-        
+        val global = cliConfig.getGlobal();
+        val overview = cliConfig.getCommands().getOverview();
+        val index = cliConfig.getCommands().getIndex();
+
+        val rootFolder = global.getOutputRootFolder();
+        val pagesFolder = global.getDocumentPagesFolder();
+
         val deleteCount = _Refs.intRef(0);
         int writeCount = 0;
-        
+
         try {
 
-            // delete all generated documents 
-            _Files.searchFiles(rootFolder, dir->true, file->file.getName().endsWith(".adoc"))
-            .stream()
-            .peek(adocFile->System.out.println(String.format("deleting file: %s", adocFile.getName())))
-            .peek(__->deleteCount.inc())
-            .forEach(_Files::deleteFile);
-            
-            // write system overview
-            val sysovFile = new File(pagesFolder, projectDoc.getSystemOverviewFilename()); 
-            System.out.println(String.format("writing system overview: %s", sysovFile.getName()));
-            docWriter.accept(systemSummaryAdoc, sysovFile);
-            ++writeCount;
-            
-            // write document index
-            for(val unit : j2aContext.getUnitIndex().values()) {
-            
-                currentUnit.setValue(unit);
-                         
-                val adocIndexFile = adocDestinationFileForUnit(unit, projectDoc);
-                
-                System.out.println(String.format("writing file: %s", adocIndexFile.getName()));
-                
-                docWriter.accept(
-                        unit.toAsciiDoc(j2aContext), 
-                        adocIndexFile);
-                
+            // TODO: should split this out into two separate methods etc.
+            if (mode == ProjectDocModel.Mode.OVERVIEW) {
+
+                // write system overview
+                val overviewFile = new File(pagesFolder, overview.getSystemOverviewFilename());
+                System.out.printf("writing system overview: %s%n", overviewFile.getName());
+                docWriter.accept(systemSummaryAdoc, overviewFile);
                 ++writeCount;
             }
-            
-            // summary
-            System.out.println(
-                    String.format("ProjectDocWriter: all done. (deleted: %d, written: %d)", 
-                            deleteCount.getValue(),
-                            writeCount));
-            
+
+            if(mode == ProjectDocModel.Mode.INDEX) {
+
+                // delete all generated documents in the index
+                _Files.searchFiles(pagesFolder, dir->true, file-> {
+                    val fileName = file.getName();
+                    return  fileName.endsWith(".adoc") &&
+                           !fileName.equals(overview.getSystemOverviewFilename());
+                })
+                .stream()
+                .peek(adocFile->System.out.printf("deleting file: %s%n", adocFile.getName()))
+                .peek(__->deleteCount.inc())
+                .forEach(_Files::deleteFile);
+
+
+                // write document index
+                for(val unit : j2aContext.getUnitIndex().values()) {
+
+                    currentUnit.setValue(unit);
+
+                    val adocIndexFile = adocDestinationFileForUnit(unit, global, overview, index);
+
+                    System.out.printf("writing file: %s%n", adocIndexFile.getName());
+
+                    docWriter.accept(
+                            unit.toAsciiDoc(j2aContext),
+                            adocIndexFile);
+
+                    ++writeCount;
+                }
+
+                // summary
+                System.out.printf(
+                        "ProjectDocWriter: all done. (deleted: %d, written: %d)%n",
+                        deleteCount.getValue(), writeCount);
+            }
+
         } catch (Exception e) {
-            System.err.println(String.format(
-                    "failed to write adoc for unit %s", 
-                    currentUnit.getValue().map(J2AdocUnit::getCanonicalName).orElse("none")));
+            System.err.printf(
+                    "failed to write adoc for unit %s%n",
+                    currentUnit.getValue().map(J2AdocUnit::getCanonicalName).orElse("none"));
             e.printStackTrace();
             System.exit(1);
-        } 
-        
+        }
     }
-    
+
     // generate output file based on unit's namespace and unit's name
     private static File adocDestinationFileForUnit(
             final @NonNull J2AdocUnit unit,
-            final @NonNull CliConfig.ProjectDoc projectDoc) {
-        
-        val indexFolder = projectDoc.getDocumentIndexFolder();
-     
+            final @NonNull CliConfig.Global global,
+            final @NonNull CliConfig.Commands.Overview overview,
+            final @NonNull CliConfig.Commands.Index index
+            ) {
+
+        val indexFolder = index.getDocumentIndexFolder(global.getOutputRootFolder());
+
         val destFolderBuilder = _Refs.<File>objectRef(indexFolder);
-        
+
         unit.getNamespace().stream()
-        .skip(projectDoc.getNamespacePartsSkipCount()) 
+        .skip(global.getNamespacePartsSkipCount())
         .forEach(subDir->destFolderBuilder.update(currentDir->new File(currentDir, subDir)));
-        
+
         val destFolder = destFolderBuilder.getValueElseDefault(indexFolder);
         destFolder.mkdirs();
-        
+
         return new File(
                 destFolder,
                 unit.getCanonicalName()+ ".adoc");
-        
+
     }
 
-    
+
 }
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
index fbddcbb..10f2a92 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
@@ -53,14 +53,15 @@ class CliConfigTest {
 
     private void assertConfigIsPopulated(CliConfig config) {
         assertNotNull(config);
-        assertNotNull(config.getProjectDoc());
-        assertEquals("These tables summarize all Maven artifacts available with _Apache Isis_.", config.getProjectDoc().getDescription());
-        assertNotNull(config.getProjectDoc().getArtifactGroups());
-        assertTrue(config.getProjectDoc().getArtifactGroups().size()>5);
+        assertNotNull(config.getGlobal());
+        assertNotNull(config.getCommands().getOverview());
+        assertNotNull(config.getCommands().getIndex());
+        assertEquals("These tables summarize all Maven artifacts available with _Apache Isis_.", config.getCommands().getOverview().getDescription());
+        assertNotNull(config.getGlobal().getSections());
+        assertTrue(config.getGlobal().getSections().size()>5);
 
-
-        assertEquals(true, config.getProjectDoc().isFixOrphanedAdocIncludeStatements());
-        assertEquals(3, config.getProjectDoc().getNamespacePartsSkipCount());
+        assertTrue(config.getCommands().getIndex().isFixOrphanedAdocIncludeStatements());
+        assertEquals(3, config.getGlobal().getNamespacePartsSkipCount());
     }
 
 }
diff --git a/tooling/cli/src/test/resources/org/apache/isis/tooling/cli/test/isis-tooling.yml b/tooling/cli/src/test/resources/org/apache/isis/tooling/cli/test/isis-tooling.yml
index 503a7b4..77fba0f 100644
--- a/tooling/cli/src/test/resources/org/apache/isis/tooling/cli/test/isis-tooling.yml
+++ b/tooling/cli/src/test/resources/org/apache/isis/tooling/cli/test/isis-tooling.yml
@@ -17,35 +17,84 @@
 #  under the License.
 #
 
-projectDoc:
-  fixOrphanedAdocIncludeStatements: true
+global:
   namespacePartsSkipCount: 3
-  description: "These tables summarize all Maven artifacts available with _Apache Isis_."
-  artifactGroups:
-    Base: org.apache.isis
-    Commons: org.apache.isis.commons.*
-    Core: org.apache.isis.core.*
+
+  sections:
     App: org.apache.isis.app.*
-    
     Mavendeps: org.apache.isis.mavendeps.*
-    Mappings: org.apache.isis.mappings.*
-    
-    Persistence: org.apache.isis.persistence.*
-    Security: org.apache.isis.security.*
-    
-    Valuetypes: org.apache.isis.valuetypes.*
-    Viewer: org.apache.isis.viewer.*
-
     Testing: org.apache.isis.testing.*
-    Regression Tests: org.apache.isis.regressiontests.*
-    
-    Extensions: org.apache.isis.extensions.*
-    Subdomains: org.apache.isis.subdomains.*
-    
-    Tooling: org.apache.isis.tooling.*
-    
     Examples: org.apache.isis.examples.*
-    
-    Incubator: org.apache.isis.incubator.*
+
+    Root: org.apache.isis
+    Commons: org.apache.isis.commons.*
+
+    Core: org.apache.isis.core.*
+
+    Persistence: org.apache.isis.persistence
+    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+
+    Security: org.apache.isis.security
+    Bypass: "org.apache.isis.security:isis-security-bypass.*"
+    Keycloak: "org.apache.isis.security:isis-security-keycloak.*"
+    Shiro: "org.apache.isis.security:isis-security-shiro.*"
+
+    Viewer: org.apache.isis.viewer
+    "Restful Objects": "org.apache.isis.viewer:isis-viewer-restfulobjects.*"
+    Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
+
+    Valuetypes: org.apache.isis.valuetypes.*
+
+    Mappings: org.apache.isis.mappings
+    #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
+    "JAX-RS Client Library": "org.apache.isis.mappings:isis-mappings-jaxrsclient.*"
+    #Minio: "org.apache.isis.mappings:isis-mappings-minio.*"
+    "REST Client": "org.apache.isis.mappings:isis-mappings-restclient.*"
+    #"Slack Library": "org.apache.isis.mappings:isis-mappings-slack.*"
+
+    Extensions: org.apache.isis.extensions
+    "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
+    "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
+    "Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
+    "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
+    "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
+    #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
+    "Security: Secman": "org.apache.isis.security:isis-extensions-secman.*"
+    #"Security: Session Log": "org.apache.isis.security:isis-extensions-session-log.*"
+    "Security: Shiro LDAP Realm": "org.apache.isis.security:isis-extensions-shiro-realm-ldap.*"
+    "RO Viewer: CORS": "org.apache.isis.security:isis-extensions-cors.*"
+    "Wicket Viewer: Excel Download": "org.apache.isis.security:isis-extensions-exceldownload.*"
+    "Wicket Viewer: Full Calendar": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+    #"Wicket Viewer: Gmap3": "org.apache.isis.security:isis-extensions-gmap3.*"
+    "Wicket Viewer: Pdf.js": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+
+    Subdomains: org.apache.isis.subdomains
+    "Base": "org.apache.isis.subdomains:isis-subdomains-base.*"
+    #"docx": "org.apache.isis.subdomains:isis-subdomains-docx.*"
+    "Excel": "org.apache.isis.subdomains:isis-subdomains-excel.*"
+    #"Freemarker": "org.apache.isis.subdomains:isis-subdomains-freemarker.*"
+    #"OGNL": "org.apache.isis.subdomains:isis-subdomains-ognl.*"
+    #"PDF Box": "org.apache.isis.subdomains:isis-subdomains-pdfbox.*"
+    "Spring": "org.apache.isis.subdomains:isis-subdomains-spring.*"
+    "XDocReport": "org.apache.isis.subdomains:isis-subdomains-xdocreport.*"
+    #"Zip": "org.apache.isis.subdomains:isis-subdomains-zip.*"
+
+    "Tooling": org.apache.isis.tooling.*
+    "Regression Tests": org.apache.isis.regressiontests.*
+
+    Incubator: org.apache.isis.incubator
+    "Kroviz Client": "org.apache.isis.incubator.clients:isis-client-kroviz.*"
+    "JavaFX Viewer": "org.apache.isis.incubator.viewer:isis-viewer-javafx.*"
+    "Vaadin Viewer": "org.apache.isis.incubator.viewer:isis-viewer-vaadin.*"
+
     Legacy: org.apache.isis.legacy.*
-     
+
+
+commands:
+  overview:
+    description: "These tables summarize all Maven artifacts available with _Apache Isis_."
+
+  index:
+    fixOrphanedAdocIncludeStatements: true
+


[isis] 03/04: ISIS-2444: regenerating configs and examples

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 140ba1582e2afcaea81d88d62f8fb381cc24c35e
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 31 19:06:26 2021 +0000

    ISIS-2444: regenerating configs and examples
---
 .../modules/generated/pages/system-overview.adoc   | 224 +++++++++++++++++----
 .../adoc/modules/config/pages/sections/Other.adoc  |   2 +-
 .../modules/config/pages/sections/isis.applib.adoc |  32 +--
 .../pages/sections/isis.core.meta-model.adoc       |   2 +-
 .../isis.core.meta-model.introspector.adoc         |   4 +-
 .../sections/isis.core.meta-model.validator.adoc   |  20 +-
 .../pages/sections/isis.core.runtime-services.adoc |  10 +-
 .../config/pages/sections/isis.extensions.adoc     |  20 +-
 .../sections/isis.persistence.jdo-datanucleus.adoc |   4 +-
 .../isis.persistence.jdo-datanucleus.impl.adoc     |   9 +-
 .../config/pages/sections/isis.value-types.adoc    |  26 +--
 .../config/pages/sections/isis.viewer.wicket.adoc  |  54 ++---
 .../modules/config/pages/sections/resteasy.adoc    |   2 +-
 isis-tooling.yml                                   |   3 +
 .../modules/tooling-cli/examples/isis-tooling.yml  |  85 ++++++--
 15 files changed, 347 insertions(+), 150 deletions(-)

diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 57a6b30..319fbc1 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -5,7 +5,7 @@ These tables summarize all Maven artifacts available with _Apache Isis_.
 
 == App
 
-[plantuml,App,svg]
+[plantuml,App,png]
 ----
 @startuml(id=App)
 title App - Containers
@@ -48,7 +48,7 @@ built with Maven.  Builds on top of spring-boot-starter-parent.
 
 == Mavendeps
 
-[plantuml,Mavendeps,svg]
+[plantuml,Mavendeps,png]
 ----
 @startuml(id=Mavendeps)
 title Mavendeps - Containers
@@ -260,7 +260,7 @@ _Dependencies_
 
 == Testing
 
-[plantuml,Testing,svg]
+[plantuml,Testing,png]
 ----
 @startuml(id=Testing)
 title Testing - Containers
@@ -533,7 +533,6 @@ _Dependencies_
 
 * com.h2database:h2:jar:<managed>
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
-* org.beanshell:bsh:jar:2.0b5
 
 |Apache Isis Tst - HSQLDB Manager (parent)
 [source,yaml]
@@ -653,7 +652,7 @@ Folder: \testing\unittestsupport\applib
 
 == Examples
 
-[plantuml,Examples,svg]
+[plantuml,Examples,png]
 ----
 @startuml(id=Examples)
 title Examples - Containers
@@ -854,7 +853,7 @@ Folder: \examples\demo\wicket
 
 == Root
 
-[plantuml,Root,svg]
+[plantuml,Root,png]
 ----
 @startuml(id=Root)
 title Root - Containers
@@ -952,7 +951,7 @@ To compensate for incomplete dependency POMs, we use the supplemental models sup
 
 == Commons
 
-[plantuml,Commons,svg]
+[plantuml,Commons,png]
 ----
 @startuml(id=Commons)
 title Commons - Containers
@@ -1009,12 +1008,12 @@ _Dependencies_
 
 _Document Index Entries_
 
-xref:system:generated:index/commons/functional/Result.adoc[Result], xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId], xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername], xref:system:generated:index/commons/resource/ResourceCoordinates.adoc[ResourceCoordinates]
+xref:system:generated:index/commons/functional/Result.adoc[Result], xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId], xref:system:generated:index/commons/having/HasUpdatedAt.adoc[HasUpdatedAt], xref:system:generated:index/commons/having/HasUpdatedBy.adoc[HasUpdatedBy], xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername], xref:system:generated:index/commons/resource/ResourceCoordinates.adoc[ResourceCoordinates]
 |===
 
 == Core
 
-[plantuml,Core,svg]
+[plantuml,Core,png]
 ----
 @startuml(id=Core)
 title Core - Containers
@@ -1159,6 +1158,19 @@ Folder: \api\applib
 |Isis application library, defining annotations and utilities for the
 default (Java) programming model.
 
+_Components_
+
+* o.a.i.applib.annotation.DomainObject
+* o.a.i.applib.annotation.DomainService
+* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto
+* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto
+* o.a.i.applib.services.commanddto.processor.spi.CommandDtoProcessorServiceIdentity
+* o.a.i.applib.services.publishing.log.CommandLogger
+* o.a.i.applib.services.publishing.log.EntityChangesLogger
+* o.a.i.applib.services.publishing.log.EntityPropertyChangeLogger
+* o.a.i.applib.services.publishing.log.ExecutionLogger
+* o.a.i.applib.services.session.SessionLoggingServiceLogging
+
 _Dependencies_
 
 * com.google.code.findbugs:annotations:jar:<managed>
@@ -1171,7 +1183,7 @@ _Dependencies_
 
 _Document Index Entries_
 
-xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider],  [...]
+xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider],  [...]
 
 |Apache Isis Core - Code Gen (ByteBuddy)
 [source,yaml]
@@ -1183,6 +1195,10 @@ Folder: \core\codegen-bytebuddy
 ----
 |Code generation using ByteBuddy.
 
+_Components_
+
+* o.a.i.core.codegen.bytebuddy.services.ProxyFactoryServiceByteBuddy
+
 _Dependencies_
 
 * net.bytebuddy:byte-buddy:jar:<managed>
@@ -1199,14 +1215,30 @@ Folder: \core\config
 ----
 |Isis configuration library for framework internal use.
 
+_Components_
+
+* o.a.i.core.config.beans.IsisBeanFactoryPostProcessorForSpring
+* o.a.i.core.config.beans.IsisBeanTypeRegistryDefault
+* o.a.i.core.config.converters.PatternsConverter
+* o.a.i.core.config.environment.IsisLocaleInitializer
+* o.a.i.core.config.environment.IsisSystemEnvironment
+* o.a.i.core.config.environment.IsisTimeZoneInitializer
+* o.a.i.core.config.validators.PatternOptionalStringConstraintValidator
+* o.a.i.core.config.viewer.wicket.WebAppContextPath
+
 _Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
+* org.beanshell:bsh:jar:2.0b5
 * org.hibernate.validator:hibernate-validator:jar:<managed>
 * org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
 
+_Document Index Entries_
+
+xref:system:generated:index/core/config/datasources/DataSourceIntrospectionService.adoc[DataSourceIntrospectionService]
+
 |Apache Isis Core - Interaction
 [source,yaml]
 ----
@@ -1219,6 +1251,11 @@ Folder: \core\interaction
 Top level action execution or property changes are wrapped in an _Interaction_.
 That typically corresponds to a http request/response cycle or a JUnit test method execution.
 
+_Components_
+
+* o.a.i.core.interaction.integration.InteractionAwareTransactionalBoundaryHandler
+* o.a.i.core.interaction.scope.InteractionScopeBeanFactoryPostProcessor
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1261,7 +1298,39 @@ Artifact: isis-core-metamodel
 Type: jar
 Folder: \core\metamodel
 ----
-|_Dependencies_
+|_Components_
+
+* o.a.i.core.metamodel.facets.schema.IsisSchemaMetaModelRefiner
+* o.a.i.core.metamodel.facets.schema.IsisSchemaValueTypeProvider
+* o.a.i.core.metamodel.objectmanager.ObjectManagerDefault
+* o.a.i.core.metamodel.progmodel.ProgrammingModelInitFilterDefault
+* o.a.i.core.metamodel.services.ServiceInjectorDefault
+* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureFactory
+* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorDefault
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForCollections
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForDomainObjects
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry
+* o.a.i.core.metamodel.services.events.MetamodelEventService
+* o.a.i.core.metamodel.services.exceprecog.ExceptionRecognizerForRecoverableException
+* o.a.i.core.metamodel.services.grid.GridLoaderServiceDefault
+* o.a.i.core.metamodel.services.grid.GridReaderUsingJaxb
+* o.a.i.core.metamodel.services.grid.GridServiceDefault
+* o.a.i.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3
+* o.a.i.core.metamodel.services.layout.LayoutServiceDefault
+* o.a.i.core.metamodel.services.metamodel.MetaModelServiceDefault
+* o.a.i.core.metamodel.services.registry.ServiceRegistryDefault
+* o.a.i.core.metamodel.services.tablecol.TableColumnOrderServiceDefault
+* o.a.i.core.metamodel.services.title.TitleServiceDefault
+* o.a.i.core.metamodel.specloader.InjectorMethodEvaluatorDefault
+* o.a.i.core.metamodel.specloader.ProgrammingModelServiceDefault
+* o.a.i.core.metamodel.specloader.SpecificationLoaderDefault
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderDefault
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForBuiltin
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForCollections
+* o.a.i.core.metamodel.valuetypes.ValueTypeRegistry
+
+_Dependencies_
 
 * io.swagger:swagger-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
@@ -1281,6 +1350,11 @@ Folder: \core\runtime
 ----
 |Bundles framework internal services, utilities and events.
 
+_Components_
+
+* o.a.i.core.runtime.events.MetamodelEventService
+* o.a.i.core.runtime.events.TransactionEventEmitter
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-interaction:jar:<managed>
@@ -1298,6 +1372,49 @@ Folder: \core\runtimeservices
 ----
 |Introduced to keep the 'runtime' package concise. Viewers don't have dependencies on this module.
 
+_Components_
+
+* o.a.i.core.runtimeservices.bookmarks.BookmarkServiceDefault
+* o.a.i.core.runtimeservices.clock.ClockServiceDefault
+* o.a.i.core.runtimeservices.command.CommandDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.command.CommandExecutorServiceDefault
+* o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
+* o.a.i.core.runtimeservices.email.EmailServiceDefault
+* o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring
+* o.a.i.core.runtimeservices.executor.MemberExecutorServiceDefault
+* o.a.i.core.runtimeservices.factory.FactoryServiceDefault
+* o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault
+* o.a.i.core.runtimeservices.i18n.po.TranslationServicePo
+* o.a.i.core.runtimeservices.interaction.InteractionDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault
+* o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault
+* o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3
+* o.a.i.core.runtimeservices.message.MessageServiceDefault
+* o.a.i.core.runtimeservices.publish.CommandPublisherDefault
+* o.a.i.core.runtimeservices.publish.EntityChangesPublisherDefault
+* o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault
+* o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
+* o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
+* o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForDataAlreadyExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForObjectNotFound
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForOtherDataAccessProblem
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForRelatedDataExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForUnableToSaveData
+* o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
+* o.a.i.core.runtimeservices.routing.RoutingServiceDefault
+* o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
+* o.a.i.core.runtimeservices.session.InteractionFactoryDefault
+* o.a.i.core.runtimeservices.sudo.SudoServiceDefault
+* o.a.i.core.runtimeservices.transaction.TransactionServiceSpring
+* o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression
+* o.a.i.core.runtimeservices.user.UserServiceDefault
+* o.a.i.core.runtimeservices.userprof.UserProfileServiceDefault
+* o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault
+* o.a.i.core.runtimeservices.wrapper.WrapperFactoryDefault
+* o.a.i.core.runtimeservices.xml.XmlServiceDefault
+* o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
@@ -1307,7 +1424,7 @@ _Dependencies_
 
 _Document Index Entries_
 
-xref:system:generated:index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc[ExceptionRecognizerForOtherDataAccessProblem], xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault], xref:system:generated:index/core/runtimeservices/xmlsnapshot/XmlSnapshotServiceDefault.adoc[XmlSnapshotServiceDefault]
+xref:system:generated:index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc[ExceptionRecognizerForOtherDataAccessProblem], xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault]
 
 |Apache Isis Core - Security
 [source,yaml]
@@ -1317,7 +1434,13 @@ Artifact: isis-core-security
 Type: jar
 Folder: \core\security
 ----
-|_Dependencies_
+|_Components_
+
+* o.a.i.core.security.authentication.manager.AuthenticationManager
+* o.a.i.core.security.authentication.standard.RandomCodeGeneratorDefault
+* o.a.i.core.security.authorization.manager.AuthorizationManager
+
+_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -1337,6 +1460,11 @@ Folder: \core\transaction
 |Provides transaction integration with Spring and also
 entity change tracking, with associated publishing and pre/post value events.
 
+_Components_
+
+* o.a.i.core.transaction.changetracking.EntityChangeTrackerDefault
+* o.a.i.core.transaction.changetracking.events.TimestampService
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1357,6 +1485,13 @@ Folder: \core\webapp
 |Bundles all the web specific classes a srequired by viewers.
 Introduced to keep the 'runtime' package concise.
 
+_Components_
+
+* o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService
+* o.a.i.core.webapp.modules.logonlog.WebModuleLogOnExceptionLogger
+* o.a.i.core.webapp.modules.templresources.WebModuleTemplateResources
+* o.a.i.core.webapp.webappctx.IsisWebAppContextInitializer
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-interaction:jar:<managed>
@@ -1414,7 +1549,7 @@ _Dependencies_
 
 === JDO
 
-[plantuml,JDO,svg]
+[plantuml,JDO,png]
 ----
 @startuml(id=JDO)
 title JDO - Containers
@@ -1621,9 +1756,10 @@ Folder: \persistence\jdo\spring
 This is a fork of the Spring ORM JDO sources at github,
 for which support had been dropped back in 2016 [1].
 
-Credits to the original authors.
+Credits to the original authors. See also docs [2].
 
 [1] https://github.com/spring-projects/spring-framework/issues/18702
+[2] https://docs.spring.io/spring-framework/docs/3.0.0.RC2/reference/html/ch13s04.html
 
 _Dependencies_
 
@@ -1638,7 +1774,7 @@ _Dependencies_
 
 === JPA
 
-[plantuml,JPA,svg]
+[plantuml,JPA,png]
 ----
 @startuml(id=JPA)
 title JPA - Containers
@@ -1788,7 +1924,7 @@ _Dependencies_
 
 === Bypass
 
-[plantuml,Bypass,svg]
+[plantuml,Bypass,png]
 ----
 @startuml(id=Bypass)
 title Bypass - Containers
@@ -1837,7 +1973,7 @@ _Dependencies_
 
 === Keycloak
 
-[plantuml,Keycloak,svg]
+[plantuml,Keycloak,png]
 ----
 @startuml(id=Keycloak)
 title Keycloak - Containers
@@ -1892,7 +2028,7 @@ _Dependencies_
 
 === Shiro
 
-[plantuml,Shiro,svg]
+[plantuml,Shiro,png]
 ----
 @startuml(id=Shiro)
 title Shiro - Containers
@@ -1949,7 +2085,7 @@ _Dependencies_
 
 == Viewer
 
-[plantuml,Viewer,svg]
+[plantuml,Viewer,png]
 ----
 @startuml(id=Viewer)
 title Viewer - Containers
@@ -2002,7 +2138,7 @@ _Dependencies_
 
 === Restful Objects
 
-[plantuml,Restful Objects,svg]
+[plantuml,Restful Objects,png]
 ----
 @startuml(id=Restful_Objects)
 title Restful Objects - Containers
@@ -2195,7 +2331,7 @@ _Dependencies_
 
 === Wicket
 
-[plantuml,Wicket,svg]
+[plantuml,Wicket,png]
 ----
 @startuml(id=Wicket)
 title Wicket - Containers
@@ -2345,7 +2481,7 @@ _Dependencies_
 
 == Valuetypes
 
-[plantuml,Valuetypes,svg]
+[plantuml,Valuetypes,png]
 ----
 @startuml(id=Valuetypes)
 title Valuetypes - Containers
@@ -2822,7 +2958,7 @@ _Dependencies_
 
 == Mappings
 
-[plantuml,Mappings,svg]
+[plantuml,Mappings,png]
 ----
 @startuml(id=Mappings)
 title Mappings - Containers
@@ -2869,7 +3005,7 @@ _Dependencies_
 
 === JAX-RS Client Library
 
-[plantuml,JAX-RS Client Library,svg]
+[plantuml,JAX-RS Client Library,png]
 ----
 @startuml(id=JAX-RS_Client_Library)
 title JAX-RS Client Library - Containers
@@ -2950,7 +3086,7 @@ Folder: \mappings\jaxrsclient\testlib
 
 === REST Client
 
-[plantuml,REST Client,svg]
+[plantuml,REST Client,png]
 ----
 @startuml(id=REST_Client)
 title REST Client - Containers
@@ -3014,7 +3150,7 @@ _Dependencies_
 
 == Extensions
 
-[plantuml,Extensions,svg]
+[plantuml,Extensions,png]
 ----
 @startuml(id=Extensions)
 title Extensions - Containers
@@ -3497,7 +3633,7 @@ Folder: \extensions\security\shiro-realm-ldap\impl
 
 === Core: Command Log
 
-[plantuml,Core: Command Log,svg]
+[plantuml,Core: Command Log,png]
 ----
 @startuml(id=Core:_Command_Log)
 title Core: Command Log - Containers
@@ -3572,7 +3708,7 @@ _Dependencies_
 
 === Core: Command Replay
 
-[plantuml,Core: Command Replay,svg]
+[plantuml,Core: Command Replay,png]
 ----
 @startuml(id=Core:_Command_Replay)
 title Core: Command Replay - Containers
@@ -3685,7 +3821,7 @@ _Dependencies_
 
 === Core: Flyway
 
-[plantuml,Core: Flyway,svg]
+[plantuml,Core: Flyway,png]
 ----
 @startuml(id=Core:_Flyway)
 title Core: Flyway - Containers
@@ -3750,7 +3886,7 @@ Folder: \extensions\core\flyway\impl
 
 === Core: Model Annotation
 
-[plantuml,Core: Model Annotation,svg]
+[plantuml,Core: Model Annotation,png]
 ----
 @startuml(id=Core:_Model_Annotation)
 title Core: Model Annotation - Containers
@@ -3802,7 +3938,7 @@ _Dependencies_
 
 === Core: Quartz
 
-[plantuml,Core: Quartz,svg]
+[plantuml,Core: Quartz,png]
 ----
 @startuml(id=Core:_Quartz)
 title Core: Quartz - Containers
@@ -3878,7 +4014,7 @@ Folder: \extensions\core\quartz\impl
 
 == Subdomains
 
-[plantuml,Subdomains,svg]
+[plantuml,Subdomains,png]
 ----
 @startuml(id=Subdomains)
 title Subdomains - Containers
@@ -4113,7 +4249,7 @@ _Dependencies_
 
 === Base
 
-[plantuml,Base,svg]
+[plantuml,Base,png]
 ----
 @startuml(id=Base)
 title Base - Containers
@@ -4182,7 +4318,7 @@ _Dependencies_
 
 === Excel
 
-[plantuml,Excel,svg]
+[plantuml,Excel,png]
 ----
 @startuml(id=Excel)
 title Excel - Containers
@@ -4323,7 +4459,7 @@ Folder: \subdomains\excel\testing
 
 === Spring
 
-[plantuml,Spring,svg]
+[plantuml,Spring,png]
 ----
 @startuml(id=Spring)
 title Spring - Containers
@@ -4389,7 +4525,7 @@ _Dependencies_
 
 === XDocReport
 
-[plantuml,XDocReport,svg]
+[plantuml,XDocReport,png]
 ----
 @startuml(id=XDocReport)
 title XDocReport - Containers
@@ -4461,7 +4597,7 @@ _Dependencies_
 
 == Tooling
 
-[plantuml,Tooling,svg]
+[plantuml,Tooling,png]
 ----
 @startuml(id=Tooling)
 title Tooling - Containers
@@ -4667,7 +4803,7 @@ _Dependencies_
 
 == Regression Tests
 
-[plantuml,Regression Tests,svg]
+[plantuml,Regression Tests,png]
 ----
 @startuml(id=Regression_Tests)
 title Regression Tests - Containers
@@ -4770,7 +4906,7 @@ _Dependencies_
 
 == Incubator
 
-[plantuml,Incubator,svg]
+[plantuml,Incubator,png]
 ----
 @startuml(id=Incubator)
 title Incubator - Containers
@@ -4816,7 +4952,7 @@ _Dependencies_
 
 === Kroviz Client
 
-[plantuml,Kroviz Client,svg]
+[plantuml,Kroviz Client,png]
 ----
 @startuml(id=Kroviz_Client)
 title Kroviz Client - Containers
@@ -4858,7 +4994,7 @@ Folder: \incubator\clients\kroviz
 
 === JavaFX Viewer
 
-[plantuml,JavaFX Viewer,svg]
+[plantuml,JavaFX Viewer,png]
 ----
 @startuml(id=JavaFX_Viewer)
 title JavaFX Viewer - Containers
@@ -4986,7 +5122,7 @@ Folder: \incubator\viewers\javafx\viewer
 
 === Vaadin Viewer
 
-[plantuml,Vaadin Viewer,svg]
+[plantuml,Vaadin Viewer,png]
 ----
 @startuml(id=Vaadin_Viewer)
 title Vaadin Viewer - Containers
@@ -5107,7 +5243,7 @@ Folder: \incubator\viewers\vaadin\viewer
 
 == Legacy
 
-[plantuml,Legacy,svg]
+[plantuml,Legacy,png]
 ----
 @startuml(id=Legacy)
 title Legacy - Containers
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
index 8e2eded..5803ef1 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
@@ -46,7 +46,7 @@ This configuration mechanism does not consider any schema-auto-creation configur
 isis.persistence.jpa. +
 create-schema-sql-template
 
-| 
+|  CREATE SCHEMA IF NOT EXISTS %S
 | SQL syntax to create a DB schema.
 
 This template is passed through schemaName) to make the actual SQL statement thats to be used against the configured data-source.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
index e679f8a..9c23f1b 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
@@ -54,7 +54,7 @@ This setting can be overridden on a case-by-case basis using ``Action#commandPub
 isis.applib.annotation.action. +
 domain-event.post-for-default
 
-| 
+|  true
 | Influences whether an ``ActionDomainEvent`` should be published (on the internal ``EventBusService``) whenever an action is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
@@ -104,7 +104,7 @@ The value of this can be overridden on a case-by-case basis using ``CollectionLa
 isis.applib.annotation. +
 collection-layout.paged
 
-| 
+|  12
 | Defines the default number of objects that are shown in a "parented" collection of a domain object, result of invoking an action.
 
 This can be overridden on a case-by-case basis using ``CollectionLayout#paged()``.
@@ -115,7 +115,7 @@ This can be overridden on a case-by-case basis using ``CollectionLayout#paged()`
 isis.applib.annotation.collection. +
 domain-event.post-for-default
 
-| 
+|  true
 | Influences whether an ``CollectionDomainEvent`` should be published (on the internal ``EventBusService``) whenever a collection is being interacted with.
 
 Up to two different events can be fired during an interaction, with the event's phase determining which (hide, disable)Subscribers can influence the behaviour at each of these phases.
@@ -189,7 +189,7 @@ The default is ``false``, because otherwise the mere presence of ``@DomainObject
 isis.applib.annotation. +
 domain-object-layout.paged
 
-| 
+|  25
 | Defines the default number of objects that are shown in a "standalone" collection obtained as the result of invoking an action.
 
 This can be overridden on a case-by-case basis using ``DomainObjectLayout#paged()``.
@@ -220,7 +220,7 @@ domain-object. +
 created-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectCreatedEvent`` should be published (on the internal ``EventBusService``) whenever a domain object has been created using ``FactoryService``.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(createdLifecycleEvent=...) for the domain object in question.
@@ -262,7 +262,7 @@ domain-object. +
 loaded-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectLoadedEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ has been loaded from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(loadedLifecycleEvent=...) for the domain object in question.
@@ -281,7 +281,7 @@ domain-object. +
 persisted-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectPersistedEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ has been persisted (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistedLifecycleEvent=...) for the domain object in question.
@@ -300,7 +300,7 @@ domain-object. +
 persisting-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectPersistingEvent`` should be published (on the internal ``EventBusService``) whenever a domain _entity_ is about to be persisting (for the first time) to the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(persistingLifecycleEvent=...) for the domain object in question.
@@ -319,7 +319,7 @@ domain-object. +
 removing-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectRemovingEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ is about to be removed (that is, deleted) from the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(removingLifecycleEvent=...) for the domain object in question.
@@ -340,7 +340,7 @@ domain-object. +
 updated-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectUpdatedEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ has been updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatedLifecycleEvent=...) for the domain object in question.
@@ -359,7 +359,7 @@ domain-object. +
 updating-lifecycle-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``ObjectUpdatingEvent`` should be published (on the internal ``EventBusService``) whenever a persistent domain _entity_ is about to be updated in the persistence store.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the @DomainObject(updatingLifecycleEvent=...) for the domain object in question.
@@ -413,7 +413,7 @@ This setting can be overridden on a case-by-case basis using ``Property#commandD
 isis.applib.annotation.property. +
 domain-event.post-for-default
 
-| 
+|  true
 | Influences whether an ``PropertyDomainEvent`` should be published (on the internal ``EventBusService``) whenever an property is being interacted with.
 
 Up to five different events can be fired during an interaction, with the event's phase determining which (hide, disable, validate, executing and executed). Subscribers can influence the behaviour at each of these phases.
@@ -445,7 +445,7 @@ view-model-layout. +
 css-class-ui-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``CssClassUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``CssClassUiEvent#setCssClass(String)`` change) the CSS classes that are used.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#cssClassUiEvent()`` @ViewModelLayout(cssClassEvent=...)} for the domain object in question:
@@ -461,7 +461,7 @@ isis.applib.annotation. +
 view-model-layout.icon-ui-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``IconUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``IconUiEvent#setIconName(String)`` change) the icon that is used.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#iconUiEvent()`` @ViewModelLayout(iconEvent=...)} for the domain object in question:
@@ -477,7 +477,7 @@ isis.applib.annotation. +
 view-model-layout.layout-ui-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``LayoutUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``LayoutUiEvent#setLayout(String)`` change) the layout that is used.
 
 If a different layout value has been set, then a layout in the form ``xml`` use used (where ``zzz`` is the name of the layout).
@@ -495,7 +495,7 @@ isis.applib.annotation. +
 view-model-layout.title-ui-event. +
 post-for-default
 
-| 
+|  true
 | Influences whether an ``TitleUiEvent`` should be published (on the internal ``EventBusService``) whenever a view model (annotated with @ViewModel) is about to be rendered in the UI - thereby allowing subscribers to optionally ``TitleUiEvent#setTitle(String)`` change) the title that is used.
 
 The algorithm for determining whether (and what type of) an event is sent depends on the value of the ``ViewModelLayout#titleUiEvent()`` @ViewModelLayout(titleEvent=...)} for the domain object in question:
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
index a2dcbfe..a194ad1 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.core.meta-model~pre.adoc[]
 isis.core.meta-model. +
 filter-visibility
 
-| 
+|  true
 | Whether domain objects to which the current user does not have visibility access should be rendered within collections or drop-down choices/autocompletes.
 
 One reason this filtering may be necessary is for multi-tenanted applications, whereby an end-user should only be able to "see" what data that they own. For efficiency, the application should only query for objects that the end-user owns. This configuration property acts as a safety net to prevent the end-user from viewing domain objects _even if_ those domain objects were rehydrated from the persistence store.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
index a55b77f..d288d75 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.introspector.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.core.meta-model.introspector~pre.adoc[]
 isis.core.meta-model.introspector. +
 lock-after-full-introspection
 
-| 
+|  true
 | If true, then no new specifications will be allowed to be loaded once introspection has been complete.
 
 Only applies if the introspector is configured to perform full introspection up-front (either because of ``IntrospectionMode#FULL`` or ``IntrospectionMode#LAZY_UNLESS_PRODUCTION`` when in production); otherwise is ignored.
@@ -49,7 +49,7 @@ For now this is _experimental_. Leave this disabled (the default).
 isis.core.meta-model.introspector. +
 validate-incrementally
 
-| 
+|  true
 | If true, then metamodel validation is performed after any new specification has been loaded (after the initial bootstrapping).
 
 This does _not_ apply if the introspector is configured to perform full introspection up-front AND when the metamodel is locked after initial bootstrapping (because in that case the lock check will simply prevent any new specs from being loaded). But it will apply otherwise.
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
index 468b40d..d95c383 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.meta-model.validator.adoc
@@ -17,7 +17,7 @@ isis.core.meta-model.validator. +
 action-collection-parameter- +
 choices
 
-| 
+|  true
 | Whether to validate that any actions that accept action parameters have either a corresponding choices or auto-complete for that action parameter, or are associated with a collection of the appropriate type.
 
 
@@ -26,7 +26,7 @@ choices
 isis.core.meta-model.validator. +
 allow-deprecated
 
-| 
+|  true
 | This setting is used to determine whether the use of such deprecated features is allowed.
 
 If not allowed, then metamodel validation errors will be flagged.
@@ -39,7 +39,7 @@ Note that this settings has no effect if the programming model has been configur
 isis.core.meta-model.validator. +
 ensure-unique-object-types
 
-| 
+|  true
 | Whether to ensure that the object type of all objects (which can be set either explicitly using ``DomainObject#objectType()`` or ``DomainService#objectType()``, or can be inferred implicitly using a variety of mechanisms) must be unique with respect to all other object types.
 
 It is _highly advisable_ to leave this set as enabled (the default), and to also use explicit types (see ``#isExplicitObjectType()``.
@@ -62,7 +62,7 @@ isis.core.meta-model.validator. +
 jaxb-view-model. +
 date-time-type-adapter
 
-| 
+|  true
 | If set, then ensures that for all properties of JAXB-style view models where the property's type is a date or time, then that property has been correctly annotated with @``XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
@@ -80,7 +80,7 @@ jaxb-view-model.no-arg-constructor
 isis.core.meta-model.validator. +
 jaxb-view-model.not-abstract
 
-| 
+|  true
 | If set, then ensures that all JAXB-style view models are concrete classes, not abstract.
 
 
@@ -89,7 +89,7 @@ jaxb-view-model.not-abstract
 isis.core.meta-model.validator. +
 jaxb-view-model.not-inner-class
 
-| 
+|  true
 | If set, then ensures that all JAXB-style view models are either top-level classes or nested static classes (in other words, checks that they are not anonymous, local nor nested non-static classes).
 
 
@@ -99,7 +99,7 @@ isis.core.meta-model.validator. +
 jaxb-view-model. +
 reference-type-adapter
 
-| 
+|  true
 | If set, then ensures that for all properties of JAXB-style view models where the property's type is an entity, then that entity's type has been correctly annotated with @``XmlJavaTypeAdapter`` (so that the property's value can be converted into a serializable form).
 
 
@@ -108,7 +108,7 @@ reference-type-adapter
 isis.core.meta-model.validator. +
 jdoql.from-clause
 
-| 
+|  true
 | If set, then ensures that the 'FROM' clause within any JDOQL ``@Query``s annotations relates to a known entity type, and moreover that that type is compatible with the type on which the annotation appears: meaning its either a supertype of or the same type as the annotated type.
 
 
@@ -117,7 +117,7 @@ jdoql.from-clause
 isis.core.meta-model.validator. +
 jdoql.variables-clause
 
-| 
+|  true
 | If set, then ensures that the 'VARIABLES' clause within any JDOQL ``@Query``s relates to a known entity type.
 
 
@@ -139,7 +139,7 @@ Note that this aspect of the programming model relates to the ``hideXxx`` and ``
 isis.core.meta-model.validator. +
 parallelize
 
-| 
+|  true
 | Whether to perform metamodel validation in parallel.
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
index 1451ea6..cec5660 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.core.runtime-services.adoc
@@ -52,7 +52,7 @@ override.to
 isis.core.runtime-services.email. +
 port
 
-| 
+|  587
 | The port to use for sending email.
 
 
@@ -107,7 +107,7 @@ If not specified, then the sender's email address will be used instead.
 isis.core.runtime-services.email. +
 socket-connection-timeout
 
-| 
+|  2000
 | The maximum number of millseconds to wait to obtain a socket connection before timing out.
 
 
@@ -116,7 +116,7 @@ socket-connection-timeout
 isis.core.runtime-services.email. +
 socket-timeout
 
-| 
+|  2000
 | The maximum number of millseconds to wait to obtain a socket before timing out.
 
 
@@ -125,7 +125,7 @@ socket-timeout
 isis.core.runtime-services.email. +
 throw-exception-on-fail
 
-| 
+|  true
 | If an email fails to send, whether to propagate the exception (meaning that potentially the end-user might see the exception), or whether instead to just indicate failure through the return value of the method (List, List, String, String, DataSource...) that's being called.
 
 
@@ -134,7 +134,7 @@ throw-exception-on-fail
 isis.core.runtime-services.email. +
 tls.enabled
 
-| 
+|  true
 | Whether TLS encryption should be started (that is, ``STARTTLS``).
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
index 6a0fe5a..c8d5222 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.extensions.adoc
@@ -16,7 +16,7 @@ include::../section-hooks/isis.extensions~pre.adoc[]
 isis.extensions.command-replay. +
 analyser.exception.enabled
 
-| 
+|  true
 | null
 
 
@@ -25,7 +25,7 @@ analyser.exception.enabled
 isis.extensions.command-replay. +
 analyser.result.enabled
 
-| 
+|  true
 | null
 
 
@@ -34,7 +34,7 @@ analyser.result.enabled
 isis.extensions.command-replay. +
 batch-size
 
-| 
+|  10
 | null
 
 
@@ -80,7 +80,7 @@ isis.extensions.command-replay. +
 quartz-replicate-and-replay-job. +
 repeat-interval
 
-| 
+|  10000
 | Number of milliseconds before running again.
 
 
@@ -90,7 +90,7 @@ isis.extensions.command-replay. +
 quartz-replicate-and-replay-job. +
 start-delay
 
-| 
+|  15000
 | Number of milliseconds before starting the job.
 
 
@@ -99,7 +99,8 @@ start-delay
 isis.extensions.command-replay. +
 quartz-session.roles
 
-| 
+|  isisModuleExtCommandReplaySecondar +
+yRole
 | null
 
 
@@ -108,7 +109,8 @@ quartz-session.roles
 isis.extensions.command-replay. +
 quartz-session.user
 
-| 
+|  isisModuleExtCommandReplaySecondar +
+yUser
 | The user that runs the replay session secondary.
 
 
@@ -157,7 +159,7 @@ For more information, check the usage of the ``methods`` init parameter for http
 isis.extensions.cors. +
 allowed-origins
 
-| 
+|  *
 | Which origins are allowed to make CORS requests.
 
 The default is the wildcard ("*") but this can be made more restrictive if necessary.
@@ -170,7 +172,7 @@ For more information, check the usage of the ``origins`` init parameter for http
 isis.extensions.cors. +
 exposed-headers
 
-| 
+|  Authorization
 | Which HTTP headers are exposed in a CORS request.
 
 For more information, check the usage of the ``headers`` init parameter for https://github.com/eBay/cors-filter[EBay CORSFilter].
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
index b5745c5..60fb591 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.adoc
@@ -16,7 +16,9 @@ include::../section-hooks/isis.persistence.jdo-datanucleus~pre.adoc[]
 isis.persistence.jdo-datanucleus. +
 class-metadata-loaded-listener
 
-| 
+|  org.apache.isis.persistence.jdo. +
+datanucleus.config. +
+CreateSchemaObjectFromClassMetadata
 | null
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
index 307b8d7..8c216cc 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.persistence.jdo-datanucleus.impl.adoc
@@ -65,7 +65,7 @@ impl.datanucleus.cache.level2.mode
 isis.persistence.jdo-datanucleus. +
 impl.datanucleus.cache.level2.type
 
-| 
+|  none
 | Name of the type of Level 2 Cache to use.
 
 Can be used to interface with external caching products. Use "none" to turn off L2 caching.
@@ -136,7 +136,7 @@ isis.persistence.jdo-datanucleus. +
 impl.datanucleus. +
 persistence-unit-load-classes
 
-| 
+|  true
 | Used when we have specified the persistence-unit name for a PMF/EMF and where we want the datastore "tables" for all classes of that persistence-unit loading up into the StoreManager.
 
 Defaults to true, which is the opposite of DataNucleus' own default. (The reason that DN defaults to false is because some databases are slow so such an operation would slow down the startup process).
@@ -212,7 +212,7 @@ isis.persistence.jdo-datanucleus. +
 impl.datanucleus.schema. +
 validate-all
 
-| 
+|  true
 | See also ``json`` (camelCasing instead of kebab-casing).
 
 NOTE: this config property isn't used by the framework, but is provided as a convenience for IDE autocomplete.
@@ -375,7 +375,8 @@ isis.persistence.jdo-datanucleus. +
 impl.javax.jdo. +
 persistence-manager-factory-class
 
-| 
+|  org.datanucleus.api.jdo. +
+JDOPersistenceManagerFactory
 | See also ``json`` (camelCasing instead of kebab-casing).
 
 NOTE: changing this property from its default is used to enable the flyway extension (in combination with ``Schema#isAutoCreateAll()``
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
index 6bc178e..a026acc 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.value-types.adoc
@@ -88,7 +88,7 @@ big-integer.format
 isis.value-types.java-sql.date. +
 format
 
-| 
+|  medium
 | Configures the formats understood by ``JavaSqlDateValueSemanticsProvider``. @deprecated
 
 
@@ -97,7 +97,7 @@ format
 isis.value-types.java-sql.time. +
 format
 
-| 
+|  short
 | Configures the formats understood by ``JavaSqlTimeValueSemanticsProvider``. @deprecated
 
 
@@ -106,7 +106,7 @@ format
 isis.value-types.java-sql. +
 timestamp.format
 
-| 
+|  short
 | Configures the formats understood by ``JavaSqlTimeStampValueSemanticsProvider``. @deprecated
 
 
@@ -115,7 +115,7 @@ timestamp.format
 isis.value-types.java-time. +
 local-date-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``LocalDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -124,7 +124,7 @@ local-date-time.format
 isis.value-types.java-time. +
 local-date.format
 
-| 
+|  medium
 | Configures the formats understood by ``LocalDateValueSemanticsProvider``. @deprecated
 
 
@@ -133,7 +133,7 @@ local-date.format
 isis.value-types.java-time. +
 local-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``LocalTimeValueSemanticsProvider``. @deprecated
 
 
@@ -142,7 +142,7 @@ local-time.format
 isis.value-types.java-time. +
 offset-date-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``OffsetDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -151,7 +151,7 @@ offset-date-time.format
 isis.value-types.java-time. +
 offset-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``OffsetTimeValueSemanticsProvider``. @deprecated
 
 
@@ -160,7 +160,7 @@ offset-time.format
 isis.value-types.java-time. +
 zoned-date-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``ZonedDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -169,7 +169,7 @@ zoned-date-time.format
 isis.value-types.java-util.date. +
 format
 
-| 
+|  medium
 | Configures the formats understood by ``JavaUtilDateValueSemanticsProvider``. @deprecated
 
 
@@ -178,7 +178,7 @@ format
 isis.value-types.joda.date-time. +
 format
 
-| 
+|  medium
 | Configures the formats understood by ``JodaDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -187,7 +187,7 @@ format
 isis.value-types.joda. +
 local-date-time.format
 
-| 
+|  medium
 | Configures the formats understood by ``JodaLocalDateTimeValueSemanticsProvider``. @deprecated
 
 
@@ -196,7 +196,7 @@ local-date-time.format
 isis.value-types.joda.local-date. +
 format
 
-| 
+|  medium
 | Configures the formats understood by ``JodaLocalDateValueSemanticsProvider``. @deprecated
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
index 69b0e77..bd7ce2a 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.viewer.wicket.adoc
@@ -23,7 +23,9 @@ isis.viewer.wicket.ajax-debug-mode
 [[isis.viewer.wicket.app]]
 isis.viewer.wicket.app
 
-| 
+|  org.apache.isis.viewer.wicket. +
+viewer.wicketapp. +
+IsisWicketApplication
 | Specifies the subclass of ``IsisWicketApplication`` that is used to bootstrap Wicket.
 
 There is usually very little reason to change this from its default.
@@ -105,7 +107,7 @@ A typical value is ``js``. This will result in this file being read from the ``s
 isis.viewer.wicket.application. +
 menubars-layout-xml
 
-| 
+|  menubars.layout.xml
 | Specifies the file name containing the menubars.
 
 This is expected to be a local resource.
@@ -116,7 +118,7 @@ This is expected to be a local resource.
 isis.viewer.wicket.application. +
 name
 
-| 
+|  Apache Isis â„¢
 | Identifies the application on the sign-in page (unless a sign-in image is configured) and on top-left in the header (unless a header image is configured).
 
 
@@ -135,7 +137,7 @@ If present, then this will be shown in the footer on every page as well as on th
 [[isis.viewer.wicket.base-path]]
 isis.viewer.wicket.base-path
 
-| 
+|  /wicket/
 | The base path at which the Wicket viewer is mounted.
 
 
@@ -144,7 +146,7 @@ isis.viewer.wicket.base-path
 isis.viewer.wicket. +
 bookmarked-pages.max-size
 
-| 
+|  15
 | Specifies the maximum number of bookmarks to show.
 
 These are aged out on an MRU-LRU basis.
@@ -155,7 +157,7 @@ These are aged out on an MRU-LRU basis.
 isis.viewer.wicket. +
 bookmarked-pages.show-chooser
 
-| 
+|  true
 | Whether the panel providing linsk to previously visited object should be accessible from the top-left of the header.
 
 
@@ -165,7 +167,7 @@ isis.viewer.wicket. +
 bookmarked-pages. +
 show-drop-down-on-footer
 
-| 
+|  true
 | Whether the drop-down list of previously visited objects should be shown in the footer.
 
 
@@ -174,7 +176,7 @@ show-drop-down-on-footer
 isis.viewer.wicket.breadcrumbs. +
 enabled
 
-| 
+|  true
 | Whether to enable the 'where am i' feature, in other words the breadcrumbs.
 
 
@@ -183,7 +185,7 @@ enabled
 isis.viewer.wicket.breadcrumbs. +
 max-parent-chain-length
 
-| 
+|  64
 | null
 
 
@@ -214,7 +216,7 @@ NOTE: For further discussion, see for example https://stackoverflow.com/question
 [[isis.viewer.wicket.date-pattern]]
 isis.viewer.wicket.date-pattern
 
-| 
+|  dd-MM-yyyy
 | The pattern used for rendering and parsing dates.
 
 Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
@@ -225,7 +227,7 @@ Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()
 isis.viewer.wicket.date-picker. +
 max-date
 
-| 
+|  2100-01-01T00:00:00.000Z
 | Defines the first date available in the date picker.
 
 As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
@@ -236,7 +238,7 @@ As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in I
 isis.viewer.wicket.date-picker. +
 min-date
 
-| 
+|  1900-01-01T00:00:00.000Z
 | Defines the first date available in the date picker.
 
 As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in ISO format (per https://github.com/moment/moment/issues/1407).
@@ -247,7 +249,7 @@ As per http://eonasdan.github.io/bootstrap-datetimepicker/Options/#maxdate, in I
 isis.viewer.wicket. +
 date-time-pattern
 
-| 
+|  dd-MM-yyyy HH:mm
 | The pattern used for rendering and parsing date/times.
 
 Each Date scalar panel will use ``#getDatePattern()`` or ``#getDateTimePattern()`` depending on its date type. In the case of panels with a date time picker, the pattern will be dynamically adjusted so that it can be used by the https://github.com/Eonasdan/bootstrap-datetimepicker[Bootstrap Datetime Picker] component (which uses http://momentjs.com/docs/#/parsing/string-format/[Moment.js formats], rather than those of regular Java code).
@@ -320,7 +322,7 @@ tables
 isis.viewer.wicket. +
 max-title-length-in-tables
 
-| 
+|  12
 | The maximum number of characters to use to render the title of a domain object (alongside the icon) in any table, if not otherwise overridden by either ``#getMaxTitleLengthInParentedTables()`` or ``#getMaxTitleLengthInStandaloneTables()``.
 
 If truncated, then the remainder of the title will be replaced with ellipses (...).
@@ -332,7 +334,7 @@ isis.viewer.wicket. +
 prevent-double-click-for-form- +
 submit
 
-| 
+|  true
 | Whether to disable a form submit button after it has been clicked, to prevent users causing an error if they do a double click. This behaviour is enabled by default, but can be disabled using this flag.
 
 
@@ -342,7 +344,7 @@ isis.viewer.wicket. +
 prevent-double-click-for-no-arg- +
 action
 
-| 
+|  true
 | Whether to disable a no-arg action button after it has been clicked, to prevent users causing an error if they do a double click.
 
 This behaviour is enabled by default, but can be disabled using this flag.
@@ -376,7 +378,7 @@ This behaviour is disabled by default; the viewer will update the existing page
 isis.viewer.wicket.remember-me. +
 cookie-key
 
-| 
+|  isisWicketRememberMe
 | If the "remember me" feature is available, specifies the key to hold the encrypted credentials in the cookie.
 
 
@@ -412,7 +414,7 @@ isis.viewer.wicket. +
 replace-disabled-tag-with-readonly- +
 tag
 
-| 
+|  true
 | In Firefox and more recent versions of Chrome 54+, cannot copy out of disabled fields; instead we use the readonly attribute (https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute)
 
 This behaviour is enabled by default but can be disabled using this flag
@@ -422,7 +424,7 @@ This behaviour is enabled by default but can be disabled using this flag
 [[isis.viewer.wicket.show-footer]]
 isis.viewer.wicket.show-footer
 
-| 
+|  true
 | Whether to show the footer menu bar.
 
 This is enabled by default.
@@ -433,7 +435,7 @@ This is enabled by default.
 isis.viewer.wicket. +
 strip-wicket-tags
 
-| 
+|  true
 | Whether Wicket tags should be stripped from the markup.
 
 By default this is enabled, in other words Wicket tags are stripped. Please be aware that if tags are _not_ stripped, then this may break CSS rules on some browsers.
@@ -473,7 +475,7 @@ isis.viewer.wicket.themes.enabled
 [[isis.viewer.wicket.themes.initial]]
 isis.viewer.wicket.themes.initial
 
-| 
+|  Flatly
 | The initial theme to use.
 
 Expected to be in the list of ``#getEnabled()`` themes.
@@ -483,7 +485,9 @@ Expected to be in the list of ``#getEnabled()`` themes.
 [[isis.viewer.wicket.themes.provider]]
 isis.viewer.wicket.themes.provider
 
-| 
+|  org.apache.isis.viewer.wicket.ui. +
+components.widgets.themepicker. +
+IsisWicketThemeSupportDefault
 | Specifies an implementation of ``IsisWicketThemeSupport``
 
 
@@ -501,7 +505,7 @@ show-chooser
 isis.viewer.wicket. +
 use-indicator-for-form-submit
 
-| 
+|  true
 | Whether to show an indicator for a form submit button that it has been clicked.
 
 This behaviour is enabled by default.
@@ -512,7 +516,7 @@ This behaviour is enabled by default.
 isis.viewer.wicket. +
 use-indicator-for-no-arg-action
 
-| 
+|  true
 | Whether to show an indicator for a no-arg action button that it has been clicked.
 
 This behaviour is enabled by default.
@@ -542,7 +546,7 @@ This behaviour is disabled by default. Please be aware that enabloing it can sub
 isis.viewer.wicket. +
 timestamp-pattern
 
-| 
+|  yyyy-MM-dd HH:mm:ss.SSS
 | @deprecated - seemingly unused
 
 
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc b/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
index 9526703..984e90f 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/resteasy.adoc
@@ -48,7 +48,7 @@ resteasy.jaxrs.app.registration
 [[resteasy.jaxrs.default-path]]
 resteasy.jaxrs.default-path
 
-| 
+|  /restful
 | The path at which the RO viewer should be mounted.
 
 Note that this is used rather than ``prefix`` because there is _NO_ implementation of ``Application``, so we rely on it being automatically created.
diff --git a/isis-tooling.yml b/isis-tooling.yml
index 77fba0f..356bc14 100644
--- a/isis-tooling.yml
+++ b/isis-tooling.yml
@@ -45,6 +45,9 @@ global:
     Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
 
     Valuetypes: org.apache.isis.valuetypes.*
+    "Asciidoc": "org.apache.isis.valuetypes:isis-valuetypes-asciidoc.*"
+    "Markdown": "org.apache.isis.valuetypes:isis-valuetypes-markdown.*"
+    "SSE": "org.apache.isis.valuetypes:isis-valuetypes-ssec.*"
 
     Mappings: org.apache.isis.mappings
     #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
diff --git a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
index 57d0451..77fba0f 100644
--- a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
+++ b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
@@ -17,35 +17,84 @@
 #  under the License.
 #
 
-projectDoc:
-  description: "These tables summarize all Maven artifacts available with _Apache Isis_."
-  fixOrphanedAdocIncludeStatements: true
+global:
   namespacePartsSkipCount: 3
-  artifactGroups:
-    Base: org.apache.isis
+
+  sections:
+    App: org.apache.isis.app.*
+    Mavendeps: org.apache.isis.mavendeps.*
+    Testing: org.apache.isis.testing.*
+    Examples: org.apache.isis.examples.*
+
+    Root: org.apache.isis
     Commons: org.apache.isis.commons.*
+
     Core: org.apache.isis.core.*
-    App: org.apache.isis.app.*
 
-    Mavendeps: org.apache.isis.mavendeps.*
-    Mappings: org.apache.isis.mappings.*
+    Persistence: org.apache.isis.persistence
+    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+
+    Security: org.apache.isis.security
+    Bypass: "org.apache.isis.security:isis-security-bypass.*"
+    Keycloak: "org.apache.isis.security:isis-security-keycloak.*"
+    Shiro: "org.apache.isis.security:isis-security-shiro.*"
 
-    Persistence: org.apache.isis.persistence.*
-    Security: org.apache.isis.security.*
+    Viewer: org.apache.isis.viewer
+    "Restful Objects": "org.apache.isis.viewer:isis-viewer-restfulobjects.*"
+    Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
 
     Valuetypes: org.apache.isis.valuetypes.*
-    Viewer: org.apache.isis.viewer.*
 
-    Testing: org.apache.isis.testing.*
-    Regression Tests: org.apache.isis.regressiontests.*
+    Mappings: org.apache.isis.mappings
+    #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
+    "JAX-RS Client Library": "org.apache.isis.mappings:isis-mappings-jaxrsclient.*"
+    #Minio: "org.apache.isis.mappings:isis-mappings-minio.*"
+    "REST Client": "org.apache.isis.mappings:isis-mappings-restclient.*"
+    #"Slack Library": "org.apache.isis.mappings:isis-mappings-slack.*"
 
-    Extensions: org.apache.isis.extensions.*
-    Subdomains: org.apache.isis.subdomains.*
+    Extensions: org.apache.isis.extensions
+    "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
+    "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
+    "Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
+    "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
+    "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
+    #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
+    "Security: Secman": "org.apache.isis.security:isis-extensions-secman.*"
+    #"Security: Session Log": "org.apache.isis.security:isis-extensions-session-log.*"
+    "Security: Shiro LDAP Realm": "org.apache.isis.security:isis-extensions-shiro-realm-ldap.*"
+    "RO Viewer: CORS": "org.apache.isis.security:isis-extensions-cors.*"
+    "Wicket Viewer: Excel Download": "org.apache.isis.security:isis-extensions-exceldownload.*"
+    "Wicket Viewer: Full Calendar": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+    #"Wicket Viewer: Gmap3": "org.apache.isis.security:isis-extensions-gmap3.*"
+    "Wicket Viewer: Pdf.js": "org.apache.isis.security:isis-extensions-fullcalendar.*"
 
-    Tooling: org.apache.isis.tooling.*
+    Subdomains: org.apache.isis.subdomains
+    "Base": "org.apache.isis.subdomains:isis-subdomains-base.*"
+    #"docx": "org.apache.isis.subdomains:isis-subdomains-docx.*"
+    "Excel": "org.apache.isis.subdomains:isis-subdomains-excel.*"
+    #"Freemarker": "org.apache.isis.subdomains:isis-subdomains-freemarker.*"
+    #"OGNL": "org.apache.isis.subdomains:isis-subdomains-ognl.*"
+    #"PDF Box": "org.apache.isis.subdomains:isis-subdomains-pdfbox.*"
+    "Spring": "org.apache.isis.subdomains:isis-subdomains-spring.*"
+    "XDocReport": "org.apache.isis.subdomains:isis-subdomains-xdocreport.*"
+    #"Zip": "org.apache.isis.subdomains:isis-subdomains-zip.*"
 
-    Examples: org.apache.isis.examples.*
+    "Tooling": org.apache.isis.tooling.*
+    "Regression Tests": org.apache.isis.regressiontests.*
+
+    Incubator: org.apache.isis.incubator
+    "Kroviz Client": "org.apache.isis.incubator.clients:isis-client-kroviz.*"
+    "JavaFX Viewer": "org.apache.isis.incubator.viewer:isis-viewer-javafx.*"
+    "Vaadin Viewer": "org.apache.isis.incubator.viewer:isis-viewer-vaadin.*"
 
-    Incubator: org.apache.isis.incubator.*
     Legacy: org.apache.isis.legacy.*
 
+
+commands:
+  overview:
+    description: "These tables summarize all Maven artifacts available with _Apache Isis_."
+
+  index:
+    fixOrphanedAdocIncludeStatements: true
+


[isis] 04/04: ISIS-2444: adds {@index} to classes to add to the global index.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9dad87bb5e4818ec7af33ecb211b9ef04a57c8e6
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Jan 31 22:57:00 2021 +0000

    ISIS-2444: adds {@index} to classes to add to the global index.
---
 .../org/apache/isis/applib/AbstractViewModel.java  |  5 +-
 .../org/apache/isis/applib/IsisModuleApplib.java   |  5 +-
 .../isis/applib/RecreatableDomainObject.java       |  3 +-
 .../java/org/apache/isis/applib/ViewModel.java     |  1 +
 .../adapters/AbstractValueSemanticsProvider.java   |  4 +-
 .../isis/applib/adapters/DefaultsProvider.java     |  3 +-
 .../isis/applib/adapters/EncoderDecoder.java       |  1 +
 .../isis/applib/adapters/EncodingException.java    |  3 +-
 .../isis/applib/adapters/ParsingException.java     |  1 +
 .../apache/isis/applib/annotation/Defaulted.java   |  8 +-
 .../isis/applib/annotation/DomainObjectLayout.java |  3 +-
 .../isis/applib/annotation/EntityChangeKind.java   |  8 +-
 .../client/RepresentationTypeSimplifiedV2.java     | 47 +++++------
 .../org/apache/isis/applib/clock/VirtualClock.java | 45 ++++++-----
 .../apache/isis/applib/events/EventObjectBase.java |  1 -
 .../applib/events/domain/AbstractDomainEvent.java  |  2 +-
 .../applib/events/domain/ActionDomainEvent.java    |  2 +-
 .../events/domain/CollectionDomainEvent.java       |  2 +-
 .../applib/events/domain/PropertyDomainEvent.java  |  2 +-
 .../events/lifecycle/AbstractLifecycleEvent.java   |  2 +-
 .../events/lifecycle/ObjectCreatedEvent.java       |  2 +-
 .../applib/events/lifecycle/ObjectLoadedEvent.java |  2 +-
 .../events/lifecycle/ObjectPersistedEvent.java     |  2 +-
 .../events/lifecycle/ObjectPersistingEvent.java    |  2 +-
 .../events/lifecycle/ObjectRemovingEvent.java      |  4 +-
 .../events/lifecycle/ObjectUpdatedEvent.java       |  4 +-
 .../events/lifecycle/ObjectUpdatingEvent.java      |  4 +-
 .../isis/applib/events/ui/AbstractUiEvent.java     |  2 +-
 .../isis/applib/events/ui/CssClassUiEvent.java     |  3 +-
 .../apache/isis/applib/events/ui/IconUiEvent.java  |  4 +-
 .../isis/applib/events/ui/LayoutUiEvent.java       |  3 +-
 .../apache/isis/applib/events/ui/TitleUiEvent.java |  3 +-
 .../unrecoverable/DomainModelException.java        |  2 +
 .../unrecoverable/MetaModelException.java          |  3 +
 .../unrecoverable/NoAuthenticatorException.java    |  2 +
 .../unrecoverable/ObjectNotFoundException.java     |  4 +-
 .../unrecoverable/ObjectPersistenceException.java  |  3 +
 .../unrecoverable/ReflectiveActionException.java   |  3 +
 .../unrecoverable/RepositoryException.java         |  2 +-
 .../unrecoverable/UnexpectedCallException.java     |  2 +
 .../unrecoverable/UnknownTypeException.java        |  3 +
 .../java/org/apache/isis/applib/graph/Edge.java    |  7 +-
 .../java/org/apache/isis/applib/graph/Vertex.java  |  5 +-
 .../isis/applib/graph/tree/LazyTreeNode.java       |  3 +
 .../apache/isis/applib/jaxb/DataTypeFactory.java   |  3 +
 .../JavaSqlXMLGregorianCalendarMarshalling.java    |  3 +
 .../isis/applib/jaxb/JavaTimeJaxbAdapters.java     |  5 +-
 .../JavaTimeXMLGregorianCalendarMarshalling.java   |  3 +
 .../isis/applib/jaxb/JodaTimeJaxbAdapters.java     |  3 +
 .../JodaTimeXMLGregorianCalendarMarshalling.java   |  3 +
 .../applib/jaxb/PersistentEntitiesAdapter.java     |  2 +-
 .../isis/applib/jaxb/PersistentEntityAdapter.java  |  2 +-
 .../isis/applib/jaxb/PrimitiveJaxbAdapters.java    |  3 +
 .../applib/layout/component/ActionLayoutData.java  |  3 +-
 .../layout/component/ActionLayoutDataOwner.java    |  3 +
 .../layout/component/CollectionLayoutData.java     |  2 +
 .../component/CollectionLayoutDataOwner.java       |  4 +-
 .../layout/component/CssClassFaPosition.java       |  3 +
 .../layout/component/DomainObjectLayoutData.java   |  2 +
 .../component/DomainObjectLayoutDataOwner.java     |  3 +
 .../isis/applib/layout/component/FieldSet.java     |  2 +
 .../applib/layout/component/FieldSetOwner.java     |  3 +
 .../isis/applib/layout/component/HasNamed.java     |  3 +
 .../isis/applib/layout/component/MemberRegion.java |  2 +
 .../applib/layout/component/MemberRegionOwner.java |  3 +
 .../apache/isis/applib/layout/component/Owned.java |  3 +
 .../apache/isis/applib/layout/component/Owner.java |  4 +-
 .../layout/component/PropertyLayoutData.java       |  2 +
 .../layout/component/ServiceActionLayoutData.java  |  2 +
 .../component/ServiceActionLayoutDataOwner.java    |  3 +
 .../org/apache/isis/applib/layout/grid/Grid.java   |  2 +
 .../isis/applib/layout/grid/GridAbstract.java      |  4 +-
 .../applib/layout/grid/bootstrap3/BS3ClearFix.java |  3 +
 .../layout/grid/bootstrap3/BS3ClearFixHidden.java  |  2 +
 .../layout/grid/bootstrap3/BS3ClearFixVisible.java |  2 +
 .../isis/applib/layout/grid/bootstrap3/BS3Col.java |  2 +
 .../applib/layout/grid/bootstrap3/BS3Element.java  |  3 +
 .../layout/grid/bootstrap3/BS3ElementAbstract.java |  4 +-
 .../applib/layout/grid/bootstrap3/BS3Grid.java     |  2 +
 .../isis/applib/layout/grid/bootstrap3/BS3Row.java |  2 +
 .../layout/grid/bootstrap3/BS3RowContent.java      |  1 +
 .../layout/grid/bootstrap3/BS3RowContentOwner.java |  3 +
 .../applib/layout/grid/bootstrap3/BS3RowOwner.java |  3 +
 .../isis/applib/layout/grid/bootstrap3/BS3Tab.java |  2 +
 .../applib/layout/grid/bootstrap3/BS3TabGroup.java |  2 +
 .../layout/grid/bootstrap3/BS3TabGroupOwner.java   |  3 +
 .../applib/layout/grid/bootstrap3/BS3TabOwner.java |  3 +
 .../isis/applib/layout/grid/bootstrap3/Size.java   |  2 +
 .../applib/layout/grid/bootstrap3/SizeSpan.java    |  3 +
 .../applib/layout/grid/bootstrap3/WithinGrid.java  |  3 +
 .../org/apache/isis/applib/layout/links/Link.java  |  3 +
 .../isis/applib/layout/menubars/HasNamed.java      |  5 +-
 .../apache/isis/applib/layout/menubars/Menu.java   |  3 +
 .../isis/applib/layout/menubars/MenuBar.java       |  5 +-
 .../isis/applib/layout/menubars/MenuBars.java      |  3 +
 .../applib/layout/menubars/MenuBarsAbstract.java   |  5 +-
 .../isis/applib/layout/menubars/MenuSection.java   |  5 +-
 .../applib/layout/menubars/bootstrap3/BS3Menu.java |  2 +
 .../layout/menubars/bootstrap3/BS3MenuBar.java     |  2 +
 .../layout/menubars/bootstrap3/BS3MenuBars.java    |  6 +-
 .../layout/menubars/bootstrap3/BS3MenuSection.java |  4 +-
 .../apache/isis/applib/mixins/MixinConstants.java  |  3 +
 .../org/apache/isis/applib/mixins/dto/Dto.java     |  3 +
 .../isis/applib/mixins/dto/Dto_downloadXml.java    |  3 +
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |  5 +-
 .../mixins/layout/Object_downloadLayoutXml.java    |  3 +
 .../applib/mixins/layout/Object_openRestApi.java   |  3 +
 .../mixins/layout/Object_rebuildMetamodel.java     |  3 +
 .../metamodel/Object_downloadMetamodelXml.java     |  5 +-
 .../mixins/metamodel/Object_objectIdentifier.java  | 13 ++--
 .../applib/mixins/metamodel/Object_objectType.java |  7 +-
 .../isis/applib/query/AllInstancesQuery.java       |  2 +-
 .../org/apache/isis/applib/query/NamedQuery.java   |  8 +-
 .../java/org/apache/isis/applib/query/Query.java   | 24 +++---
 .../services/acceptheader/AcceptHeaderService.java |  2 -
 .../applib/services/bookmark/BookmarkHolder.java   |  3 +-
 .../services/bookmark/BookmarkHolder_lookup.java   |  7 +-
 .../services/bookmark/BookmarkHolder_object.java   |  7 +-
 .../isis/applib/services/clock/ClockService.java   | 11 ++-
 .../CommandDtoProcessorForActionAbstract.java      |  2 +
 .../CommandDtoProcessorForPropertyAbstract.java    |  2 +
 .../spi/CommandDtoProcessorServiceIdentity.java    |  4 +-
 .../services/confview/ConfigurationMenu.java       |  7 +-
 .../services/confview/ConfigurationProperty.java   |  1 -
 .../confview/ConfigurationViewService.java         |  1 -
 .../services/conmap/ContentMappingService.java     |  4 +-
 .../isis/applib/services/error/SimpleTicket.java   |  2 +
 .../exceprecog/ExceptionRecognizerAbstract.java    |  7 +-
 .../exceprecog/ExceptionRecognizerForType.java     | 27 ++++---
 .../exceprecog/ExceptionRecognizerService.java     |  3 +-
 .../applib/services/factory/FactoryService.java    |  8 +-
 .../applib/services/grid/GridLoaderService.java    |  3 +-
 .../isis/applib/services/grid/GridService.java     |  3 +-
 .../applib/services/grid/GridSystemService.java    |  3 +-
 .../apache/isis/applib/services/health/Health.java |  1 -
 .../applib/services/health/HealthCheckService.java |  3 +-
 .../isis/applib/services/hint/HintStore.java       |  2 +-
 .../isis/applib/services/i18n/LocaleProvider.java  |  3 +-
 .../applib/services/i18n/TranslatableString.java   |  1 -
 .../applib/services/i18n/TranslationService.java   |  1 -
 .../isis/applib/services/layout/LayoutService.java |  3 +-
 .../applib/services/layout/LayoutServiceMenu.java  |  3 +-
 .../applib/services/linking/DeepLinkService.java   |  4 +-
 .../services/menu/MenuBarsLoaderService.java       |  3 +-
 .../isis/applib/services/menu/MenuBarsService.java |  3 +-
 .../applib/services/message/MessageService.java    |  3 +-
 .../services/metamodel/MetaModelService.java       |  3 +-
 .../applib/services/metrics/MetricsService.java    |  3 +-
 .../queryresultscache/QueryResultCacheControl.java |  3 +-
 .../queryresultscache/QueryResultsCache.java       |  4 +-
 .../applib/services/registry/ServiceRegistry.java  |  3 +-
 .../applib/services/repository/EntityState.java    |  6 +-
 .../applib/services/scratchpad/Scratchpad.java     |  4 +-
 .../services/session/SessionLoggingService.java    |  5 +-
 .../session/SessionLoggingServiceLogging.java      |  3 +-
 .../TableColumnOrderForCollectionTypeAbstract.java |  3 +
 .../services/tablecol/TableColumnOrderService.java |  3 +-
 .../services/urlencoding/UrlEncodingService.java   |  3 +-
 ...rlEncodingServiceUsingBaseEncodingAbstract.java |  5 +-
 .../isis/applib/services/user/RoleMemento.java     |  7 +-
 .../isis/applib/services/user/UserMemento.java     | 47 +++++------
 .../services/userreg/EmailNotificationService.java |  1 +
 .../isis/applib/services/userreg/UserDetails.java  |  3 +-
 .../userreg/events/EmailEventAbstract.java         |  2 +
 .../userreg/events/PasswordResetEvent.java         |  1 +
 .../applib/services/wrapper/InvalidException.java  |  2 -
 .../services/wrapper/control/ExceptionHandler.java |  1 -
 .../wrapper/control/ExceptionHandlerAbstract.java  |  3 +
 .../services/wrapper/events/AccessEvent.java       |  1 +
 .../wrapper/listeners/InteractionAdapter.java      |  3 +-
 .../wrapper/listeners/InteractionListener.java     |  3 +-
 .../services/xactn/TransactionalProcessor.java     | 31 ++++----
 .../snapshot/SnapshottableWithInclusions.java      |  3 +-
 .../isis/applib/spec/AbstractSpecification.java    |  3 +-
 .../isis/applib/spec/AbstractSpecification2.java   |  3 +-
 .../org/apache/isis/applib/spec/Specification.java |  3 +-
 .../apache/isis/applib/spec/Specification2.java    |  3 +-
 .../apache/isis/applib/spec/SpecificationAnd.java  |  2 +-
 .../apache/isis/applib/spec/SpecificationNot.java  |  2 +-
 .../apache/isis/applib/spec/SpecificationOr.java   |  2 +-
 .../apache/isis/applib/types/DescriptionType.java  |  3 +
 .../isis/applib/types/MemberIdentifierType.java    |  2 +
 .../apache/isis/applib/types/TargetActionType.java |  2 +
 .../apache/isis/applib/types/TargetClassType.java  |  2 +
 .../java/org/apache/isis/applib/util/Enums.java    |  2 +-
 .../apache/isis/applib/util/ObjectContracts.java   |  3 +-
 .../org/apache/isis/applib/util/ReasonBuffer.java  |  2 +
 .../org/apache/isis/applib/util/ReasonBuffer2.java |  2 +
 .../java/org/apache/isis/applib/util/Reasons.java  |  2 +
 .../org/apache/isis/applib/util/TitleBuffer.java   | 14 +++-
 .../isis/applib/util/TitleBufferException.java     |  3 +
 .../isis/applib/util/schema/ChangesDtoUtils.java   |  2 +-
 .../isis/applib/util/schema/CommandDtoUtils.java   |  2 +-
 .../isis/applib/util/schema/CommonDtoUtils.java    | 54 ++++++-------
 .../applib/util/schema/InteractionDtoUtils.java    |  7 +-
 .../util/schema/MemberExecutionDtoUtils.java       | 13 ++--
 .../java/org/apache/isis/applib/value/Blob.java    | 32 ++++----
 .../isis/applib/value/NamedWithMimeType.java       | 16 ++--
 .../org/apache/isis/schema/IsisModuleSchema.java   |  3 +
 .../commandlog/impl/CommandSubscriberForJdo.java   |  3 +
 .../impl/IsisModuleExtCommandLogImpl.java          |  3 +
 .../impl/mixins/HasUniqueId_command.java           |  2 +
 .../mixins/HasUsername_recentCommandsByUser.java   |  3 +
 .../impl/mixins/Object_recentCommands.java         |  4 +
 .../commandlog/impl/mixins/T_recent.java           |  3 +-
 .../commandlog/impl/ui/CommandServiceMenu.java     |  5 +-
 .../primary/IsisModuleExtCommandReplayPrimary.java |  3 +
 .../primary/config/PrimaryConfig.java              |  3 +
 .../primary/mixins/Object_openOnSecondary.java     |  3 +
 .../primary/restapi/CommandRetrievalService.java   |  3 +
 .../primary/spiimpl/CaptureResultOfCommand.java    |  4 +
 .../primary/ui/CommandReplayOnPrimaryService.java  |  3 +
 .../IsisModuleExtCommandReplaySecondary.java       |  3 +
 .../commandreplay/secondary/SecondaryStatus.java   |  3 +
 .../secondary/analyser/CommandReplayAnalyser.java  |  3 +
 .../analyser/CommandReplayAnalyserException.java   |  3 +
 .../analyser/CommandReplayAnalyserResult.java      |  3 +
 .../analysis/CommandReplayAnalysisService.java     |  3 +
 .../secondary/clock/TickingClockService.java       |  4 +-
 .../secondary/config/SecondaryConfig.java          |  3 +
 .../executor/CommandExecutorServiceWithTime.java   |  2 +
 .../secondary/fetch/CommandFetcher.java            |  5 +-
 .../secondary/job/ReplicateAndReplayJob.java       |  7 +-
 .../secondary/job/SecondaryStatusData.java         |  3 +
 .../jobcallables/ReplicateAndRunCommands.java      |  4 +-
 .../secondary/mixins/CommandJdo_exclude.java       |  3 +
 .../secondary/mixins/CommandJdo_replayQueue.java   |  3 +
 .../secondary/mixins/Object_openOnPrimary.java     |  3 +
 .../spi/ReplayCommandExecutionController.java      |  2 +
 .../ui/CommandReplayOnSecondaryService.java        |  3 +
 .../applib/IsisModuleIncModelApplib.java           |  3 +
 .../modelannotation/applib/annotation/Model.java   |  6 +-
 .../metamodel/IsisModuleExtModelAnnotation.java    |  3 +
 .../SupportingMethodValidatorRefinerFactory.java   | 26 +++----
 .../services/IncubatorMetaModelPlugin.java         |  5 +-
 .../extensions/quartz/IsisModuleExtQuartzImpl.java |  3 +
 .../quartz/context/JobExecutionData.java           |  2 +
 .../spring/AutowiringSpringBeanJobFactory.java     |  3 +
 .../secman/api/IsisModuleExtSecmanApi.java         |  3 +
 .../extensions/secman/api/SecmanConfiguration.java | 21 ++---
 .../isis/extensions/secman/api/SecurityRealm.java  |  3 +
 .../secman/api/SecurityRealmCharacteristic.java    |  3 +
 .../secman/api/SecurityRealmService.java           |  3 +
 .../api/encryption/PasswordEncryptionService.java  |  3 +
 .../encryption/PasswordEncryptionServiceNone.java  |  3 +
 .../secman/api/events/UserCreatedEvent.java        | 21 ++---
 .../api/permission/ApplicationPermission.java      | 46 +++++------
 .../api/permission/ApplicationPermissionMode.java  |  2 +
 .../ApplicationPermissionRepository.java           | 27 ++++---
 .../api/permission/ApplicationPermissionRule.java  |  2 +
 .../api/permission/ApplicationPermissionValue.java |  2 +
 .../permission/ApplicationPermissionValueSet.java  | 10 ++-
 .../permission/PermissionsEvaluationService.java   |  2 +
 .../PermissionsEvaluationServiceAbstract.java      |  3 +
 ...PermissionsEvaluationServiceAllowBeatsVeto.java |  2 +
 ...PermissionsEvaluationServiceVetoBeatsAllow.java |  2 +
 .../secman/api/role/ApplicationRole.java           | 19 +++--
 .../secman/api/role/ApplicationRoleRepository.java | 11 ++-
 .../secman/api/tenancy/ApplicationTenancy.java     | 17 ++--
 .../api/tenancy/ApplicationTenancyEvaluator.java   |  2 +
 .../api/tenancy/ApplicationTenancyRepository.java  |  9 ++-
 .../extensions/secman/api/tenancy/HasAtPath.java   |  2 +
 .../extensions/secman/api/user/AccountType.java    |  8 +-
 .../secman/api/user/ApplicationUser.java           | 24 +++---
 .../secman/api/user/ApplicationUserRepository.java | 11 ++-
 .../secman/api/user/ApplicationUserStatus.java     |  2 +
 .../IsisModuleExtSecmanEncryptionJbcrypt.java      |  3 +
 .../PasswordEncryptionServiceUsingJBcrypt.java     |  3 +
 .../secman/model/IsisModuleExtSecmanModel.java     |  3 +
 .../secman/model/app/user/MeService.java           |  5 +-
 .../jdo/IsisModuleExtSecmanPersistenceJdo.java     |  3 +
 .../secman/jdo/seed/SeedSecurityModuleService.java |  7 +-
 .../jdo/seed/SeedUsersAndRolesFixtureScript.java   |  4 +-
 .../secman/jdo/seed/scripts/GlobalTenancy.java     |  3 +
 ...xtFixturesFixtureResultsRoleAndPermissions.java |  3 +
 .../IsisExtSecmanAdminRoleAndPermissions.java      |  5 +-
 .../jdo/seed/scripts/IsisExtSecmanAdminUser.java   |  7 +-
 .../IsisExtSecmanFixtureRoleAndPermissions.java    |  2 +
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |  4 +-
 .../jpa/IsisModuleExtSecmanPersistenceJpa.java     |  3 +
 .../secman/jpa/seed/SeedSecurityModuleService.java |  7 +-
 .../jpa/seed/SeedUsersAndRolesFixtureScript.java   |  4 +-
 .../secman/jpa/seed/scripts/GlobalTenancy.java     |  3 +
 ...xtFixturesFixtureResultsRoleAndPermissions.java |  3 +
 .../IsisExtSecmanAdminRoleAndPermissions.java      |  5 +-
 .../jpa/seed/scripts/IsisExtSecmanAdminUser.java   |  7 +-
 .../IsisExtSecmanFixtureRoleAndPermissions.java    |  2 +
 ...IsisExtSecmanRegularUserRoleAndPermissions.java |  4 +-
 ...tyModuleAppUserRegistrationServiceAbstract.java | 12 +--
 .../shiro/IsisModuleExtSecmanRealmShiro.java       |  3 +
 .../shiro/IsisModuleExtSecmanShiroRealm.java       | 27 ++++---
 .../services/SecurityRealmServiceUsingShiro.java   |  5 +-
 .../extensions/secman/shiro/util/ShiroUtils.java   |  5 +-
 .../realm/impl/IsisLdapContextFactory.java         |  2 +
 .../shirorealmldap/realm/impl/IsisLdapRealm.java   |  2 +
 .../impl/IsisModuleExtShiroRealmLdapImpl.java      |  3 +
 .../cors/impl/IsisModuleExtCorsImpl.java           | 19 +++--
 .../ui/IsisModuleExtExcelDownloadUi.java           |  3 +
 .../ui/components/CollectionContentsAsExcel.java   |  2 +
 .../CollectionContentsAsExcelFactory.java          |  6 +-
 .../fullcalendar/applib/CalendarEventable.java     |  3 +
 .../fullcalendar/applib/Calendarable.java          | 15 ++--
 .../applib/IsisModuleExtFullCalendarApplib.java    |  3 +
 .../spi/CalendarableDereferencingService.java      |  1 +
 .../fullcalendar/applib/value/CalendarEvent.java   | 30 +++----
 .../ui/component/IsisModuleExtFullCalendarUi.java  |  3 +
 .../pdfjs/applib/annotations/PdfJsViewer.java      |  2 +
 .../wicket/pdfjs/applib/config/PdfJsConfig.java    |  3 +
 .../viewer/wicket/pdfjs/applib/config/Scale.java   |  3 +
 .../pdfjs/applib/spi/PdfJsViewerAdvisor.java       | 10 ++-
 .../wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java      |  3 +
 isis-tooling.yml                                   |  2 +-
 .../applib/IsisModuleExtJaxRsClientApplib.java     |  3 +
 .../jaxrsclient/applib/client/JaxRsClient.java     |  3 +
 .../jaxrsclient/applib/client/JaxRsResponse.java   |  3 +
 .../impl/IsisModuleExtJaxRsClientImpl.java         |  3 +
 .../restclient/ActionParameterListBuilder.java     | 15 ++--
 .../restclient/IsisModuleExtRestClient.java        |  3 +
 .../isis/extensions/restclient/ResponseDigest.java | 91 +++++++++++-----------
 .../isis/extensions/restclient/RestfulClient.java  | 32 ++++----
 .../extensions/restclient/RestfulClientConfig.java | 11 ++-
 .../restclient/RestfulClientException.java         |  3 +
 .../restclient/auth/BasicAuthFilter.java           |  7 +-
 .../restclient/log/ClientConversationFilter.java   | 19 +++--
 .../restclient/log/ClientConversationLogger.java   | 15 ++--
 .../jdo/applib/IsisModulePersistenceJdoApplib.java |  3 +
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.java  |  3 +
 .../changetracking/JdoLifecycleListener.java       |  2 +
 .../mixins/Persistable_datanucleusIdLong.java      |  5 +-
 .../mixins/Persistable_datanucleusVersionLong.java |  5 +-
 .../Persistable_datanucleusVersionTimestamp.java   |  5 +-
 .../mixins/Persistable_downloadJdoMetadata.java    |  5 +-
 .../applib/IsisBookmarkConverter.java              |  3 +
 .../applib/IsisLocalResourcePathConverter.java     |  3 +
 .../typeconverters/applib/IsisMarkupConverter.java |  3 +
 .../applib/IsisPasswordConverter.java              |  3 +
 .../JavaAwtBufferedImageByteArrayConverter.java    |  5 +-
 .../schema/v2/IsisChangesDtoConverter.java         |  3 +
 .../schema/v2/IsisCommandDtoConverter.java         |  3 +
 .../schema/v2/IsisInteractionDtoConverter.java     |  3 +
 .../schema/v2/IsisOidDtoConverter.java             |  3 +
 .../time/IsoOffsetTimeConverter.java               |  5 +-
 .../time/IsoZonedDateTimeConverter.java            |  5 +-
 .../applib/ByteArrayBlobRdbmsMapping.java          |  3 +
 .../valuetypes/applib/IsisBlobMapping.java         |  3 +
 .../valuetypes/applib/IsisClobMapping.java         |  3 +
 .../JpaEntityInjectionPointResolver.java           | 18 ++---
 .../jpa/eclipselink/IsisModuleJpaEclipselink.java  | 56 ++++++-------
 .../security/bypass/IsisModuleSecurityBypass.java  |  4 +-
 .../bypass/authentication/AuthenticatorBypass.java |  2 +
 .../bypass/authorization/AuthorizorBypass.java     |  3 +
 .../keycloak/IsisModuleSecurityKeycloak.java       |  4 +-
 .../authentication/AuthenticatorKeycloak.java      |  7 +-
 .../keycloak/authorization/AuthorizorKeycloak.java |  3 +
 .../keycloak/webmodule/KeycloakFilter.java         |  9 ++-
 .../keycloak/webmodule/WebModuleKeycloak.java      |  2 +
 .../security/shiro/IsisModuleSecurityShiro.java    |  4 +-
 .../shiro/authentication/AuthenticatorShiro.java   | 14 ++--
 .../shiro/authorization/AuthorizorShiro.java       | 14 ++--
 .../shiro/authorization/IsisPermission.java        | 11 ++-
 .../authorization/IsisPermissionResolver.java      |  3 +
 .../security/shiro/webmodule/WebModuleShiro.java   | 27 +++----
 .../isis/subdomains/base/applib/Chained.java       | 19 +++--
 .../apache/isis/subdomains/base/applib/Dflt.java   |  3 +
 .../applib/IsisModuleSubdomainsBaseApplib.java     |  3 +
 .../isis/subdomains/base/applib/PowerType.java     |  2 +
 .../apache/isis/subdomains/base/applib/Titled.java |  5 +-
 .../isis/subdomains/base/applib/TitledEnum.java    |  4 +-
 .../base/applib/services/BaseServicesModule.java   |  3 +
 .../applib/services/calendar/CalendarService.java  | 13 ++--
 .../base/applib/types/DescriptionType.java         |  3 +
 .../subdomains/base/applib/types/FqcnType.java     |  3 +
 .../subdomains/base/applib/types/MoneyType.java    |  3 +
 .../subdomains/base/applib/types/NameType.java     |  3 +
 .../subdomains/base/applib/types/NotesType.java    |  3 +
 .../base/applib/types/ObjectIdentifierType.java    |  3 +
 .../base/applib/types/PercentageType.java          |  3 +
 .../base/applib/types/ProperNameType.java          |  3 +
 .../base/applib/types/ReferenceType.java           |  3 +
 .../subdomains/base/applib/types/TitleType.java    |  3 +
 .../base/applib/types/UrlTemplateType.java         |  3 +
 .../subdomains/base/applib/types/UserNameType.java |  3 +
 .../isis/subdomains/base/applib/types/XxxType.java |  3 +
 .../subdomains/base/applib/utils/ClassUtils.java   | 13 ++--
 .../base/applib/utils/JodaPeriodUtils.java         |  2 +
 .../subdomains/base/applib/utils/MathUtils.java    |  6 +-
 .../subdomains/base/applib/utils/MessageUtils.java |  3 +
 .../subdomains/base/applib/utils/StringUtils.java  |  7 +-
 .../subdomains/base/applib/utils/TitleBuilder.java |  4 +
 .../base/applib/valuetypes/AbstractInterval.java   | 19 +++--
 .../base/applib/valuetypes/LocalDateInterval.java  | 23 +++---
 .../isis/subdomains/base/applib/valuetypes/VT.java | 12 ++-
 .../base/applib/with/WithCodeComparable.java       |  5 +-
 .../base/applib/with/WithCodeGetter.java           |  8 +-
 .../base/applib/with/WithCodeUnique.java           |  3 +
 .../applib/with/WithDescriptionComparable.java     |  7 +-
 .../base/applib/with/WithDescriptionGetter.java    |  8 +-
 .../base/applib/with/WithDescriptionUnique.java    |  3 +
 .../subdomains/base/applib/with/WithInterval.java  | 13 ++--
 .../base/applib/with/WithIntervalContiguous.java   | 55 ++++++-------
 .../base/applib/with/WithIntervalMutable.java      |  5 +-
 .../base/applib/with/WithNameComparable.java       |  6 +-
 .../base/applib/with/WithNameGetter.java           |  8 +-
 .../base/applib/with/WithNameUnique.java           |  3 +
 .../base/applib/with/WithReferenceComparable.java  |  7 +-
 .../base/applib/with/WithReferenceGetter.java      |  8 +-
 .../base/applib/with/WithReferenceUnique.java      |  3 +
 .../subdomains/base/applib/with/WithSequence.java  |  4 +-
 .../subdomains/base/applib/with/WithStartDate.java |  3 +
 .../base/applib/with/WithTitleComparable.java      |  5 +-
 .../base/applib/with/WithTitleGetter.java          |  8 +-
 .../base/applib/with/WithTitleUnique.java          |  3 +
 .../applib/IsisModuleSubdomainsExcelApplib.java    |  3 +
 .../excel/applib/dom/AggregationType.java          |  3 +
 .../excel/applib/dom/ExcelMetaDataEnabled.java     |  6 +-
 .../subdomains/excel/applib/dom/ExcelService.java  | 11 ++-
 .../subdomains/excel/applib/dom/HyperLink.java     |  4 +-
 .../subdomains/excel/applib/dom/PivotColumn.java   |  3 +
 .../excel/applib/dom/PivotDecoration.java          |  3 +
 .../isis/subdomains/excel/applib/dom/PivotRow.java |  3 +
 .../subdomains/excel/applib/dom/PivotValue.java    |  3 +
 .../subdomains/excel/applib/dom/RowHandler.java    |  5 +-
 .../excel/applib/dom/WorksheetContent.java         |  3 +
 .../subdomains/excel/applib/dom/WorksheetSpec.java |  3 +
 .../excel/applib/dom/util/AnnotationList.java      |  4 +-
 .../excel/applib/dom/util/AnnotationTriplet.java   |  3 +
 .../applib/dom/util/ExcelFileBlobConverter.java    |  7 +-
 .../excel/applib/dom/util/ExcelServiceImpl.java    | 15 ++--
 .../subdomains/excel/applib/dom/util/Mode.java     |  2 +-
 .../excel/applib/dom/util/PivotUtils.java          |  3 +
 .../excel/applib/dom/util/SheetPivoter.java        |  3 +
 .../subdomains/excel/testing/ExcelFixture.java     |  8 +-
 .../subdomains/excel/testing/ExcelFixture2.java    |  4 +-
 .../excel/testing/ExcelFixtureRowHandler.java      |  3 +
 .../excel/testing/ExcelFixtureWorkbookHandler.java |  3 +
 .../excel/testing/FixtureAwareRowHandler.java      |  5 +-
 .../testing/IsisModuleSubdomainsExcelTesting.java  |  3 +
 .../applib/IsisModuleSubdomainsSpringApplib.java   |  3 +
 .../spring/applib/service/BeanDescriptor.java      | 13 ++--
 .../spring/applib/service/ContextBeans.java        |  3 +
 .../spring/applib/service/SpringBeansService.java  |  2 +
 .../IsisModuleSubdomainsXDocReportApplib.java      |  3 +
 .../xdocreport/applib/service/OutputType.java      |  3 +
 .../xdocreport/applib/service/XDocReportModel.java |  3 +
 .../applib/service/XDocReportService.java          |  8 +-
 .../applib/IsisModuleTestingFakeDataApplib.java    |  3 +
 .../services/AbstractRandomValueGenerator.java     |  3 +
 .../fakedata/applib/services/Addresses.java        |  3 +
 .../fakedata/applib/services/BigDecimals.java      |  3 +
 .../fakedata/applib/services/BigIntegers.java      |  3 +
 .../testing/fakedata/applib/services/Books.java    |  3 +
 .../testing/fakedata/applib/services/Booleans.java |  3 +
 .../testing/fakedata/applib/services/Bytes.java    |  3 +
 .../testing/fakedata/applib/services/Chars.java    |  3 +
 .../fakedata/applib/services/Collections.java      |  3 +
 .../testing/fakedata/applib/services/Comms.java    |  3 +
 .../fakedata/applib/services/CreditCards.java      |  3 +
 .../testing/fakedata/applib/services/Doubles.java  |  3 +
 .../testing/fakedata/applib/services/Enums.java    |  3 +
 .../fakedata/applib/services/FakeDataService.java  |  5 +-
 .../testing/fakedata/applib/services/Floats.java   |  3 +
 .../testing/fakedata/applib/services/Integers.java |  3 +
 .../fakedata/applib/services/IsisBlobs.java        |  3 +
 .../fakedata/applib/services/IsisClobs.java        |  5 +-
 .../fakedata/applib/services/IsisPasswords.java    |  3 +
 .../fakedata/applib/services/J8DateTimes.java      |  3 +
 .../fakedata/applib/services/J8LocalDates.java     |  3 +
 .../fakedata/applib/services/J8Periods.java        |  3 +
 .../fakedata/applib/services/JavaSqlDates.java     |  3 +
 .../applib/services/JavaSqlTimestamps.java         |  3 +
 .../fakedata/applib/services/JavaUtilDates.java    |  5 +-
 .../fakedata/applib/services/JodaDateTimes.java    |  9 ++-
 .../fakedata/applib/services/JodaLocalDates.java   |  7 +-
 .../fakedata/applib/services/JodaPeriods.java      |  6 +-
 .../testing/fakedata/applib/services/Longs.java    |  3 +
 .../testing/fakedata/applib/services/Lorem.java    |  3 +
 .../testing/fakedata/applib/services/Names.java    |  3 +
 .../testing/fakedata/applib/services/Shorts.java   |  3 +
 .../testing/fakedata/applib/services/Strings.java  |  3 +
 .../testing/fakedata/applib/services/Urls.java     |  3 +
 .../testing/fakedata/applib/services/Uuids.java    |  3 +
 .../h2console/ui/IsisModuleTestingH2ConsoleUi.java |  3 +
 .../h2console/ui/services/H2ManagerMenu.java       |  3 +
 .../h2console/ui/webmodule/WebModuleH2Console.java | 49 ++++++------
 .../hsqldbmgr/dom/IsisModuleExtHsqldbMgr.java      |  3 +
 .../hsqldbmgr/dom/services/HsqlDbManagerMenu.java  |  3 +
 .../applib/ExceptionRecognizerTranslate.java       |  3 +
 .../applib/IsisIntegrationTestAbstract.java        | 10 +--
 .../applib/IsisInteractionHandler.java             | 21 ++---
 .../integtestsupport/applib/ThrowableMatchers.java |  3 +
 .../applib/swagger/SwaggerExporter.java            |  6 +-
 .../applib/validate/DomainModelValidator.java      | 18 ++---
 .../applib/IsisModuleTestingSpecSupportApplib.java |  3 +
 .../integration/ObjectFactoryForIntegration.java   |  6 +-
 .../isis/testing/specsupport/applib/specs/V.java   |  6 +-
 .../IsisModuleTestingUnitTestSupportApplib.java    |  3 +
 .../applib/bean/AbstractBeanPropertiesTest.java    |  3 +
 .../bean/FixtureDatumFactoriesForAnyPojo.java      |  3 +
 .../bean/FixtureDatumFactoriesForApplib.java       |  3 +
 .../applib/bean/FixtureDatumFactoriesForJoda.java  |  3 +
 .../applib/bean/FixtureDatumFactoriesForTime.java  |  6 +-
 .../unittestsupport/applib/bean/PojoTester.java    | 49 ++++++------
 .../core/AbstractApplyToAllContractTest.java       |  4 +-
 ...irectionalRelationshipContractTestAbstract.java |  4 +-
 .../applib/core/bidir/Instantiator.java            |  5 +-
 .../applib/core/bidir/InstantiatorSimple.java      |  5 +-
 .../applib/core/bidir/Instantiators.java           |  5 +-
 .../ComparableContractTest_compareTo.java          |  2 +
 .../core/comparable/ComparableContractTester.java  |  4 +-
 .../unittestsupport/applib/core/files/Files.java   |  4 +-
 .../applib/core/jaxb/JaxbMatchers.java             |  4 +-
 .../applib/core/jmocking/Imposterisers.java        |  3 +
 .../core/jmocking/InjectIntoJMockAction.java       |  4 +
 .../applib/core/jmocking/IsisActions.java          |  3 +
 .../applib/core/jmocking/JMockActions.java         |  3 +
 .../applib/core/jmocking/JUnitRuleMockery2.java    | 14 ++--
 .../applib/core/jmocking/PostponedAction.java      |  9 ++-
 .../core/soap/SoapEndpointPublishingRule.java      |  4 +-
 .../applib/core/soap/SoapEndpointSpec.java         |  3 +
 .../sortedsets/SortedSetsContractTestAbstract.java |  4 +-
 .../applib/core/streams/NullPrintStream.java       |  2 +-
 .../applib/core/utils/CollectUtils.java            |  4 +-
 .../applib/core/utils/IndentPrinter.java           |  6 +-
 .../applib/core/utils/ReflectUtils.java            |  4 +-
 .../applib/core/utils/StringUtils.java             |  4 +-
 .../core/value/ValueTypeContractTestAbstract.java  |  4 +-
 .../applib/dom/assertions/Asserting.java           |  6 +-
 .../applib/dom/matchers/IsisMatchers.java          | 17 ++--
 .../dom/privatecons/PrivateConstructorTester.java  |  3 +
 .../applib/dom/reflect/ReflectUtils.java           | 11 ++-
 .../applib/dom/repo/FinderInteraction.java         |  6 +-
 .../applib/IsisModuleValAsciidocApplib.java        |  3 +
 .../asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java  |  3 +
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |  1 +
 .../metamodel/IsisModuleValAsciidocMetaModel.java  |  5 +-
 .../IsisModuleValAsciidocPersistenceJdoDn5.java    |  3 +
 .../jdo/dn5/converters/IsisAsciiDocConverter.java  |  3 +
 .../ui/wkt/IsisModuleValAsciidocUiWkt.java         |  3 +
 .../applib/IsisModuleValMarkdownApplib.java        |  3 +
 .../markdown/applib/jaxb/MarkdownJaxbAdapter.java  |  3 +
 .../markdown/applib/value/Converter.java           | 15 ++--
 .../metamodel/IsisModuleValMarkdownMetaModel.java  |  3 +
 .../IsisModuleValMarkdownPersistenceJdoDn5.java    |  3 +
 .../jdo/dn5/converters/IsisMarkdownConverter.java  |  3 +
 .../ui/wkt/IsisModuleValMarkdownUiWkt.java         |  3 +
 .../sse/applib/IsisModuleValSseApplib.java         |  3 +
 .../sse/applib/annotations/ServerSentEvents.java   |  5 +-
 .../sse/applib/annotations/SseSource.java          |  7 +-
 .../valuetypes/sse/applib/service/SseChannel.java  |  5 +-
 .../valuetypes/sse/applib/service/SseService.java  |  5 +-
 .../sse/ui/wkt/IsisModuleValSseUiWkt.java          |  5 +-
 .../sse/ui/wkt/services/SseServiceDefault.java     | 17 ++--
 .../wkt/webmodule/WebModuleServerSentEvents.java   |  4 +-
 .../IsisModuleViewerRestfulObjectsApplib.java      |  3 +
 .../restfulobjects/applib/JsonRepresentation.java  |  2 +
 .../restfulobjects/applib/LinkRepresentation.java  |  3 +
 .../isis/viewer/restfulobjects/applib/Rel.java     |  3 +
 .../restfulobjects/applib/RelDefinition.java       |  2 +
 .../restfulobjects/applib/RepresentationType.java  |  9 ++-
 .../restfulobjects/applib/RestfulHttpMethod.java   |  4 +-
 .../restfulobjects/applib/RestfulMediaType.java    |  6 +-
 .../restfulobjects/applib/RestfulRequest.java      |  3 +
 .../restfulobjects/applib/RestfulResponse.java     |  3 +
 .../applib/boot/BootstrapResource.java             |  5 +-
 .../AbstractObjectMemberRepresentation.java        |  8 +-
 .../domainobjects/ActionResultRepresentation.java  | 15 ++--
 .../DomainObjectMemberRepresentation.java          |  2 +
 .../domainobjects/DomainObjectRepresentation.java  |  3 +
 .../applib/domainobjects/DomainObjectResource.java |  5 +-
 .../applib/domainobjects/DomainRepresentation.java |  7 +-
 .../domainobjects/DomainServiceResource.java       |  5 +-
 .../applib/domainobjects/ListRepresentation.java   |  3 +
 .../domainobjects/ObjectActionRepresentation.java  |  4 +-
 .../ObjectCollectionRepresentation.java            |  5 +-
 .../ObjectPropertyRepresentation.java              |  4 +-
 .../domainobjects/ScalarValueRepresentation.java   |  4 +-
 .../AbstractTypeMemberRepresentation.java          |  4 +-
 .../ActionDescriptionRepresentation.java           |  4 +-
 .../ActionParameterDescriptionRepresentation.java  |  4 +-
 .../CollectionDescriptionRepresentation.java       |  4 +-
 .../domaintypes/DomainTypeRepresentation.java      |  4 +-
 .../applib/domaintypes/DomainTypeResource.java     | 17 ++--
 .../PropertyDescriptionRepresentation.java         |  3 +
 .../TypeActionResultRepresentation.java            |  3 +
 .../applib/domaintypes/TypeListRepresentation.java |  4 +-
 .../applib/dtos/ScalarValueDtoV2.java              | 15 ++--
 .../applib/errors/ErrorRepresentation.java         |  4 +-
 .../applib/health/HealthRepresentation.java        |  3 +
 .../applib/health/HealthResource.java              |  5 +-
 .../applib/homepage/HomePageRepresentation.java    |  3 +
 .../applib/homepage/HomePageResource.java          |  5 +-
 .../applib/menubars/MenuBarsResource.java          |  4 +-
 .../applib/user/UserRepresentation.java            |  3 +
 .../restfulobjects/applib/user/UserResource.java   |  5 +-
 .../restfulobjects/applib/util/JsonMapper.java     |  3 +
 .../restfulobjects/applib/util/JsonNodeUtils.java  |  3 +
 .../restfulobjects/applib/util/MediaTypes.java     |  3 +
 .../viewer/restfulobjects/applib/util/Parser.java  |  3 +
 .../restfulobjects/applib/util/PathNode.java       |  6 +-
 .../applib/util/UrlEncodingUtils.java              |  3 +
 .../applib/version/VersionRepresentation.java      |  3 +
 .../applib/version/VersionResource.java            |  5 +-
 ...isModuleViewerRestfulObjectsJaxrsResteasy4.java |  3 +
 .../conneg/RestfulObjectsJaxbWriterForXml.java     | 29 +++----
 .../webmodule/WebModuleJaxrsResteasy4.java         | 13 +---
 .../IsisModuleRestfulObjectsRendering.java         |  7 +-
 .../rendering/service/RepresentationService.java   |  2 +
 .../RepresentationServiceContentNegotiator.java    | 13 ++--
 .../acceptheader/AcceptHeaderServiceForRest.java   |  5 +-
 .../service/conneg/ContentNegotiationService.java  |  3 +
 .../conneg/ContentNegotiationServiceAbstract.java  |  3 +
 ...entNegotiationServiceForRestfulObjectsV1_0.java | 17 ++--
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |  9 ++-
 .../ContentNegotiationServiceOrgApacheIsisV2.java  | 55 ++++++-------
 .../ContentNegotiationServiceXRoDomainType.java    |  6 +-
 .../service/swagger/SwaggerServiceMenu.java        | 19 +++--
 .../IsisModuleViewerRestfulObjectsViewer.java      |  5 +-
 .../wicket/model/IsisModuleViewerWicketModel.java  |  3 +
 .../viewer/wicket/ui/IsisModuleViewerWicketUi.java |  3 +
 .../viewer/IsisModuleViewerWicketViewer.java       |  3 +-
 620 files changed, 2401 insertions(+), 1201 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/AbstractViewModel.java b/api/applib/src/main/java/org/apache/isis/applib/AbstractViewModel.java
index 98f9443..b0d67fb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/AbstractViewModel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/AbstractViewModel.java
@@ -27,10 +27,7 @@ package org.apache.isis.applib;
  * Subclassing is NOT mandatory; the methods in this superclass can be pushed
  * down into domain objects and another superclass used if required.
  *
- * <p>
- *     As an alternative, consider simply annotating the view model class with {@link org.apache.isis.applib.annotation.ViewModel}.
- * </p>
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class AbstractViewModel implements ViewModel {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
index 95d9224..b3b3428 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
@@ -48,6 +48,9 @@ import org.apache.isis.applib.services.user.RoleMemento;
 import org.apache.isis.applib.services.user.UserMemento;
 import org.apache.isis.schema.IsisModuleSchema;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // modules
@@ -70,7 +73,7 @@ import org.apache.isis.schema.IsisModuleSchema;
         DomainObjectList.class,
         RoleMemento.class,
         UserMemento.class,
-        
+
         // @DomainService(s)
         ConfigurationMenu.class,
         LayoutServiceMenu.class,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/RecreatableDomainObject.java b/api/applib/src/main/java/org/apache/isis/applib/RecreatableDomainObject.java
index 549b996..c48d739 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/RecreatableDomainObject.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/RecreatableDomainObject.java
@@ -27,7 +27,8 @@ package org.apache.isis.applib;
  *      Objects that are view models (logically belonging to the UI/application layer) should instead implement
  *      {@link org.apache.isis.applib.ViewModel}.
  * </p>
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface RecreatableDomainObject {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/ViewModel.java b/api/applib/src/main/java/org/apache/isis/applib/ViewModel.java
index 03e4d15..0e25db2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/ViewModel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/ViewModel.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.annotation.Programmatic;
  * <p>
  *     Objects that are part of the domain object layer should instead implement {@link RecreatableDomainObject}.
  * </p>
+ *
  * @since 1.x {@index}
  */
 public interface ViewModel {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
index 130f404..28dc834 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
@@ -20,9 +20,9 @@
 package org.apache.isis.applib.adapters;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
-public abstract class AbstractValueSemanticsProvider<T> 
+public abstract class AbstractValueSemanticsProvider<T>
 implements ValueSemanticsProvider<T> {
 
     @SuppressWarnings("unchecked")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/DefaultsProvider.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/DefaultsProvider.java
index cc01254..98f332b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/DefaultsProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/DefaultsProvider.java
@@ -44,7 +44,8 @@ package org.apache.isis.applib.adapters;
  * @see Parser
  * @see EncoderDecoder
  * @see ValueSemanticsProvider
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface DefaultsProvider<T> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/EncoderDecoder.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/EncoderDecoder.java
index a754351..51d61df 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/EncoderDecoder.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/EncoderDecoder.java
@@ -44,6 +44,7 @@ package org.apache.isis.applib.adapters;
  * @see Parser
  * @see DefaultsProvider
  * @see ValueSemanticsProvider
+ *
  * @since 1.x {@index}
  */
 public interface EncoderDecoder<T> {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/EncodingException.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/EncodingException.java
index 4644d8b..fb1fd2f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/EncodingException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/EncodingException.java
@@ -21,7 +21,8 @@ package org.apache.isis.applib.adapters;
 
 /**
  * Indicates that encoding or decoding has failed.
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public class EncodingException extends RuntimeException {
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/ParsingException.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/ParsingException.java
index da808f1..6d761b1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/ParsingException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/ParsingException.java
@@ -22,6 +22,7 @@ package org.apache.isis.applib.adapters;
 /**
  * Indicates that parsing has failed, ie the entry is illegal (rather than
  * invalid).
+ *
  * @since 1.x {@index}
  */
 public class ParsingException extends RuntimeException {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
index 566da4a..bc9ea97 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
@@ -40,13 +40,13 @@ import org.apache.isis.applib.adapters.DefaultsProvider;
  * of {@link DefaultsProvider} could adjust the default it provides according to
  * circumstance, for example).
  *
- * @see <code>Encodable</code>
- * @see <code>Parseable</code>
- * @see Value
- *
  * <p>
  *     Note: This annotation is only incompletely recognized by the framework, and may be deprecated in the future.
  * </p>
+ *
+ * @see <code>Encodable</code>
+ * @see <code>Parseable</code>
+ * @see Value
  * @since 1.x {@index}
  */
 @Inherited
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
index 8a8b660..23eaa30 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
@@ -33,8 +33,7 @@ import org.apache.isis.applib.layout.component.CssClassFaPosition;
 
 /**
  * Layout hints for domain objects.
- * 
- * 
+ *
  * @since 1.x {@index}
  */
 @Inherited
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/EntityChangeKind.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/EntityChangeKind.java
index 032bfd8..2c9d512 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/EntityChangeKind.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/EntityChangeKind.java
@@ -19,15 +19,11 @@
 package org.apache.isis.applib.annotation;
 
 /**
- * 
- * @since 1.x {@index}
+ *
+ * @since 2.0 {@index}
  */
 public enum EntityChangeKind {
-
     CREATE,
-
     UPDATE,
-
     DELETE,
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java b/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
index 72d0700..6725740 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
@@ -31,53 +31,56 @@ import lombok.Getter;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @RequiredArgsConstructor
 public enum RepresentationTypeSimplifiedV2 {
 
     /**
-     * The media type used as content-Type header when a domain object is rendered. 
+     * The media type used as content-Type header when a domain object is rendered.
      */
     OBJECT("object"),
-    
-    /** 
-     * The media type used as content-Type header when a parented collection is rendered. 
+
+    /**
+     * The media type used as content-Type header when a parented collection is rendered.
      */
     OBJECT_COLLECTION("object-collection"),
-    
-    /** 
+
+    /**
      * The media type used as content-Type header when a standalone collection is rendered.
      */
     LIST("list"),
 
-    /** 
+    /**
      * The media type used as content-Type header when a single (nullable) value is rendered.
      * @since 2.0
      */
     VALUE("value"),
 
-    /** 
-     * The media type used as content-Type header when a list of values is rendered. 
+    /**
+     * The media type used as content-Type header when a list of values is rendered.
      * @since 2.0
      */
     VALUES("values"),
-    
-    /** 
+
+    /**
      * The media type used as content-Type header when a void action result is rendered.
      * @since 2.0
      */
     VOID("void"),
-    
+
     ;
-    
+
     @Getter final String typeLiteral;
-    
+
     public boolean isObject()               { return this == OBJECT; }
     public boolean isObjectCollection()     { return this == OBJECT_COLLECTION; }
     public boolean isList()                 { return this == LIST; }
     public boolean isValue()                { return this == VALUE; }
     public boolean isValues()               { return this == VALUES; }
     public boolean isVoid()                 { return this == VOID; }
-    
+
     public String getContentTypeHeaderValue(final String profileName) {
         return "application/json;"
                 + "profile=\"" + profileName + "\""
@@ -90,7 +93,7 @@ public enum RepresentationTypeSimplifiedV2 {
         .filter(candidate->candidate.typeLiteral.equals(typeLiteral))
         .findAny();
     }
-    
+
     public static Optional<RepresentationTypeSimplifiedV2> parseContentTypeHeaderString(
             final @Nullable String contentTypeHeaderString) {
         return extractReprType(_Strings.splitThenStream(contentTypeHeaderString, ";"))
@@ -98,16 +101,16 @@ public enum RepresentationTypeSimplifiedV2 {
         .filter(Objects::nonNull);
     }
 
-    
+
     // -- HELPER
-    
+
     private static String trimFirstAndLastCharacter(String s) {
         if(s.length()<2) {
             return s;
         }
         return s.substring(1, s.length()-1);
     }
-    
+
     private static Optional<String> extractReprType(final @NonNull Stream<String> stringStream) {
         return stringStream
         .map(String::trim)
@@ -120,7 +123,7 @@ public enum RepresentationTypeSimplifiedV2 {
         .findAny()
         .map(RepresentationTypeSimplifiedV2::trimFirstAndLastCharacter);
     }
-    
-   
-    
+
+
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
index 87d65e7..e42238a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
@@ -41,37 +41,36 @@ import lombok.val;
 
 /**
  * Works in connection with {@link InteractionFactory}, such that it allows an {@link Interaction}
- * to run with its own simulated (or actual) time. 
+ * to run with its own simulated (or actual) time.
  * <p>
  * Relates to {@link VirtualContext}
- * 
- * @since 2.0 {@index}
  *
+ * @since 2.0 {@index}
  */
 @FunctionalInterface
 public interface VirtualClock extends Serializable {
-    
+
     // -- INTERFACE
-    
+
     /**
      * Returns the (virtual) time as an {@link Instant}.
-     * 
-     * @apiNote This is a universal time difference, that does not depend on 
-     * where you are (eg. your current timezone), just on when you are. 
+     *
+     * @apiNote This is a universal time difference, that does not depend on
+     * where you are (eg. your current timezone), just on when you are.
      *
      * @see {@link Instant}
      */
     Instant now();
-    
+
     // -- FACTORIES
-    
+
     /**
      * Returns a the system's default ticking clock.
      */
     static VirtualClock system() {
         return new VirtualClock_system();
     }
-    
+
     /**
      * Returns a ticking clock set to virtual time {@link Instant} {@code virtualNow}
      */
@@ -80,14 +79,14 @@ public interface VirtualClock extends Serializable {
         val offsetMillis = ChronoUnit.MILLIS.between(Instant.now(), virtualNow);
         return new VirtualClock_withOffset(offsetMillis);
     }
-    
+
     /**
      * Always returns the time {@link Instant} as given by {@code frozenAt}
      */
     static VirtualClock frozenAt(@NonNull Instant frozenAt) {
         return new VirtualClock_frozen(frozenAt);
     }
-    
+
     /**
      * Always returns the time {@link Instant} 2003/8/17 21:30:25 (UTC)
      */
@@ -96,14 +95,14 @@ public interface VirtualClock extends Serializable {
                 ZonedDateTime.of(2003, 7, 17, 21, 30, 25, 0, ZoneId.from(ZoneOffset.UTC)));
         return frozenAt(frozenAt);
     }
-    
+
     // -- UTILITY
-    
+
     /**
      * Returns the (virtual) time as the number of milliseconds since the epoch start.
-     * 
-     * @apiNote This is a universal time difference, that does not depend on 
-     * where you are (eg. your current timezone), just on when you are. 
+     *
+     * @apiNote This is a universal time difference, that does not depend on
+     * where you are (eg. your current timezone), just on when you are.
      *
      * @see {@link Instant}
      */
@@ -138,17 +137,17 @@ public interface VirtualClock extends Serializable {
     default java.util.Date javaUtilDate() {
         return new java.util.Date(getEpochMillis());
     }
-    
+
     default java.sql.Timestamp javaSqlTimestamp() {
         return new java.sql.Timestamp(getEpochMillis());
     }
-    
+
     default XMLGregorianCalendar xmlGregorianCalendar() {
         return JavaSqlXMLGregorianCalendarMarshalling.toXMLGregorianCalendar(javaSqlTimestamp());
     }
 
     // -- DEPRECATIONS
-    
+
     /**
      * Returns the time as a Joda {@link org.joda.time.DateTime},
      * using the {@link ZoneId#systemDefault() system default} timezone.
@@ -158,7 +157,7 @@ public interface VirtualClock extends Serializable {
     default org.joda.time.DateTime asJodaDateTime(final @NonNull ZoneId zoneId) {
         return new org.joda.time.DateTime(getEpochMillis(), DateTimeZone.forID(zoneId.getId()));
     }
-    
+
     /**
      * Returns the time as a Joda {@link DateTime},
      * using the {@link ZoneId#systemDefault() system default} timezone.
@@ -169,7 +168,7 @@ public interface VirtualClock extends Serializable {
         return new org.joda.time.LocalDate(getEpochMillis(), DateTimeZone.forID(zoneId.getId()));
     }
 
-    
+
 
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/EventObjectBase.java b/api/applib/src/main/java/org/apache/isis/applib/events/EventObjectBase.java
index 9b5c643..f97107c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/EventObjectBase.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/EventObjectBase.java
@@ -26,7 +26,6 @@ import static org.apache.isis.commons.internal.base._With.requires;
 
 /**
  * @since 2.0 {@index}
- * 
  */
 public abstract class EventObjectBase<T> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
index cd89219..08ddedf 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/domain/AbstractDomainEvent.java
@@ -31,7 +31,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import lombok.Getter;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class AbstractDomainEvent<S> extends EventObjectBase<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
index 4ffc6c3..c5cbd38 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
@@ -28,7 +28,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ActionDomainEvent<S> extends AbstractDomainEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/domain/CollectionDomainEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/domain/CollectionDomainEvent.java
index 5fd73c1..c5a75d8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/domain/CollectionDomainEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/domain/CollectionDomainEvent.java
@@ -24,7 +24,7 @@ import org.apache.isis.applib.util.ToString;
 import lombok.Getter;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class CollectionDomainEvent<S,T> extends AbstractDomainEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/domain/PropertyDomainEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/domain/PropertyDomainEvent.java
index 07141b8..43c390f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/domain/PropertyDomainEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/domain/PropertyDomainEvent.java
@@ -25,7 +25,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class PropertyDomainEvent<S,T> extends AbstractDomainEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/AbstractLifecycleEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/AbstractLifecycleEvent.java
index 27215d4..2d1c726 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/AbstractLifecycleEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/AbstractLifecycleEvent.java
@@ -21,7 +21,7 @@ package org.apache.isis.applib.events.lifecycle;
 import org.apache.isis.applib.events.EventObjectBase;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class AbstractLifecycleEvent<S> extends EventObjectBase<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectCreatedEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectCreatedEvent.java
index 79d6a2a..831c2e5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectCreatedEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectCreatedEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectCreatedEvent<S> extends AbstractLifecycleEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectLoadedEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectLoadedEvent.java
index f7e33fc..82aaf11 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectLoadedEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectLoadedEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectLoadedEvent<S> extends AbstractLifecycleEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistedEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistedEvent.java
index 1f507ba..9f1d5f6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistedEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistedEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectPersistedEvent<S> extends AbstractLifecycleEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistingEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistingEvent.java
index 245f611..74c0dcb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistingEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectPersistingEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectPersistingEvent<S> extends AbstractLifecycleEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectRemovingEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectRemovingEvent.java
index 6af275a..aa23e84 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectRemovingEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectRemovingEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectRemovingEvent<S> extends AbstractLifecycleEvent<S> {
 
@@ -46,7 +46,7 @@ public abstract class ObjectRemovingEvent<S> extends AbstractLifecycleEvent<S> {
 
     public ObjectRemovingEvent() {
     }
-    
+
     public ObjectRemovingEvent(final S source) {
         super(source);
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatedEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatedEvent.java
index 7716e51..b835a38 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatedEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatedEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectUpdatedEvent<S> extends AbstractLifecycleEvent<S> {
 
@@ -46,7 +46,7 @@ public abstract class ObjectUpdatedEvent<S> extends AbstractLifecycleEvent<S> {
 
     public ObjectUpdatedEvent() {
     }
-    
+
     public ObjectUpdatedEvent(final S source) {
         super(source);
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatingEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatingEvent.java
index 1e1ba25..ca3ff49 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatingEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/lifecycle/ObjectUpdatingEvent.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.events.lifecycle;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class ObjectUpdatingEvent<S> extends AbstractLifecycleEvent<S> {
 
@@ -46,7 +46,7 @@ public abstract class ObjectUpdatingEvent<S> extends AbstractLifecycleEvent<S> {
 
     public ObjectUpdatingEvent() {
     }
-    
+
     public ObjectUpdatingEvent(final S source) {
         super(source);
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/ui/AbstractUiEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/ui/AbstractUiEvent.java
index 667a50f..d8190bb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/ui/AbstractUiEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/ui/AbstractUiEvent.java
@@ -24,7 +24,7 @@ import java.util.Map;
 import org.apache.isis.applib.events.EventObjectBase;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class AbstractUiEvent<S> extends EventObjectBase<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/ui/CssClassUiEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/ui/CssClassUiEvent.java
index da43156..bc84e18 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/ui/CssClassUiEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/ui/CssClassUiEvent.java
@@ -24,7 +24,8 @@ import lombok.Getter;
 
 /**
  * Emitted for subscribers to obtain a cssClass hint (equivalent to the <tt>cssClass()</tt> supporting method or the {@link DomainObjectLayout#cssClass()} attribute).
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public abstract class CssClassUiEvent<S> extends AbstractUiEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/ui/IconUiEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/ui/IconUiEvent.java
index 494f876..fc70cab 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/ui/IconUiEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/ui/IconUiEvent.java
@@ -22,6 +22,8 @@ import java.util.EventObject;
 
 /**
  * Emitted for subscribers to obtain a cssClass hint (equivalent to the <tt>iconName()</tt> supporting method).
+ *
+ * @since 1.x {@index}
  */
 public abstract class IconUiEvent<S> extends AbstractUiEvent<S> {
 
@@ -90,4 +92,4 @@ public abstract class IconUiEvent<S> extends AbstractUiEvent<S> {
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/ui/LayoutUiEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/ui/LayoutUiEvent.java
index 828a6c7..06be512 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/ui/LayoutUiEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/ui/LayoutUiEvent.java
@@ -26,7 +26,8 @@ import lombok.Getter;
 
 /**
  * Emitted for subscribers to obtain a layout hint (equivalent to the <tt>layout()</tt> supporting method).
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public abstract class LayoutUiEvent<S> extends AbstractUiEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/events/ui/TitleUiEvent.java b/api/applib/src/main/java/org/apache/isis/applib/events/ui/TitleUiEvent.java
index abc336a..121f281 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/events/ui/TitleUiEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/events/ui/TitleUiEvent.java
@@ -26,7 +26,8 @@ import lombok.Getter;
 
 /**
  * Emitted for subscribers to obtain a cssClass hint (equivalent to the <tt>title()</tt> supporting method).
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public abstract class TitleUiEvent<S> extends AbstractUiEvent<S> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/DomainModelException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/DomainModelException.java
index c897721..945c100 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/DomainModelException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/DomainModelException.java
@@ -24,6 +24,8 @@ import org.apache.isis.applib.exceptions.UnrecoverableException;
 /**
  * Thrown when a problem is found with the domain model, and Isis cannot
  * proceed.
+ *
+ * @since 1.x {@index}
  */
 public class DomainModelException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/MetaModelException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/MetaModelException.java
index 0675384..d7f57c6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/MetaModelException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/MetaModelException.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.exceptions.unrecoverable;
 
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 
+/**
+ * @since 1.x {@index}
+ */
 public class MetaModelException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/NoAuthenticatorException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/NoAuthenticatorException.java
index 232327c..8fd878b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/NoAuthenticatorException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/NoAuthenticatorException.java
@@ -24,6 +24,8 @@ import org.apache.isis.applib.exceptions.UnrecoverableException;
 /**
  * Indicates that there is no Authenticator available to authenticate a user
  * based on this request.
+ *
+ * @since 1.x {@index}
  */
 public class NoAuthenticatorException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectNotFoundException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectNotFoundException.java
index 172fdad..e9d6fc2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectNotFoundException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectNotFoundException.java
@@ -22,8 +22,10 @@ package org.apache.isis.applib.exceptions.unrecoverable;
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 
 /**
- * Indicates that the persistence context was unable to get an instantiate 
+ * Indicates that the persistence context was unable to get an instantiate
  * for the specified object identifier.
+ *
+ * @since 1.x {@index}
  */
 public class ObjectNotFoundException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectPersistenceException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectPersistenceException.java
index 172bcd4..5765174 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectPersistenceException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ObjectPersistenceException.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.exceptions.unrecoverable;
 
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 
+/**
+ * @since 1.x {@index}
+ */
 public class ObjectPersistenceException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ReflectiveActionException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ReflectiveActionException.java
index e4676af..2ead1c1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ReflectiveActionException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/ReflectiveActionException.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.exceptions.unrecoverable;
 
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 
+/**
+ * @since 1.x {@index}
+ */
 public class ReflectiveActionException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/RepositoryException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/RepositoryException.java
index 57fc685..5a0ae4b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/RepositoryException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/RepositoryException.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.exceptions.UnrecoverableException;
  *
  * @see UnrecoverableException
  * @see RecoverableException
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public class RepositoryException extends UnrecoverableException {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnexpectedCallException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnexpectedCallException.java
index 96f2be5..6fa562e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnexpectedCallException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnexpectedCallException.java
@@ -24,6 +24,8 @@ import org.apache.isis.applib.exceptions.UnrecoverableException;
 /**
  * Indicates that a call was made to a method (normally an overridden one) that
  * was not expected, and hence not coded for.
+ *
+ * @since 1.x {@index}
  */
 public class UnexpectedCallException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnknownTypeException.java b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnknownTypeException.java
index a4f71bd..f405d41 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnknownTypeException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/exceptions/unrecoverable/UnknownTypeException.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.exceptions.unrecoverable;
 
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 
+/**
+ * @since 1.x {@index}
+ */
 public class UnknownTypeException extends UnrecoverableException {
     private static final long serialVersionUID = 1L;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java b/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
index 96e90f9..1126d79 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
@@ -19,16 +19,13 @@
 package org.apache.isis.applib.graph;
 
 /**
- * Fundamental building block for graph structures. 
- * 
+ * Fundamental building block for graph structures.
+ *
  * @since 2.0 {@index}
  *
  * @param <T> type constraint for values contained by this edge's vertices
  */
 public interface Edge<T> {
-
     Vertex<T> getFrom();
-
     Vertex<T> getTo();
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java b/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
index ea75617..f8bf00a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
@@ -21,8 +21,8 @@ package org.apache.isis.applib.graph;
 import java.util.stream.Stream;
 
 /**
- * Fundamental building block for graph structures. 
- * 
+ * Fundamental building block for graph structures.
+ *
  * @since 2.0 {@index}
  *
  * @param <T> type constraint for values contained by this vertex
@@ -36,5 +36,4 @@ public interface Vertex<T> {
 
     Stream<Edge<T>> streamIncoming();
     Stream<Edge<T>> streamOutgoing();
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
index ce2964e..38b32a5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
@@ -26,6 +26,9 @@ import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Value(semanticsProviderName="org.apache.isis.core.metamodel.facets.value.treenode.TreeNodeValueSemanticsProvider")
 public class LazyTreeNode<T> implements TreeNode<T> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/DataTypeFactory.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/DataTypeFactory.java
index d1f0810..1a6ba63 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/DataTypeFactory.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/DataTypeFactory.java
@@ -26,6 +26,9 @@ import javax.xml.datatype.XMLGregorianCalendar;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class DataTypeFactory {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaSqlXMLGregorianCalendarMarshalling.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaSqlXMLGregorianCalendarMarshalling.java
index a64f55d..e918597 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaSqlXMLGregorianCalendarMarshalling.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaSqlXMLGregorianCalendarMarshalling.java
@@ -27,6 +27,9 @@ import javax.xml.datatype.XMLGregorianCalendar;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public final class JavaSqlXMLGregorianCalendarMarshalling {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeJaxbAdapters.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeJaxbAdapters.java
index a263bcb..14bfef2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeJaxbAdapters.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeJaxbAdapters.java
@@ -34,13 +34,12 @@ import lombok.experimental.UtilityClass;
 /**
  * Provides JAXB XmlAdapters for Java time temporal types.
  * <p>
- * 
+ *
  * Example:<pre>
  * &#64;XmlElement &#64;XmlJavaTypeAdapter(JavaTimeJaxbAdapters.LocalDateAdapter.class)
  * &#64;Getter &#64;Setter private java.time.LocalDate localDate;
  * </pre>
- * 
- *  
+ *
  * @since 2.0 {@index}
  */
 @UtilityClass
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeXMLGregorianCalendarMarshalling.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeXMLGregorianCalendarMarshalling.java
index a57bc51..377401c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeXMLGregorianCalendarMarshalling.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JavaTimeXMLGregorianCalendarMarshalling.java
@@ -31,6 +31,9 @@ import javax.xml.datatype.XMLGregorianCalendar;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public final class JavaTimeXMLGregorianCalendarMarshalling {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeJaxbAdapters.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeJaxbAdapters.java
index 39ca65e..8801bec 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeJaxbAdapters.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeJaxbAdapters.java
@@ -30,6 +30,9 @@ import org.joda.time.format.ISODateTimeFormat;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public final class JodaTimeJaxbAdapters {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.java
index 95a423c..b98d088 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.java
@@ -33,6 +33,9 @@ import org.joda.time.LocalTime;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class JodaTimeXMLGregorianCalendarMarshalling {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
index 7f57f40..018171d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
@@ -33,7 +33,7 @@ import lombok.Getter;
 import lombok.val;
 
 /**
- * @since ? {@index}
+ * @since 2.0 {@index}
  */
 public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, List<Object>> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
index d24f7d1..49905fc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
@@ -26,7 +26,7 @@ import org.apache.isis.schema.common.v2.OidDto;
 import lombok.val;
 
 /**
- * @since ? {@index}
+ * @since 2.0 {@index}
  */
 public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PrimitiveJaxbAdapters.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PrimitiveJaxbAdapters.java
index fbae217..b5a9daf 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PrimitiveJaxbAdapters.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PrimitiveJaxbAdapters.java
@@ -25,6 +25,9 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
 
+/**
+ * @since 2.0 {@index}
+ */
 public final class PrimitiveJaxbAdapters {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
index 4a72c0b..92a609c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
@@ -39,7 +39,8 @@ import org.apache.isis.applib.layout.links.Link;
  *  Note that {@link org.apache.isis.applib.annotation.ActionLayout#contributed()} is omitted because this only applies
  *  to domain services.
  * </p>
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "action"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutDataOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutDataOwner.java
index c4b07bb..fec116d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutDataOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutDataOwner.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.component;
 
 import java.util.List;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface ActionLayoutDataOwner extends Owner {
     List<ActionLayoutData> getActions();
     void setActions(List<ActionLayoutData> actions);
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
index 46d4bb2..47807bd 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
@@ -38,6 +38,8 @@ import org.apache.isis.applib.layout.links.Link;
  *     Note that {@link org.apache.isis.applib.annotation.CollectionLayout#render()} is omitted because
  *     {@link #defaultView} is its replacement.
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "collection"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutDataOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutDataOwner.java
index b4ecb19..2a1a3f0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutDataOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutDataOwner.java
@@ -20,7 +20,9 @@ package org.apache.isis.applib.layout.component;
 
 import java.util.List;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface CollectionLayoutDataOwner extends MemberRegionOwner {
-
     List<CollectionLayoutData> getCollections();
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CssClassFaPosition.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CssClassFaPosition.java
index ff22b89..bdbbec0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/CssClassFaPosition.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/CssClassFaPosition.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.component;
 
 import javax.xml.bind.annotation.XmlType;
 
+/**
+ * @since 1.x {@index}
+ */
 @XmlType(
         namespace = "http://isis.apache.org/applib/layout/component"
         )
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutData.java
index e16a71a..7493d72 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutData.java
@@ -31,6 +31,8 @@ import org.apache.isis.applib.layout.links.Link;
 
 /**
  * Describes the layout of the title and icon of a domain object, broadly corresponding to {@link org.apache.isis.applib.annotation.DomainObjectLayout}.
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "domainObject"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutDataOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutDataOwner.java
index 74c6a25..788dd83 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutDataOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/DomainObjectLayoutDataOwner.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.component;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface DomainObjectLayoutDataOwner extends Owner {
 
     DomainObjectLayoutData getDomainObject();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
index 335d65a..5ea34cd 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
@@ -35,6 +35,8 @@ import org.apache.isis.applib.layout.grid.bootstrap3.BS3Col;
  * A {@link MemberRegion region} of the page containing a set of
  * related {@link PropertyLayoutData properties} and associated
  * {@link ActionLayoutData actions}.
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "fieldSet"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSetOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSetOwner.java
index c6a0942..b62483d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSetOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSetOwner.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.component;
 
 import java.util.List;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface FieldSetOwner extends MemberRegionOwner {
     List<FieldSet> getFieldSets();
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/HasNamed.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/HasNamed.java
index 098727c..8567b2f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/HasNamed.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/HasNamed.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.layout.component;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface HasNamed {
 
     @XmlElement(required = false)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegion.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegion.java
index f44efe2..9e81369 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegion.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegion.java
@@ -26,6 +26,8 @@ package org.apache.isis.applib.layout.component;
  *     of properties and their actions), and a <code>CollectionLayoutData</code>
  *     (containing a single collection and associated actions)
  * </p>
+ *
+ * @since 1.x {@index}
  */
 public interface MemberRegion<T extends MemberRegionOwner> extends Owned<T> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegionOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegionOwner.java
index a32526a..5eafbe8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegionOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/MemberRegionOwner.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.component;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface MemberRegionOwner extends Owner {
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owned.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owned.java
index 807fe54..38dffd4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owned.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owned.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.component;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface Owned<T extends Owner> {
     T getOwner();
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owner.java
index 37299cf..96f0711 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/Owner.java
@@ -18,7 +18,9 @@
  */
 package org.apache.isis.applib.layout.component;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface Owner {
 
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index a56700b..f8e37d4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -37,6 +37,8 @@ import org.apache.isis.applib.layout.links.Link;
 
 /**
  * Describes the layout of a single property, broadly corresponds to the {@link org.apache.isis.applib.annotation.PropertyLayout} annotation.
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "property"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutData.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutData.java
index 507ae23..93e3248 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutData.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutData.java
@@ -36,6 +36,8 @@ import org.apache.isis.applib.layout.links.Link;
  *  Note that {@link org.apache.isis.applib.annotation.ActionLayout#contributed()} is omitted because this only applies
  *  to domain services.
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "serviceAction"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutDataOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutDataOwner.java
index 0f98411..dda5240 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutDataOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/component/ServiceActionLayoutDataOwner.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.component;
 
 import java.util.List;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface ServiceActionLayoutDataOwner extends Owner {
     List<ServiceActionLayoutData> getServiceActions();
     void setServiceActions(List<ServiceActionLayoutData> actions);
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/Grid.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/Grid.java
index 01a3992..0f4b2ba 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/Grid.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/Grid.java
@@ -34,6 +34,8 @@ import org.apache.isis.applib.services.layout.LayoutService;
  * <p>
  *     It is used by the {@link LayoutService} as a common based type for any layouts read in from XML.
  * </p>
+ *
+ * @since 1.x {@index}
  */
 public interface Grid {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
index 6a1fdc1..2f797d1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
@@ -41,6 +41,8 @@ import org.apache.isis.applib.services.layout.LayoutService;
  * <p>
  *     It is used by the {@link LayoutService} as a common based type for any layouts read in from XML.
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlTransient // ignore this class
 public abstract class GridAbstract implements Grid {
@@ -98,7 +100,7 @@ public abstract class GridAbstract implements Grid {
     protected void traverseActions(
             final ActionLayoutDataOwner actionLayoutDataOwner,
             final GridAbstract.Visitor visitor) {
-        
+
         final List<ActionLayoutData> actionLayoutDatas = actionLayoutDataOwner.getActions();
         if(actionLayoutDatas == null) {
             return;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFix.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFix.java
index 8847cf3..eedeaa5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFix.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFix.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.grid.bootstrap3;
 
+/**
+ * @since 1.x {@index}
+ */
 public abstract class BS3ClearFix extends BS3RowContent {
 
     private static final long serialVersionUID = 1L;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixHidden.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixHidden.java
index bcd5422..b227be6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixHidden.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixHidden.java
@@ -28,6 +28,8 @@ import javax.xml.bind.annotation.XmlType;
  * <p>
  *     It is rendered as a (eg) &lt;div class=&quot;clearfix hidden-xs ...&quot;&gt;
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "clearFixHidden"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixVisible.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixVisible.java
index a2349a3..22d661c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixVisible.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ClearFixVisible.java
@@ -29,6 +29,8 @@ import javax.xml.bind.annotation.XmlType;
  * <p>
  *     It is rendered as a (eg) &lt;div class=&quot;clearfix visible-xs-block ...&quot;&gt;
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "clearFixVisible"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
index 47686f2..550e832 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
@@ -50,6 +50,8 @@ import org.apache.isis.commons.internal.primitives._Ints.Bound;
  * <p>
  *     It is rendered as a (eg) &lt;div class=&quot;col-md-4 ...&quot;&gt;
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "col"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Element.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Element.java
index 062d557..c3410c2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Element.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Element.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.grid.bootstrap3;
 
 import java.io.Serializable;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface BS3Element extends WithinGrid, Serializable {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ElementAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ElementAbstract.java
index de037fe..160c702 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ElementAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3ElementAbstract.java
@@ -22,6 +22,8 @@ import javax.xml.bind.annotation.XmlAttribute;
 
 /**
  * Superclass for all layout classes, factoring out the common {@link #getCssClass()} attribute.
+ *
+ * @since 1.x {@index}
  */
 public abstract class BS3ElementAbstract implements BS3Element {
 
@@ -47,4 +49,4 @@ public abstract class BS3ElementAbstract implements BS3Element {
 
 
 
-}
\ No newline at end of file
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
index f50e427..125a0fc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
@@ -45,6 +45,8 @@ import org.apache.isis.applib.mixins.dto.Dto;
  * <p>
  *     The element is rendered as a &lt;div class=&quot;...&quot;&gt;
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "grid"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
index 9fc2d77..2f2256b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
@@ -37,6 +37,8 @@ import org.apache.isis.applib.annotation.Programmatic;
  * <p>
  *     It is rendered as a &lt;div class=&quot;row ...&quot;&gt;
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "row"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContent.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContent.java
index cfdd27c..84a7dec 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContent.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.annotation.Programmatic;
  *     {@link BS3ClearFix clearfix} classes.
  * </p>
  *
+ * @since 1.x {@index}
  */
 public abstract class BS3RowContent extends BS3ElementAbstract {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContentOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContentOwner.java
index c0f1dbd..a2e7542 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContentOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowContentOwner.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.grid.bootstrap3;
 
 import org.apache.isis.applib.layout.component.Owner;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface BS3RowContentOwner extends Owner, WithinGrid {
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowOwner.java
index 1dafe14..1062ef8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3RowOwner.java
@@ -22,6 +22,9 @@ import java.util.List;
 
 import org.apache.isis.applib.layout.component.Owner;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface BS3RowOwner extends Owner, WithinGrid {
 
     List<BS3Row> getRows();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
index 772e6d4..6c4a282 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
@@ -40,6 +40,8 @@ import org.apache.isis.applib.layout.component.PropertyLayoutData;
  * <p>
  *     They simply contain one or more {@link BS3Row row}s.
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "tab"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
index 02471b6..de7eaff 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
@@ -30,6 +30,8 @@ import org.apache.isis.applib.annotation.Programmatic;
 
 /**
  * Represents a tab group containing one or more {@link BS3Tab tab}s.
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "tabGroup"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroupOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroupOwner.java
index 280058f..cef4527 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroupOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroupOwner.java
@@ -22,6 +22,9 @@ import java.util.List;
 
 import org.apache.isis.applib.layout.component.Owner;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface BS3TabGroupOwner extends Owner, WithinGrid {
 
     List<BS3TabGroup> getTabGroups();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabOwner.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabOwner.java
index 2a3620d..52c0243 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabOwner.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabOwner.java
@@ -22,6 +22,9 @@ import java.util.List;
 
 import org.apache.isis.applib.layout.component.Owner;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface BS3TabOwner extends Owner, WithinGrid {
 
     List<BS3Tab> getTabs();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/Size.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/Size.java
index 4dd8c61..fbecbaa 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/Size.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/Size.java
@@ -21,6 +21,8 @@ package org.apache.isis.applib.layout.grid.bootstrap3;
 /**
  * As per <a href="http://getbootstrap.com/css/#grid-options">grid options</a>, also used in
  * <a href="http://getbootstrap.com/css/#responsive-utilities">responsive utility</a> classes.
+ *
+ * @since 1.x {@index}
  */
 public enum Size {
     XS,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/SizeSpan.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/SizeSpan.java
index 813c41c..a24bd28 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/SizeSpan.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/SizeSpan.java
@@ -26,6 +26,9 @@ import javax.xml.bind.annotation.XmlType;
 /**
  *
  */
+/**
+ * @since 1.x {@index}
+ */
 @XmlType(
         name = "sizeSpan"
         , propOrder = {}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/WithinGrid.java b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/WithinGrid.java
index 2f45a1f..532e9a1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/WithinGrid.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/WithinGrid.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.layout.grid.bootstrap3;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface WithinGrid {
 
     @Programmatic
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/links/Link.java b/api/applib/src/main/java/org/apache/isis/applib/layout/links/Link.java
index 025e550..135bd7e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/links/Link.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/links/Link.java
@@ -25,6 +25,9 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
+/**
+ * @since 1.x {@index}
+ */
 @XmlType(
         name = "link"
         , propOrder = {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/HasNamed.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/HasNamed.java
index 6627d86..4b4d004 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/HasNamed.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/HasNamed.java
@@ -20,9 +20,12 @@ package org.apache.isis.applib.layout.menubars;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface HasNamed {
 
     @Programmatic
     String getNamed();
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/Menu.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/Menu.java
index 68789ba..1dd86c1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/Menu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/Menu.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.menubars;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface Menu extends HasNamed {
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBar.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBar.java
index 7f84461..2a75254 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBar.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBar.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.layout.menubars;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface MenuBar {
 
-}
\ No newline at end of file
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
index 1be7b9e..da3c798 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
@@ -23,6 +23,9 @@ import java.util.Map;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface MenuBars {
 
     @FunctionalInterface
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
index 3fbaf16..e1a24bd 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
@@ -28,6 +28,9 @@ import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @XmlTransient // ignore this class
 public abstract class MenuBarsAbstract implements MenuBars, Serializable {
 
@@ -53,7 +56,7 @@ public abstract class MenuBarsAbstract implements MenuBars, Serializable {
     @XmlTransient
     public LinkedHashMap<String, ServiceActionLayoutData> getAllServiceActionsByObjectTypeAndId() {
 
-        val serviceActionsByObjectTypeAndId = 
+        val serviceActionsByObjectTypeAndId =
                 new LinkedHashMap<String, ServiceActionLayoutData>();
 
         visit(serviceActionLayoutData -> {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuSection.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuSection.java
index feacaf0..936da1b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuSection.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuSection.java
@@ -23,7 +23,10 @@ import java.util.List;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 
-public interface MenuSection extends HasNamed {
+/**
+ * @since 1.x {@index}
+ */
+1public interface MenuSection extends HasNamed {
 
     @Programmatic
     List<ServiceActionLayoutData> getServiceActions();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
index a7ccaf0..20348bc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
@@ -33,6 +33,8 @@ import lombok.ToString;
 
 /**
  * Describes the collection of domain services into menubars, broadly corresponding to the aggregation of information of {@link DomainServiceLayout} that have the same value of {@link DomainServiceLayout#named()}.
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "menu"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
index cb65485..7758cef 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
@@ -31,6 +31,8 @@ import org.apache.isis.applib.layout.menubars.MenuBar;
 
 /**
  * Describes the collection of domain services into menubars, broadly corresponding to the aggregation of information of {@link org.apache.isis.applib.annotation.DomainServiceLayout} that have the same value of {@link DomainServiceLayout#named()}.
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "menuBar"
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
index d52e577..a147e92 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
@@ -32,6 +32,8 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 /**
  * Describes the collection of domain services into menubars, broadly corresponding to the aggregation of information within {@link org.apache.isis.applib.annotation.DomainServiceLayout}.
+ *
+ * @since 1.x {@index}
  */
 @XmlRootElement(
         name = "menuBars"
@@ -132,7 +134,7 @@ public class BS3MenuBars extends org.apache.isis.applib.layout.menubars.MenuBars
 
         public static VisitorAdapter visitingMenuSections(Consumer<BS3MenuSection> onVisit) {
             return new VisitorAdapter() {
-                @Override public void visit(final BS3MenuSection section) { 
+                @Override public void visit(final BS3MenuSection section) {
                     onVisit.accept(section);
                 }
             };
@@ -140,7 +142,7 @@ public class BS3MenuBars extends org.apache.isis.applib.layout.menubars.MenuBars
 
         public static VisitorAdapter visitingMenus(Consumer<BS3Menu> onVisit) {
             return new VisitorAdapter() {
-                @Override public void visit(final BS3Menu menu) { 
+                @Override public void visit(final BS3Menu menu) {
                     onVisit.accept(menu);
                 }
             };
diff --git a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
index 1e563b8..9af5957 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
@@ -32,6 +32,8 @@ import org.apache.isis.applib.layout.menubars.MenuSection;
 
 /**
  * Corresponds to a domain service that contributes its serviceActions under a particular {@link BS3MenuBar}.
+ *
+ * @since 1.x {@index}
  */
 @XmlType(
         name = "section"
@@ -58,7 +60,7 @@ public class BS3MenuSection implements MenuSection, Serializable, ServiceActionL
     public void setNamed(String named) {
         this.named = named;
     }
-    
+
     private List<ServiceActionLayoutData> serviceActions = new ArrayList<>();
 
     // no wrapper
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
index 8f7046a..acc3375 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
@@ -21,6 +21,9 @@ package org.apache.isis.applib.mixins;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class MixinConstants {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto.java
index 389eab6..31902e1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.applib.mixins.dto;
 
+/**
+ * @since 1.x {@index}
+ */
 public interface Dto {
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
index 5bcf5cc..7cbc941 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
@@ -34,6 +34,9 @@ import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Dto_downloadXml.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
index ba81923..1f1f169 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
@@ -39,6 +39,9 @@ import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Dto_downloadXsd.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
@@ -71,7 +74,7 @@ public class Dto_downloadXsd {
 
         if(schemaMap.isEmpty()) {
             val msg = String.format(
-                    "No schemas were generated for %s; programming error?", 
+                    "No schemas were generated for %s; programming error?",
                     holder.getClass().getName());
             messageService.warnUser(msg);
             return null;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
index ac45a1e..123e28c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
@@ -34,6 +34,9 @@ import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Object_downloadLayoutXml.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
index f8bc14c..27ce79f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
@@ -34,6 +34,9 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Object_openRestApi.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_rebuildMetamodel.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_rebuildMetamodel.java
index 58f5b5f..6e2ccd9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_rebuildMetamodel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_rebuildMetamodel.java
@@ -30,6 +30,9 @@ import org.apache.isis.applib.services.metamodel.MetaModelService;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Object_rebuildMetamodel.ActionDomainEvent.class,
         semantics = SemanticsOf.IDEMPOTENT,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
index 0129e8e..0593c57 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
@@ -38,6 +38,9 @@ import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = Object_downloadMetamodelXml.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
@@ -52,7 +55,7 @@ public class Object_downloadMetamodelXml {
 
     private final Object holder;
 
-    public static class ActionDomainEvent 
+    public static class ActionDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent<Object_downloadMetamodelXml> {}
 
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
index d3e5787..1f3d329 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
@@ -33,6 +33,9 @@ import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Property
 @PropertyLayout(hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -40,10 +43,10 @@ public class Object_objectIdentifier {
 
     @Inject private BookmarkService bookmarkService;
     @Inject private MetaModelService mmService;
-    
+
     private final Object holder;
 
-    public static class ActionDomainEvent 
+    public static class ActionDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent<Object_objectIdentifier> {}
 
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2")
@@ -57,13 +60,13 @@ public class Object_objectIdentifier {
     }
 
     // -- HELPER
-    
+
     private String shortend(@NonNull String identifier) {
-        
+
         val hashHexed = Integer.toHexString(identifier.hashCode());
         val hashPadded = _Strings.padStart(hashHexed, 8, '0');
         return "»" + hashPadded;
     }
-    
+
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
index 6dfd9e9..c2d2742 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
@@ -30,16 +30,19 @@ import org.apache.isis.applib.services.bookmark.BookmarkService;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Property
 @PropertyLayout(hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
 public class Object_objectType {
-    
+
     @Inject private BookmarkService bookmarkService;
 
     private final Object holder;
 
-    public static class ActionDomainEvent 
+    public static class ActionDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent<Object_objectType> {}
 
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.1")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/query/AllInstancesQuery.java b/api/applib/src/main/java/org/apache/isis/applib/query/AllInstancesQuery.java
index bdea6df..f5be5d2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/query/AllInstancesQuery.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/query/AllInstancesQuery.java
@@ -19,7 +19,7 @@
 package org.apache.isis.applib.query;
 
 /**
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface AllInstancesQuery<T> extends Query<T> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/query/NamedQuery.java b/api/applib/src/main/java/org/apache/isis/applib/query/NamedQuery.java
index 69c328f..00f4d73 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/query/NamedQuery.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/query/NamedQuery.java
@@ -25,7 +25,7 @@ import javax.annotation.Nullable;
 import lombok.NonNull;
 
 /**
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface NamedQuery<T> extends Query<T> {
 
@@ -33,9 +33,9 @@ public interface NamedQuery<T> extends Query<T> {
     Map<String, Object> getParametersByName();
 
     // -- WITHERS
-    
+
     @Override NamedQuery<T> withRange(@NonNull QueryRange range);
-    
+
     NamedQuery<T> withParameter(@NonNull String parameterName, @Nullable Object parameterValue);
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/query/Query.java b/api/applib/src/main/java/org/apache/isis/applib/query/Query.java
index 0b60171..39c2441 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/query/Query.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/query/Query.java
@@ -46,11 +46,11 @@ import lombok.NonNull;
  *
  * <b>Note:</b> that the predicate is applied within the {@link RepositoryService}
  * (ie client-side) rather than being pushed back to the object store.
- * 
- * @since 1.x revised for 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface Query<T> extends Serializable {
-    
+
     /**
      * The {@link Class} of the objects returned by this query.
      */
@@ -65,32 +65,32 @@ public interface Query<T> extends Serializable {
      * Returns a model with start index into the set table and maximal number of items to return.
      */
     QueryRange getRange();
-    
+
     // -- WITHERS
-    
+
     Query<T> withRange(@NonNull QueryRange range);
-    
+
     default Query<T> withRange(long ...range) {
         return withRange(QueryRange.of(range));
     }
-    
+
     default Query<T> withStart(long start) {
         return withRange(start);
     }
-    
+
     default Query<T> withLimit(long limit) {
         return withRange(0L, limit);
     }
-    
+
     // -- FACTORIES
-    
+
     public static <T> Query<T> allInstances(
             final @NonNull Class<T> resultType) {
         return new _AllInstancesQueryDefault<>(resultType, QueryRange.unconstrained());
     }
-    
+
     public static <T> NamedQuery<T> named(
-            final @NonNull Class<T> resultType, 
+            final @NonNull Class<T> resultType,
             final @NonNull String queryName) {
         return new _NamedQueryDefault<>(resultType, queryName, QueryRange.unconstrained(), null);
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/acceptheader/AcceptHeaderService.java b/api/applib/src/main/java/org/apache/isis/applib/services/acceptheader/AcceptHeaderService.java
index 3392d81..c19d9fc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/acceptheader/AcceptHeaderService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/acceptheader/AcceptHeaderService.java
@@ -23,8 +23,6 @@ import java.util.List;
 import javax.ws.rs.core.MediaType;
 
 /**
- * 
- * 
  * @since 1.x {@index}
  */
 public interface AcceptHeaderService {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder.java
index a67179b..0a81f1c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder.java
@@ -19,8 +19,7 @@
 package org.apache.isis.applib.services.bookmark;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface BookmarkHolder {
     Bookmark bookmark();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
index 007cb0c..1c889c4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_lookup.java
@@ -27,6 +27,9 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @Action(
         domainEvent = BookmarkHolder_lookup.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE
@@ -44,9 +47,9 @@ public class BookmarkHolder_lookup {
     public Object act() {
         return bookmarkService.lookup(bookmarkHolder);
     }
-    
+
     // -- DEPENDENCIES
-    
+
     @Inject private BookmarkService bookmarkService;
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
index c8aeda3..0ab33dc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolder_object.java
@@ -25,6 +25,9 @@ import org.apache.isis.applib.annotation.Property;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @Property(
         domainEvent = BookmarkHolder_object.PropertyDomainEvent.class
 )
@@ -33,7 +36,7 @@ public class BookmarkHolder_object {
 
     private final BookmarkHolder bookmarkHolder;
 
-    public static class PropertyDomainEvent 
+    public static class PropertyDomainEvent
     extends IsisModuleApplib.PropertyDomainEvent<BookmarkHolder_object, Object> { }
 
     public Object prop() {
@@ -41,7 +44,7 @@ public class BookmarkHolder_object {
     }
 
     // -- DEPENDENCIES
-    
+
     @Inject private BookmarkService bookmarkService;
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java b/api/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
index 9959855..a924101 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
@@ -21,24 +21,23 @@ package org.apache.isis.applib.services.clock;
 import org.apache.isis.applib.clock.VirtualClock;
 
 /**
- * This service allows an application to be decoupled from the system time.  
- * The most common use case is in support of testing scenarios, to &quot;mock the clock&quot;.  
+ * This service allows an application to be decoupled from the system time.
+ * The most common use case is in support of testing scenarios, to &quot;mock the clock&quot;.
  * Use of this service also opens up the use of centralized
  * co-ordinated time management through a centralized time service.
  *
- * 
  * @since 1.x revised for 2.0 {@index}
  */
 public interface ClockService {
 
     VirtualClock getClock();
-    
+
     // -- SHORTCUTS
-    
+
     default long getEpochMillis() {
         return getClock().getEpochMillis();
     }
-    
+
 //    public java.time.LocalDate now() {
 //        return Clock.getTimeAsLocalDate();
 //    }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForActionAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForActionAbstract.java
index 9824315..7f6d58e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForActionAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForActionAbstract.java
@@ -25,6 +25,8 @@ import org.apache.isis.schema.cmd.v2.ParamsDto;
 
 /**
  * Convenience adapter for command processors for action invocations.
+ *
+ * @since 1.x {@index}
  */
 public abstract class CommandDtoProcessorForActionAbstract implements CommandDtoProcessor {
     protected ActionDto getActionDto(final CommandDto commandDto) {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForPropertyAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForPropertyAbstract.java
index 10691cf..348c1a3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForPropertyAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/CommandDtoProcessorForPropertyAbstract.java
@@ -23,6 +23,8 @@ import org.apache.isis.schema.cmd.v2.PropertyDto;
 
 /**
  * Convenience adapter for command processors for property edits.
+ *
+ * @since 1.x {@index}
  */
 public abstract class CommandDtoProcessorForPropertyAbstract
 implements CommandDtoProcessor {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/spi/CommandDtoProcessorServiceIdentity.java b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/spi/CommandDtoProcessorServiceIdentity.java
index e060330..d160d56 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/spi/CommandDtoProcessorServiceIdentity.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/commanddto/processor/spi/CommandDtoProcessorServiceIdentity.java
@@ -28,8 +28,8 @@ import org.apache.isis.schema.cmd.v2.CommandDto;
 
 /**
  * At least one implementation is required.
- * 
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 @Service
 @Named("isis.applib.CommandDtoProcessorServiceIdentity")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
index e7f29b2..e4ce41d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
@@ -32,13 +32,12 @@ import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Named("isis.applib.ConfigurationMenu")
 @DomainService(objectType = "isis.applib.ConfigurationMenu")
 @DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.TERTIARY)
-/**
- * 
- * @since 1.x {@index}
- */
 public class ConfigurationMenu {
 
     public static abstract class ActionDomainEvent
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
index b4bc82f..340b7f6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
@@ -36,7 +36,6 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 /**
- * 
  * @since 2.0 {@index}
  */
 @XmlRootElement(name = "configurationProperty")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
index 2fb60e0..60604e8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
@@ -22,7 +22,6 @@ package org.apache.isis.applib.services.confview;
 import java.util.Set;
 
 /**
- * 
  * @since 2.0 {@index}
  */
 public interface ConfigurationViewService {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java b/api/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
index 4782e77..8ebdf07 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
@@ -27,8 +27,8 @@ import javax.ws.rs.core.MediaType;
 import org.apache.isis.commons.internal.base._NullSafe;
 
 /**
- * 
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface ContentMappingService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java b/api/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
index b1fa8ba..542e926 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
@@ -37,6 +37,8 @@ import static org.apache.isis.commons.internal.base._NullSafe.isEmpty;
  *         <li>the class is {@link Serializable}</li> so that it can be stored by the Wicket viewer as a Wicket model.
  *     </ul>
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public class SimpleTicket implements Ticket {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 09530d1..4651b88 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -45,13 +45,14 @@ import lombok.extern.log4j.Log4j2;
  * <p>
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
- * 
+ *
+ * @since 1.x {@index}
  */
 @Log4j2
 public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer {
-    
+
     @Inject protected TranslationService translationService;
-    
+
     @Getter @Setter private boolean disabled = false;
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
index 5f1bf0d..3cbad46 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
@@ -34,15 +34,14 @@ import static org.apache.isis.commons.internal.exceptions._Exceptions.getCausalC
  * <p>
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
- * 
- * @since 2.0 {@index}
- * 
+ *
+ * @since 1.x {@index}
  */
 public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
 
     protected static final Predicate<Throwable> ofType(
             final Class<? extends Throwable> exceptionType) {
-        
+
         return ex->exceptionType.isAssignableFrom(ex.getClass());
     }
 
@@ -56,19 +55,19 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      */
     protected static final Predicate<Throwable> excluding(
             final String... messages) {
-        
+
         return ex->{
-            
+
             for (final Throwable throwable : getCausalChain(ex)) {
                 if(containsAnyOfTheseMessages(throwable, messages)) {
-                    return false; 
+                    return false;
                 }
             }
-            
+
             return true;
         };
     }
-    
+
 
     /**
      * A {@link Predicate} that {@link Predicate#apply(Object) applies} only if at least one of the message(s)
@@ -80,15 +79,15 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      */
     protected static final Predicate<Throwable> including(
             final String... messages) {
-        
+
         return ex->{
-           
+
             for (final Throwable throwable : getCausalChain(ex)) {
                 if(containsAnyOfTheseMessages(throwable, messages)) {
-                    return true; 
+                    return true;
                 }
             }
-            
+
             return false;
         };
     }
@@ -108,7 +107,7 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
     }
 
     public ExceptionRecognizerForType(
-            final Category category, 
+            final Category category,
             final Class<? extends Exception> exceptionType) {
         this(category, exceptionType, null);
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
index 5734803..36fe0ae 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
@@ -24,8 +24,7 @@ import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer.Recognitio
 import org.apache.isis.commons.collections.Can;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface ExceptionRecognizerService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java b/api/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
index 087273b..e9d2f60 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
@@ -29,9 +29,7 @@ import org.apache.isis.applib.services.repository.RepositoryService;
 import lombok.NonNull;
 
 /**
- * 
- * @since 2.x {@index}
- *
+ * @since 1.x {@index}
  */
 public interface FactoryService {
 
@@ -86,7 +84,7 @@ public interface FactoryService {
      * @since 2.0
      */
     <T> T detachedEntity(@NonNull Class<T> domainClass);
-    
+
     /**
      * Creates a new detached entity instance, with injection points resolved.
      *
@@ -135,7 +133,7 @@ public interface FactoryService {
     default <T> T viewModel(@NonNull Class<T> viewModelClass) {
         return viewModel(viewModelClass, /*mementoStr*/null);
     }
-    
+
     /**
      * Resolves injection points for given ViewModel instance.
      * @param viewModel - most likely just new-ed up, without injection points resolved
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
index 2bad18d..cf44e72 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.grid;
 import org.apache.isis.applib.layout.grid.Grid;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface GridLoaderService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
index a0a490a..8ec3334 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
@@ -26,8 +26,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.layout.grid.Grid;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface GridService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
index 442b207..d5dc6c2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
@@ -22,7 +22,8 @@ import org.apache.isis.applib.layout.grid.Grid;
 
 /**
  * Provides an implementation of {@link Grid}.
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface GridSystemService<G extends Grid> {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/health/Health.java b/api/applib/src/main/java/org/apache/isis/applib/services/health/Health.java
index be810bf..f0e9620 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/health/Health.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/health/Health.java
@@ -22,7 +22,6 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
- * 
  * @since 2.0 {@index}
  */
 @AllArgsConstructor
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java b/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
index faf6b4e..8ae9b89 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
@@ -19,13 +19,12 @@
 package org.apache.isis.applib.services.health;
 
 /**
- * 
+ *
  * @since 2.0 {@index}
  */
 public interface HealthCheckService {
 
     Health check();
-
 }
 
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
index f147584..3a7b774 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
@@ -21,8 +21,8 @@ package org.apache.isis.applib.services.hint;
 import java.util.Set;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
+
 /**
- * 
  * @since 1.x {@index}
  */
 public interface HintStore {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
index 763e558..3a0e035 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.i18n;
 import java.util.Locale;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface LocaleProvider {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
index 50f4a80..135fb3f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
@@ -28,7 +28,6 @@ import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.collections._Lists;
 
 /**
- * 
  * @since 1.x {@index}
  */
 @Value
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
index 4934e36..7ab0581 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationService.java
@@ -22,7 +22,6 @@ import java.util.Objects;
 import java.util.function.Predicate;
 
 /**
- * 
  * @since 1.x {@index}
  */
 public interface TranslationService {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
index 0c20c7f..47de5f6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
@@ -23,8 +23,7 @@ import org.apache.isis.applib.layout.grid.Grid;
 import org.apache.isis.applib.services.menu.MenuBarsService;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface LayoutService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
index 09aee59..9648974 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
@@ -38,8 +38,7 @@ import org.apache.isis.applib.value.Clob;
 import org.apache.isis.commons.internal.base._Strings;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 @Named("isis.applib.LayoutServiceMenu")
 @DomainService(objectType = "isis.applib.LayoutServiceMenu")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java b/api/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
index 856cf1a..cfd4645 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
@@ -27,8 +27,8 @@ import java.net.URI;
  *     The implementation is specific to the viewer(s) configured for Isis.  At the time of writing only one
  *     implementation is available, for the Wicket viewer.
  * </p>
- * 
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface DeepLinkService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsLoaderService.java b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsLoaderService.java
index 5019617..354332f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsLoaderService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsLoaderService.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.menu;
 import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBars;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface MenuBarsLoaderService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
index 5a02544..8aaa9ad 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.menu;
 import org.apache.isis.applib.layout.menubars.MenuBars;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface MenuBarsService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java b/api/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
index fefcaf6..0703bd6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
@@ -22,8 +22,7 @@ package org.apache.isis.applib.services.message;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface MessageService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 0812c00..71b2842 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -36,7 +36,8 @@ import lombok.val;
  * <p>
  * This API is currently extremely limited, but the intention is to extend it gradually as use cases emerge.
  * </p>
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface MetaModelService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java b/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
index effcb2f..9874684 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metrics/MetricsService.java
@@ -22,8 +22,7 @@ import org.apache.isis.applib.services.iactn.InteractionContext;
 import org.apache.isis.schema.ixn.v2.MemberExecutionDto;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface MetricsService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultCacheControl.java b/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultCacheControl.java
index 03033be..cdeac32 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultCacheControl.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultCacheControl.java
@@ -19,8 +19,7 @@
 package org.apache.isis.applib.services.queryresultscache;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface QueryResultCacheControl {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java b/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
index b1d9689..30cd0e0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
@@ -38,8 +38,8 @@ import lombok.Getter;
  * This implementation has no UI and there is only one implementation (this class) in applib, it is annotated with
  * {@link org.apache.isis.applib.annotation.DomainService}.  This means that it is automatically registered and
  * available for use; no further configuration is required.
- * 
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface QueryResultsCache extends DisposableBean {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
index 7af94a3..2bb4713 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
@@ -37,8 +37,7 @@ import org.apache.isis.commons.internal.reflection._Reflect;
 import lombok.val;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface ServiceRegistry {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java b/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
index 994f8b6..864f69a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/repository/EntityState.java
@@ -19,14 +19,12 @@
 package org.apache.isis.applib.services.repository;
 
 /**
- * TODO lower case enums not up to standard, is this an issue?
- * 
  * @apiNote use the provided predicates rather then directly referencing the enum names
- *  
- * 
+ *
  * @since 2.0 {@index}
  */
 public enum EntityState {
+
     NOT_PERSISTABLE,
     PERSISTABLE_ATTACHED,
     PERSISTABLE_DETACHED,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java b/api/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
index 1a6c223..66e2db8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
@@ -29,8 +29,8 @@ import org.springframework.beans.factory.DisposableBean;
  * This implementation has only one implementation (this class) in applib, so it is annotated with
  * {@link org.apache.isis.applib.annotation.DomainService}.  This means that it is automatically registered and
  * available for use; no further configuration is required.
- * 
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface Scratchpad
         extends DisposableBean {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingService.java b/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingService.java
index 4635e46..96a647b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingService.java
@@ -21,10 +21,11 @@ package org.apache.isis.applib.services.session;
 import java.util.Date;
 
 /**
- * Similar to the {@link org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber}, 
+ * Similar to the {@link org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber},
  * this defines an API to track
  * the status of the current sessions (&quot;users logged on&quot;) on the system.
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface SessionLoggingService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingServiceLogging.java b/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingServiceLogging.java
index c2991d3..f870761 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingServiceLogging.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/session/SessionLoggingServiceLogging.java
@@ -32,8 +32,7 @@ import org.apache.isis.applib.annotation.OrderPrecedence;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 @Service
 @Named("isis.applib.SessionLoggingServiceLogging")
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderForCollectionTypeAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderForCollectionTypeAbstract.java
index b1f3205..7e675b2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderForCollectionTypeAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderForCollectionTypeAbstract.java
@@ -22,6 +22,9 @@ import java.util.List;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 1.x {@index}
+ */
 @RequiredArgsConstructor
 public abstract class TableColumnOrderForCollectionTypeAbstract<T>
         implements TableColumnOrderService {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderService.java b/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderService.java
index 97747f5..a79af3c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/tablecol/TableColumnOrderService.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.tablecol;
 import java.util.List;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface TableColumnOrderService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingService.java b/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingService.java
index e51fa0c..599f2aa 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingService.java
@@ -24,8 +24,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.memento._Mementos.EncoderDecoder;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface UrlEncodingService extends EncoderDecoder {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.java
index 8bc0dd2..c3a32d4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.java
@@ -24,10 +24,7 @@ import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
 
 /**
- * to use, subclass and annotated with:
- * <pre>
- * &#064;DomainService(nature=DOMAIN, menuOrder="100")
- * </pre>
+ * @since 1.x {@index}
  */
 public abstract class UrlEncodingServiceUsingBaseEncodingAbstract implements UrlEncodingService {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
index 6cd939f..0ef9a31 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
@@ -27,15 +27,16 @@ import lombok.Getter;
 import lombok.Value;
 
 /**
- * Immutable serializable value held by {@link UserMemento}.  
- * @since 2.0 {@index}
+ * Immutable serializable value held by {@link UserMemento}.
+ *
+ * @since 1.x revised for 2.0 {@index}
  */
 @DomainObject(objectType = "isis.applib.RoleMemento")
 @Value
 public final class RoleMemento implements Serializable {
 
     private static final long serialVersionUID = -3876856609238378274L;
-    
+
     /**
      * Creates a new role with the specified name. Description is left blank.
      */
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index 5113598..d716d7a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -35,24 +35,25 @@ import lombok.NonNull;
 
 /**
  * Immutable serializable value holding details about a user and its roles.
- * @since 1.x revised in 2.0 {@index}
+ *
+ * @since 1.x revised for 2.0 {@index}
  */
 @DomainObject(objectType = "isis.applib.UserMemento")
 public final class UserMemento implements Serializable {
-    
+
     private static final long serialVersionUID = 7190090455587885367L;
-    private static final UserMemento SYSTEM_USER = UserMemento.ofName("__system"); 
+    private static final UserMemento SYSTEM_USER = UserMemento.ofName("__system");
 //    private static final UserMemento NO_USER = UserMemento.ofName("__nobody");
-    
+
     // -- FACTORIES
-    
+
     /**
      * The framework's internal user with unrestricted privileges.
      */
     public static UserMemento system() {
         return SYSTEM_USER;
     }
-    
+
 //    /**
 //     * The framework's internal user with no privileges at all, returned by the
 //     * {@link UserService} if no user is logged in.
@@ -60,7 +61,7 @@ public final class UserMemento implements Serializable {
 //    public static UserMemento nobody() {
 //        return NO_USER;
 //    }
-    
+
     /**
      * Creates a new user with the specified name and no roles.
      */
@@ -68,34 +69,34 @@ public final class UserMemento implements Serializable {
             final @NonNull String name) {
         return new UserMemento(name, Stream.empty());
     }
-    
+
     /**
      * Creates a new user with the specified name and assigned roles.
      */
     public static UserMemento ofNameAndRoles(
-            final @NonNull String name, 
+            final @NonNull String name,
             final RoleMemento... roles) {
         return new UserMemento(name, Stream.of(roles));
     }
-    
+
     /**
      * Creates a new user with the specified name and assigned role names.
      */
     public static UserMemento ofNameAndRoleNames(
-            final @NonNull String name, 
+            final @NonNull String name,
             final String... roleNames) {
         return new UserMemento(name, Stream.of(roleNames).map(RoleMemento::new));
     }
-    
+
     /**
      * Creates a new user with the specified name and assigned role names.
      */
     public static UserMemento ofNameAndRoleNames(
-            final @NonNull String name, 
+            final @NonNull String name,
             final @NonNull Stream<String> roleNames) {
         return new UserMemento(name, roleNames.map(RoleMemento::new));
     }
-    
+
     // -- CONSTRUCTOR
 
     /**
@@ -106,7 +107,7 @@ public final class UserMemento implements Serializable {
             throw new IllegalArgumentException("Name not specified");
         }
         this.name = name;
-        this.roles = roles.collect(_Lists.toUnmodifiable()); 
+        this.roles = roles.collect(_Lists.toUnmodifiable());
     }
 
     public String title() {
@@ -139,18 +140,18 @@ public final class UserMemento implements Serializable {
     public boolean isCurrentUser(final @Nullable String userName) {
         return name.equals(userName);
     }
-    
+
     public Stream<String> streamRoleNames() {
         return roles.stream()
                 .map(RoleMemento::getName);
     }
-    
+
     public boolean hasRoleName(final @Nullable String roleName) {
         return streamRoleNames().anyMatch(myRoleName->myRoleName.equals(roleName));
     }
 
     // -- TO STRING, EQUALS, HASHCODE
-    
+
     @Override
     public String toString() {
         final StringBuilder buf = new StringBuilder();
@@ -159,7 +160,7 @@ public final class UserMemento implements Serializable {
         }
         return "User [name=" + getName() + ",roles=" + buf.toString() + "]";
     }
-    
+
     @Override
     public boolean equals(Object obj) {
         if (obj == this) {
@@ -183,18 +184,18 @@ public final class UserMemento implements Serializable {
         }
         return true;
     }
-    
+
     @Override
     public int hashCode() {
         return getName().hashCode(); // its good enough to hash on just the user's name
     }
-    
+
 
 }
 
 // -- REMOVED
 
-//XXX implemented as regex match, java-doc is not specific about what these methods actually do; so if in doubt, rather remove     
+//XXX implemented as regex match, java-doc is not specific about what these methods actually do; so if in doubt, rather remove
 ///**
 //* Determines if the user fulfills the specified role.
 //*
@@ -217,7 +218,7 @@ public final class UserMemento implements Serializable {
 //  return false;
 //}
 
-//XXX not used    
+//XXX not used
 //@UtilityClass
 //public static class NameType {
 //  @UtilityClass
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
index f5ce156..3675fcf 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.services.userreg.events.PasswordResetEvent;
  * The framework provides a default implementation which in turn uses the
  * {@link org.apache.isis.applib.services.email.EmailService}, namely <code>EmailServiceDefault</code>.
  * </p>
+ *
  * @since 1.x {@index}
  */
 public interface EmailNotificationService
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/UserDetails.java b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/UserDetails.java
index e2607d5..aea184f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/UserDetails.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/UserDetails.java
@@ -25,7 +25,8 @@ import lombok.Setter;
 
 /**
  * A model object for the signup page
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public class UserDetails
                 implements Serializable {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/EmailEventAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/EmailEventAbstract.java
index ff7cad7..283b8b8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/EmailEventAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/EmailEventAbstract.java
@@ -20,6 +20,8 @@ package org.apache.isis.applib.services.userreg.events;
 
 /**
  * An event sent to all services interested in user registration
+ *
+ * @since 1.x {@index}
  */
 public abstract class EmailEventAbstract {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/PasswordResetEvent.java b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/PasswordResetEvent.java
index b727f8f..b84ffaa 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/PasswordResetEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/userreg/events/PasswordResetEvent.java
@@ -20,6 +20,7 @@ package org.apache.isis.applib.services.userreg.events;
 
 /**
  * An event send to all services interested in user password reset
+ *
  * @since 1.x {@index}
  */
 public class PasswordResetEvent extends EmailEventAbstract {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/InvalidException.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/InvalidException.java
index b0453d0..f8b6306 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/InvalidException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/InvalidException.java
@@ -27,8 +27,6 @@ import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
  * Superclass of exceptions which indicate an attempt to interact with an object
  * or member in a way that is invalid.
  *
- * <p>
- *
  * @since 1.x {@index}
  */
 public class InvalidException extends InteractionException {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandler.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandler.java
index 864a31d..b65dfcb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandler.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandler.java
@@ -19,7 +19,6 @@
 package org.apache.isis.applib.services.wrapper.control;
 
 /**
- * 
  * @since 2.0 {@index}
  */
 @FunctionalInterface
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandlerAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandlerAbstract.java
index b66a914..ae808f3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandlerAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/control/ExceptionHandlerAbstract.java
@@ -22,6 +22,9 @@ import org.apache.logging.log4j.Logger;
 
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Log4j2
 public abstract class ExceptionHandlerAbstract implements ExceptionHandler {
     public static Logger getLog() {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/AccessEvent.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/AccessEvent.java
index 726e1b7..20a79bc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/AccessEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/AccessEvent.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.Identifier;
  * @see VisibilityEvent
  * @see ValidityEvent
  *
+ * @since 1.x {@index}
  */
 public abstract class AccessEvent extends InteractionEvent {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionAdapter.java
index b7e2a89..4b4e0cc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionAdapter.java
@@ -39,7 +39,8 @@ import org.apache.isis.applib.services.wrapper.events.PropertyVisibilityEvent;
 /**
  * Provides no-op implementations of each of the methods within
  * {@link InteractionListener}, to simplify the creation of new listeners.
- * @since 2.0 {@index}
+ *
+ * @since 1.x {@index}
  */
 public class InteractionAdapter implements InteractionListener {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionListener.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionListener.java
index 1a8b55e..3c6b235 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionListener.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/listeners/InteractionListener.java
@@ -37,8 +37,7 @@ import org.apache.isis.applib.services.wrapper.events.PropertyUsabilityEvent;
 import org.apache.isis.applib.services.wrapper.events.PropertyVisibilityEvent;
 
 /**
- * 
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface InteractionListener {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionalProcessor.java b/api/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionalProcessor.java
index b18e7f4..174cc2e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionalProcessor.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionalProcessor.java
@@ -29,33 +29,36 @@ import org.apache.isis.commons.functional.ThrowingRunnable;
 
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface TransactionalProcessor {
 
     // -- INTERFACE
-    
+
     /**
-     * Runs given {@code callable} with a transactional boundary, where the detailed transactional behavior 
+     * Runs given {@code callable} with a transactional boundary, where the detailed transactional behavior
      * is governed by given {@link TransactionDefinition} {@code def}.
-     * @return {@link Result} of calling given {@code callable} 
+     * @return {@link Result} of calling given {@code callable}
      */
     <T> Result<T> callTransactional(TransactionDefinition def, Callable<T> callable);
 
     /**
-     * Runs given {@code runnable} with a transactional boundary, where the detailed transactional behavior 
+     * Runs given {@code runnable} with a transactional boundary, where the detailed transactional behavior
      * is governed by given {@link TransactionDefinition} {@code def}.
      */
     default Result<Void> runTransactional(TransactionDefinition def, ThrowingRunnable runnable) {
         return callTransactional(def, ThrowingRunnable.toCallable(runnable));
     }
-    
+
     // -- SHORTCUTS - WITH PROPAGATION CONTROL
 
     /**
-     * Runs given {@code callable} with a transactional boundary, where the detailed transactional behavior 
+     * Runs given {@code callable} with a transactional boundary, where the detailed transactional behavior
      * is governed by given {@link Propagation} {@code propagation}.
      * <p>
      * More fine grained control is given via {@link #callTransactional(TransactionDefinition, Callable)}
-     * @return {@link Result} of calling given {@code callable} 
+     * @return {@link Result} of calling given {@code callable}
      */
     default <T> Result<T> callTransactional(Propagation propagation, Callable<T> callable) {
         val def = new DefaultTransactionDefinition();
@@ -64,7 +67,7 @@ public interface TransactionalProcessor {
     }
 
     /**
-     * Runs given {@code runnable} with a transactional boundary, where the detailed transactional behavior 
+     * Runs given {@code runnable} with a transactional boundary, where the detailed transactional behavior
      * is governed by given {@link Propagation} {@code propagation}.
      * <p>
      * More fine grained control is given via {@link #runTransactional(TransactionDefinition, Callable)}
@@ -72,25 +75,25 @@ public interface TransactionalProcessor {
     default Result<Void> runTransactional(Propagation propagation, ThrowingRunnable runnable) {
         return callTransactional(propagation, ThrowingRunnable.toCallable(runnable));
     }
-    
-    
+
+
     // -- SHORTCUTS - MOST FREQUENT USAGE
-    
+
     /**
      * Runs given {@code callable} within an existing transactional boundary, or in the absence of such a
      * boundary, creates a new one.
      * <p>
-     * In other words, support a current transaction, create a new one if none exists. 
+     * In other words, support a current transaction, create a new one if none exists.
      * @param <T>
      * @param callable
-     * @return {@link Result} of calling given {@code callable} 
+     * @return {@link Result} of calling given {@code callable}
      */
     default <T> Result<T> callWithinCurrentTransactionElseCreateNew(Callable<T> callable) {
         val def = new DefaultTransactionDefinition();
         def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
         return callTransactional(def, callable);
     }
-    
+
     /**
      * Runs given {@code runnable} within an existing transactional boundary, or in the absence of such a
      * boundary creates a new one.
diff --git a/api/applib/src/main/java/org/apache/isis/applib/snapshot/SnapshottableWithInclusions.java b/api/applib/src/main/java/org/apache/isis/applib/snapshot/SnapshottableWithInclusions.java
index 3245e77..a9dd1df 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/snapshot/SnapshottableWithInclusions.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/snapshot/SnapshottableWithInclusions.java
@@ -27,7 +27,8 @@ import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService;
  * Optional interface for domain objects with which an
  * snapshot is to be created using the {@link XmlSnapshotService}, indicating
  * paths to be {@link XmlSnapshotService.Snapshot#} automatically include additional paths within the snapshot.
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface SnapshottableWithInclusions {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification.java b/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification.java
index 0c2ec5a..0f17000a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification.java
@@ -36,7 +36,8 @@ import java.lang.reflect.Method;
  * <p>
  * Implementation note: inspired by (borrowed code from) Hamcrest's
  * <tt>TypeSafeMatcher</tt>.
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public abstract class AbstractSpecification<T> implements Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification2.java b/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification2.java
index 4265846..3a8fe6f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification2.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/AbstractSpecification2.java
@@ -39,7 +39,8 @@ import org.apache.isis.commons.internal.base._Casts;
  * <p>
  * Implementation note: inspired by (borrowed code from) Hamcrest's
  * <tt>TypeSafeMatcher</tt>.
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public abstract class AbstractSpecification2<T> implements Specification2 {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/Specification.java b/api/applib/src/main/java/org/apache/isis/applib/spec/Specification.java
index 4197702..5ff03f9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/Specification.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/Specification.java
@@ -22,7 +22,8 @@ package org.apache.isis.applib.spec;
 /**
  * An implementation of the <i>Specification</i> pattern, as described in Eric
  * Evans' <i>Domain Driven Design</i>, p224.
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/Specification2.java b/api/applib/src/main/java/org/apache/isis/applib/spec/Specification2.java
index 336ce35..3974114 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/Specification2.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/Specification2.java
@@ -28,7 +28,8 @@ import org.apache.isis.applib.services.i18n.TranslatableString;
  *     If implemented, then the {@link #satisfies(Object)} inherited from {@link Specification} can just return <tt>null</tt>;
  *     it will never be called by the framework.
  * </p>
- * @since ? {@index}
+ *
+ * @since 1.x {@index}
  */
 public interface Specification2 extends Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationAnd.java b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationAnd.java
index 427b581..f5ef871 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationAnd.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationAnd.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.util.ReasonBuffer;
  *
  * @see SpecificationOr
  * @see SpecificationNot
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class SpecificationAnd implements Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationNot.java b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationNot.java
index f57b63d..f84035a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationNot.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationNot.java
@@ -43,7 +43,7 @@ package org.apache.isis.applib.spec;
  *
  * @see SpecificationAnd
  * @see SpecificationOr
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class SpecificationNot implements Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationOr.java b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationOr.java
index 6d6a9f5..fe5fe80 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationOr.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/spec/SpecificationOr.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.util.ReasonBuffer;
  *
  * @see SpecificationAnd
  * @see SpecificationNot
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public abstract class SpecificationOr implements Specification {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/types/DescriptionType.java b/api/applib/src/main/java/org/apache/isis/applib/types/DescriptionType.java
index 048147b..4fd53f1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/types/DescriptionType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/types/DescriptionType.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class DescriptionType {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/types/MemberIdentifierType.java b/api/applib/src/main/java/org/apache/isis/applib/types/MemberIdentifierType.java
index dbbc2d5..4b71f78 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/types/MemberIdentifierType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/types/MemberIdentifierType.java
@@ -28,6 +28,8 @@ import lombok.experimental.UtilityClass;
 
 /**
  * As per {@link Command#getMemberIdentifier()} and {@link org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber#audit(UUID, int, String, Bookmark, String, String, String, String, String, Timestamp)}.
+ *
+ * @since 2.0 {@index}
  */
 public class MemberIdentifierType {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/types/TargetActionType.java b/api/applib/src/main/java/org/apache/isis/applib/types/TargetActionType.java
index 6349c5b..4ec7905 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/types/TargetActionType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/types/TargetActionType.java
@@ -28,6 +28,8 @@ import lombok.experimental.UtilityClass;
 
 /**
  * A user-friendly name of an action, as per {@link Command#getTargetAction()}, {@link org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber#audit(UUID, int, String, Bookmark, String, String, String, String, String, Timestamp)}.
+ *
+ * @since 2.0 {@index}
  */
 @UtilityClass
 public class TargetActionType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/types/TargetClassType.java b/api/applib/src/main/java/org/apache/isis/applib/types/TargetClassType.java
index e453c1d..9ba83b1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/types/TargetClassType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/types/TargetClassType.java
@@ -28,6 +28,8 @@ import lombok.experimental.UtilityClass;
 
 /**
  * A user-friendly name of a class, as per {@link Command#getTargetClass()}, {@link org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber#audit(UUID, int, String, Bookmark, String, String, String, String, String, Timestamp)}.
+ *
+ * @since 2.0 {@index}
  */
 @UtilityClass
 public class TargetClassType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/Enums.java b/api/applib/src/main/java/org/apache/isis/applib/util/Enums.java
index 41f385f..67f3342 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/Enums.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/Enums.java
@@ -26,7 +26,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import lombok.experimental.UtilityClass;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 @UtilityClass
 public final class Enums {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java b/api/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
index eb68dc5..622690e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
@@ -67,8 +67,7 @@ import lombok.extern.log4j.Log4j2;
  * }
  * </pre>
  *
- * @since 2.0 (re-invented)
- *
+ * @since 1.x revised for 2.0 {@index}
  */
 @Log4j2
 public final class ObjectContracts {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer.java b/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer.java
index 684288b..d747fc0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer.java
@@ -30,6 +30,8 @@ package org.apache.isis.applib.util;
  *
  * <p>
  * An alternative is to use the {@link Reasons} class.
+ *
+ * @since 1.x {@index}
  */
 public class ReasonBuffer {
     StringBuffer reasonBuffer = new StringBuffer();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java b/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
index c10f0ba..9d4fb2d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
@@ -27,6 +27,8 @@ import org.apache.isis.commons.internal.collections._Lists;
 
 /**
  * Extension to applib's {@link ReasonBuffer}.
+ *
+ * @since 2.0 {@index}
  */
 public class ReasonBuffer2 {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/Reasons.java b/api/applib/src/main/java/org/apache/isis/applib/util/Reasons.java
index 750e5c2..731e6d8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/Reasons.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/Reasons.java
@@ -21,6 +21,8 @@ package org.apache.isis.applib.util;
 
 /**
  * An alternative to {@link ReasonBuffer}.
+ *
+ * @since 1.x {@index}
  */
 public class Reasons {
     private Reasons() {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/TitleBuffer.java b/api/applib/src/main/java/org/apache/isis/applib/util/TitleBuffer.java
index 1219e34..c305ca2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/TitleBuffer.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/TitleBuffer.java
@@ -26,11 +26,21 @@ import org.apache.isis.commons.internal._Constants;
 
 /**
  * Title buffer is a utility class to help produce titles for objects without
- * having to add lots of guard code. It provides two basic method: one to
+ * having to add lots of guard code.
+ *
+ * <p>
+ * It provides two basic method: one to
  * concatenate a title to the buffer; another to append a title with a joiner
- * string, taking care adding in necessary spaces. The benefits of using this
+ * string, taking care adding in necessary spaces.
+ * </p>
+ *
+ * <p>
+ * The benefits of using this
  * class is that null references are safely ignored (rather than appearing as
  * 'null'), and joiners (a space by default) are only added when needed.
+ * </p>
+ *
+ * @since 1.x {@index}
  */
 public class TitleBuffer {
     private static final String SPACE = " ";
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/TitleBufferException.java b/api/applib/src/main/java/org/apache/isis/applib/util/TitleBufferException.java
index 64ec136..700edb7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/TitleBufferException.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/TitleBufferException.java
@@ -19,6 +19,9 @@
 
 package org.apache.isis.applib.util;
 
+/**
+ * @since 1.x {@index}
+ */
 public class TitleBufferException extends RuntimeException {
     private static final long serialVersionUID = 1L;
     private Throwable cause;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/schema/ChangesDtoUtils.java b/api/applib/src/main/java/org/apache/isis/applib/util/schema/ChangesDtoUtils.java
index 5433730..4128870 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/schema/ChangesDtoUtils.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/schema/ChangesDtoUtils.java
@@ -36,7 +36,7 @@ import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.schema.chg.v2.ChangesDto;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public final class ChangesDtoUtils {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommandDtoUtils.java b/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommandDtoUtils.java
index 61159dd..b36eced 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommandDtoUtils.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommandDtoUtils.java
@@ -42,7 +42,7 @@ import org.apache.isis.schema.common.v2.OidsDto;
 import org.apache.isis.schema.common.v2.PeriodDto;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public final class CommandDtoUtils {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommonDtoUtils.java b/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommonDtoUtils.java
index b43a7d1..fb3589c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommonDtoUtils.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/schema/CommonDtoUtils.java
@@ -67,7 +67,7 @@ import lombok.NonNull;
 import lombok.val;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 public final class CommonDtoUtils {
 
@@ -106,13 +106,13 @@ public final class CommonDtoUtils {
                     entry(OffsetDateTime.class, ValueType.OFFSET_DATE_TIME),
                     entry(OffsetTime.class, ValueType.OFFSET_TIME),
                     entry(ZonedDateTime.class, ValueType.ZONED_DATE_TIME),
-                    
+
                     // joda.time
                     entry(org.joda.time.DateTime.class, ValueType.JODA_DATE_TIME),
                     entry(org.joda.time.LocalDateTime.class, ValueType.JODA_LOCAL_DATE_TIME),
                     entry(org.joda.time.LocalDate.class, ValueType.JODA_LOCAL_DATE),
                     entry(org.joda.time.LocalTime.class, ValueType.JODA_LOCAL_TIME),
-                    
+
                     entry(java.sql.Timestamp.class, ValueType.JAVA_SQL_TIMESTAMP),
                     entry(Blob.class, ValueType.BLOB),
                     entry(Clob.class, ValueType.CLOB)
@@ -157,7 +157,7 @@ public final class CommonDtoUtils {
             final ValueType valueType,
             final Object value,
             final BookmarkService bookmarkService) {
-        
+
         valueWithTypeDto.setType(valueType);
 
         setValueOn((ValueDto)valueWithTypeDto, valueType, value, bookmarkService);
@@ -165,15 +165,15 @@ public final class CommonDtoUtils {
 
         return valueWithTypeDto;
     }
-    
+
     public static <T extends ValueWithTypeDto> T setValueOnNonScalar(
             final T valueWithTypeDto,
             final ValueType elementValueType,
             final Object value,
             final BookmarkService bookmarkService) {
-        
+
         valueWithTypeDto.setType(ValueType.COLLECTION);
-        
+
         val collectionDto = asCollectionDto(value, elementValueType, bookmarkService);
         valueWithTypeDto.setCollection(collectionDto);
         valueWithTypeDto.setNull(value == null);
@@ -317,8 +317,8 @@ public final class CommonDtoUtils {
         case REFERENCE: {
             final Bookmark bookmark = pojo instanceof Bookmark
                     ? (Bookmark) pojo
-                    : bookmarkService!=null 
-                            ? bookmarkService.bookmarkFor(pojo) 
+                    : bookmarkService!=null
+                            ? bookmarkService.bookmarkFor(pojo)
                             : null;
 
             if (bookmark != null) {
@@ -364,32 +364,32 @@ public final class CommonDtoUtils {
 
         val collectionDto = new CollectionDto();
         collectionDto.setType(commonElementValueType);
-        
+
         val needsCommonElementValueTypeAutodetect = commonElementValueType==ValueType.VOID;
-        
+
         val commonElementValueTypeRef = _Refs.<ValueType>objectRef(null);
-        
+
         _NullSafe.streamAutodetect(iterableOrArray)
         .forEach(element->{
             val valueDto = new ValueDto();
             if(element==null) {
                 setValueOn(valueDto, ValueType.VOID, element, bookmarkService);
             } else {
-                val elementValueType = asValueType(element.getClass()); 
+                val elementValueType = asValueType(element.getClass());
                 setValueOn(valueDto, elementValueType, element, bookmarkService);
-                
+
                 if(needsCommonElementValueTypeAutodetect) {
                     commonElementValueTypeRef.update(acc->reduce(acc, elementValueType));
                 }
-                
+
             }
             collectionDto.getValue().add(valueDto);
         });
-        
+
         if(needsCommonElementValueTypeAutodetect) {
             collectionDto.setType(commonElementValueTypeRef.getValueElseDefault(ValueType.VOID));
         }
-        
+
         return collectionDto;
     }
 
@@ -397,12 +397,12 @@ public final class CommonDtoUtils {
 
     private static ValueType reduce(ValueType acc, ValueType next) {
         if(acc==null) {
-            return next;    
+            return next;
         }
         if(acc==next) {
-            return acc;    
+            return acc;
         }
-        throw _Exceptions.unsupportedOperation("mixing types within a collection is not supported yet");    
+        throw _Exceptions.unsupportedOperation("mixing types within a collection is not supported yet");
     }
 
     public static <T> T getValue(
@@ -439,7 +439,7 @@ public final class CommonDtoUtils {
             return valueDto.getBigDecimal();
         case BIG_INTEGER:
             return valueDto.getBigInteger();
-         // JAVA TIME    
+         // JAVA TIME
         case LOCAL_DATE:
             return JavaTimeXMLGregorianCalendarMarshalling.toLocalDate(valueDto.getLocalDate());
         case LOCAL_TIME:
@@ -476,17 +476,17 @@ public final class CommonDtoUtils {
                 return Collections.emptyList();
             }
             val list = new ArrayList<Object>();
-            
+
             val elementValueType = collectionDto.getType();
-            
+
             for(val elementValueDto : collectionDto.getValue()) {
-                
+
                 if(elementValueDto instanceof ValueWithTypeDto) {
                     list.add(getValueAsObject(elementValueDto, ((ValueWithTypeDto)elementValueDto).getType()));
                 } else {
-                    list.add(getValueAsObject(elementValueDto, elementValueType));    
+                    list.add(getValueAsObject(elementValueDto, elementValueType));
                 }
-                
+
             }
             return list;
         case BLOB:
@@ -574,7 +574,7 @@ public final class CommonDtoUtils {
 
         return paramDto;
     }
-    
+
     public static ParamDto newParamDtoNonScalar(
             final String parameterName,
             final Class<?> parameterElementType,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/schema/InteractionDtoUtils.java b/api/applib/src/main/java/org/apache/isis/applib/util/schema/InteractionDtoUtils.java
index 3aafd63..840267a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/schema/InteractionDtoUtils.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/schema/InteractionDtoUtils.java
@@ -53,6 +53,9 @@ import org.apache.isis.schema.ixn.v2.InteractionDto;
 import org.apache.isis.schema.ixn.v2.MemberExecutionDto;
 import org.apache.isis.schema.ixn.v2.PropertyEditDto;
 
+/**
+ * @since 1.x {@index}
+ */
 public final class InteractionDtoUtils {
 
 
@@ -356,9 +359,9 @@ public final class InteractionDtoUtils {
     public static void addReturn(
             final ActionInvocationDto invocationDto,
             final Class<?> returnType,
-            final Object result, 
+            final Object result,
             final BookmarkService bookmarkService) {
-        
+
         final ValueWithTypeDto returned = CommonDtoUtils
                 .newValueWithTypeDto(returnType, result, bookmarkService);
         invocationDto.setReturned(returned);
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/schema/MemberExecutionDtoUtils.java b/api/applib/src/main/java/org/apache/isis/applib/util/schema/MemberExecutionDtoUtils.java
index d407e09..1ee16ee 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/schema/MemberExecutionDtoUtils.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/schema/MemberExecutionDtoUtils.java
@@ -32,6 +32,9 @@ import org.apache.isis.schema.ixn.v2.ObjectCountsDto;
 
 import lombok.NonNull;
 
+/**
+ * @since 1.x {@index}
+ */
 public final class MemberExecutionDtoUtils {
 
     public static <T extends MemberExecutionDto> T clone(final T dto) {
@@ -82,20 +85,20 @@ public final class MemberExecutionDtoUtils {
         }
         return differenceDto;
     }
-    
+
     public static <T extends MemberExecutionDto> String toXml(final @NonNull T dto) {
         return _Xml.writeXml(dto, writeOptions())
                 .orElseFail();
     }
 
     public static <T extends MemberExecutionDto> void toXml(
-            final @NonNull T dto, 
+            final @NonNull T dto,
             final @NonNull Writer writer) throws JAXBException {
         _Xml.writeXml(dto, writer, writeOptions());
     }
-    
+
     // -- HELPER
-    
+
     private static WriteOptions writeOptions() {
         return WriteOptions.builder()
                 .useContextCache(true)
@@ -104,5 +107,5 @@ public final class MemberExecutionDtoUtils {
                 .build();
     }
 
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index 7a7abff..7c4ac48 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -40,7 +40,7 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * @since ? {@index}
+ * @since 1.x {@index}
  */
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.blobs.BlobValueSemanticsProvider")
@@ -57,17 +57,17 @@ public final class Blob implements NamedWithMimeType {
      * </pre>
      */
     private static final long serialVersionUID = 5659679806709601263L;
-    
+
     // -- FACTORIES
-    
+
     /**
      * Returns a new {@link Blob} of given {@code name}, {@code mimeType} and {@code content}.
      * <p>
-     * {@code name} may or may not include the desired filename extension, it 
-     * is guaranteed, that the resulting {@link Blob} has the appropriate extension 
+     * {@code name} may or may not include the desired filename extension, it
+     * is guaranteed, that the resulting {@link Blob} has the appropriate extension
      * as constraint by the given {@code mimeType}.
      * <p>
-     * For more fine-grained control use one of the {@link Blob} constructors directly. 
+     * For more fine-grained control use one of the {@link Blob} constructors directly.
      * @param name - may or may not include the desired filename extension
      * @param mimeType
      * @param content - bytes
@@ -78,8 +78,8 @@ public final class Blob implements NamedWithMimeType {
         val fileName = _Strings.asFileNameWithExtension(name, proposedFileExtension);
         return new Blob(fileName, mimeType.getMimeType(), content);
     }
-    
-     // -- 
+
+     // --
 
     private final MimeType mimeType;
     private final byte[] bytes;
@@ -203,23 +203,23 @@ public final class Blob implements NamedWithMimeType {
         }
 
     }
-    
+
     /**
-     * @return optionally the payload as a {@link BufferedImage} based on whether 
-     * this Blob's MIME type identifies as image and whether the payload is not empty 
+     * @return optionally the payload as a {@link BufferedImage} based on whether
+     * this Blob's MIME type identifies as image and whether the payload is not empty
      */
     public Optional<BufferedImage> asImage() {
-        
+
         val bytes = getBytes();
         if(bytes == null) {
             return Optional.empty();
         }
-        
+
         val mimeType = getMimeType();
         if(mimeType == null || !mimeType.getPrimaryType().equals("image")) {
             return Optional.empty();
         }
-        
+
         try {
             val img = _Images.fromBytes(getBytes());
             return Optional.ofNullable(img);
@@ -227,7 +227,7 @@ public final class Blob implements NamedWithMimeType {
             log.error("failed to read image data", e);
             return Optional.empty();
         }
-        
+
     }
-    
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java b/api/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
index 626e473..263fa14 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
@@ -29,7 +29,7 @@ import org.apache.isis.commons.collections.Can;
 import lombok.Getter;
 
 /**
- * @since 2.0 {@index}
+ * @since 1.x {@index}
  */
 public interface NamedWithMimeType extends Serializable {
 
@@ -39,7 +39,7 @@ public interface NamedWithMimeType extends Serializable {
 
     /**
      * Subset of MimeTypes most commonly used.
-     * 
+     *
      * @since 2.0
      */
     public static enum CommonMimeType {
@@ -106,7 +106,7 @@ public interface NamedWithMimeType extends Serializable {
         WOFF2("font/woff2"),
         XHTML("application/xhtml+xml"),
         XML("application/xml"), /*alias*/ XSD("application/xml"),
-        
+
         XUL("application/vnd.mozilla.xul+xml"),
         ZIP("application/zip"),
         _7Z("application/x-7z-compressed"),
@@ -114,7 +114,7 @@ public interface NamedWithMimeType extends Serializable {
         // see
         // https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc
 
-        DOC("application/msword"), 
+        DOC("application/msword"),
         DOT("application/msword"),
 
         DOCX("application/vnd.openxmlformats-officedocument.wordprocessingml.document"),
@@ -122,7 +122,7 @@ public interface NamedWithMimeType extends Serializable {
         DOCM("application/vnd.ms-word.document.macroEnabled.12"),
         DOTM("application/vnd.ms-word.template.macroEnabled.12"),
 
-        XLS("application/vnd.ms-excel"), 
+        XLS("application/vnd.ms-excel"),
         XLT("application/vnd.ms-excel"),
         XLA("application/vnd.ms-excel"),
 
@@ -133,9 +133,9 @@ public interface NamedWithMimeType extends Serializable {
         XLAM("application/vnd.ms-excel.addin.macroEnabled.12"),
         XLSB("application/vnd.ms-excel.sheet.binary.macroEnabled.12"),
 
-        PPT("application/vnd.ms-powerpoint"), 
+        PPT("application/vnd.ms-powerpoint"),
         POT("application/vnd.ms-powerpoint"),
-        PPS("application/vnd.ms-powerpoint"), 
+        PPS("application/vnd.ms-powerpoint"),
         PPA("application/vnd.ms-powerpoint"),
 
         PPTX("application/vnd.openxmlformats-officedocument.presentationml.presentation"),
@@ -146,7 +146,7 @@ public interface NamedWithMimeType extends Serializable {
         POTM("application/vnd.ms-powerpoint.template.macroEnabled.12"),
         PPSM("application/vnd.ms-powerpoint.slideshow.macroEnabled.12"),
 
-        MDB("application/vnd.ms-access"), 
+        MDB("application/vnd.ms-access"),
 
         ;
 
diff --git a/api/schema/src/main/java/org/apache/isis/schema/IsisModuleSchema.java b/api/schema/src/main/java/org/apache/isis/schema/IsisModuleSchema.java
index 3279205..f9eb941 100644
--- a/api/schema/src/main/java/org/apache/isis/schema/IsisModuleSchema.java
+++ b/api/schema/src/main/java/org/apache/isis/schema/IsisModuleSchema.java
@@ -20,6 +20,9 @@ package org.apache.isis.schema;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleSchema {
 
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
index 60689be..fb2c36b 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/CommandSubscriberForJdo.java
@@ -36,6 +36,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandLog.CommandCompletionHook")
 @Order(OrderPrecedence.MIDPOINT) // after JdoPersistenceLifecycleService
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.java
index 9f1fe10..1353de3 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.java
@@ -29,6 +29,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures;
 import org.apache.isis.testing.fixtures.applib.teardown.jdo.TeardownFixtureJdoAbstract;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // @DomainService's
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUniqueId_command.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUniqueId_command.java
index 1725f81..ba8aa7d 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUniqueId_command.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUniqueId_command.java
@@ -36,6 +36,8 @@ import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdoRepository;
  * This mixin contributes a <tt>command</tt> action to any (non-command) implementation of
  * {@link org.apache.isis.commons.having.HasUniqueId}; that is: audit entries, and published events.  Thus, it
  * is possible to navigate from the effect back to the cause.
+ *
+ * @since 2.0 {@index}
  */
 @Action(
     semantics = SemanticsOf.SAFE
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUsername_recentCommandsByUser.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUsername_recentCommandsByUser.java
index 8c5fbc4..944f156 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUsername_recentCommandsByUser.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/HasUsername_recentCommandsByUser.java
@@ -32,6 +32,9 @@ import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdo;
 import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdoRepository;
 
 
+/**
+ * @since 2.0 {@index}
+ */
 @Collection(
     domainEvent = HasUsername_recentCommandsByUser.CollectionDomainEvent.class
 )
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/Object_recentCommands.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/Object_recentCommands.java
index 42ac568..8e68c15 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/Object_recentCommands.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/Object_recentCommands.java
@@ -35,6 +35,10 @@ import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdo;
 import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdoRepository;
 
 /**
+ * @since 2.0 {@index}
+ */
+
+/**
  * This mixin contributes a <tt>recentCommands</tt> action to any domain object
  * (unless also {@link HasUniqueId} - commands don't themselves have commands).
  */
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/T_recent.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/T_recent.java
index 58a9e2c..843c8fd 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/T_recent.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/mixins/T_recent.java
@@ -60,8 +60,7 @@ public abstract class T_recent<T> {
                 , domainObject);
     }
 
-    @Inject
-    CommandJdoRepository commandJdoRepository;
+    @Inject CommandJdoRepository commandJdoRepository;
     @Inject BookmarkService bookmarkService;
     @Inject QueryResultsCache queryResultsCache;
 
diff --git a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/ui/CommandServiceMenu.java b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/ui/CommandServiceMenu.java
index 7d77af9..eeee395 100644
--- a/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/ui/CommandServiceMenu.java
+++ b/extensions/core/command-log/impl/src/main/java/org/apache/isis/extensions/commandlog/impl/ui/CommandServiceMenu.java
@@ -50,6 +50,9 @@ import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdoRepository;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DomainService(
     nature = NatureOfService.VIEW,
     objectType = "isis.ext.commandLog.CommandServiceMenu"
@@ -134,7 +137,7 @@ public class CommandServiceMenu {
         commandServiceRepository.truncateLog();
     }
 
-    
+
     private LocalDate now() {
         return clockService.getClock().localDate(ZoneId.systemDefault());
     }
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
index d7aa331..8864f2b 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/IsisModuleExtCommandReplayPrimary.java
@@ -29,6 +29,9 @@ import org.apache.isis.extensions.commandreplay.primary.restapi.CommandRetrieval
 import org.apache.isis.extensions.commandreplay.primary.spiimpl.CaptureResultOfCommand;
 import org.apache.isis.extensions.commandreplay.primary.ui.CommandReplayOnPrimaryService;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // @Configuration's
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/config/PrimaryConfig.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/config/PrimaryConfig.java
index 215919c..f65e600 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/config/PrimaryConfig.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/config/PrimaryConfig.java
@@ -30,6 +30,9 @@ import org.apache.isis.core.config.IsisConfiguration;
 import lombok.Getter;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandReplayPrimary.PrimaryConfig")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/mixins/Object_openOnSecondary.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/mixins/Object_openOnSecondary.java
index 738f0ec..3a677d0 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/mixins/Object_openOnSecondary.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/mixins/Object_openOnSecondary.java
@@ -34,6 +34,9 @@ import org.apache.isis.extensions.commandreplay.primary.config.PrimaryConfig;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Action(
     semantics = SemanticsOf.SAFE,
     domainEvent = Object_openOnSecondary.ActionDomainEvent.class,
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
index e956335..f92de9f 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/restapi/CommandRetrievalService.java
@@ -40,6 +40,9 @@ import org.apache.isis.extensions.commandreplay.primary.IsisModuleExtCommandRepl
 
 import lombok.Getter;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DomainService(
     nature = NatureOfService.REST,
     objectType = "isis.ext.commandReplayPrimary.CommandRetrievalService"
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/spiimpl/CaptureResultOfCommand.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/spiimpl/CaptureResultOfCommand.java
index 1395a5b..8d4136d 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/spiimpl/CaptureResultOfCommand.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/spiimpl/CaptureResultOfCommand.java
@@ -39,6 +39,10 @@ import org.apache.isis.schema.common.v2.PeriodDto;
 import lombok.val;
 
 /**
+ * @since 2.0 {@index}
+ */
+
+/**
  * Uses the SPI infrastructure to copy over standard properties from {@link Command} to {@link CommandDto}.
  */
 @Service
diff --git a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
index 0fc4b8c..54ef737 100644
--- a/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
+++ b/extensions/core/command-replay/primary/src/main/java/org/apache/isis/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.java
@@ -51,6 +51,9 @@ import org.apache.isis.schema.cmd.v2.CommandsDto;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DomainService(
     nature = NatureOfService.VIEW,
     objectType = "isis.ext.commandReplayPrimary.CommandReplayOnPrimaryService"
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
index 034145e..cf016ca 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/IsisModuleExtCommandReplaySecondary.java
@@ -54,6 +54,9 @@ import org.apache.isis.extensions.quartz.spring.AutowiringSpringBeanJobFactory;
 
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // @Configuration's
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/SecondaryStatus.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/SecondaryStatus.java
index 076a4b5c..f590b2e 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/SecondaryStatus.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/SecondaryStatus.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.extensions.commandreplay.secondary;
 
+/**
+ * @since 2.0 {@index}
+ */
 public enum SecondaryStatus {
     TICKING_CLOCK_STATUS_UNKNOWN,
     TICKING_CLOCK_NOT_YET_INITIALIZED,
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.java
index ce33c9f..1255b2f 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.commandreplay.secondary.analyser;
 
 import org.apache.isis.extensions.commandlog.impl.jdo.CommandJdo;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface CommandReplayAnalyser {
 
     /**
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserException.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserException.java
index c4e570d..cd3aaa1 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserException.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserException.java
@@ -37,6 +37,9 @@ import org.apache.isis.schema.common.v2.InteractionType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandReplaySecondary.CommandReplayAnalyserException")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserResult.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserResult.java
index 9ebfc22..4a0d206 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserResult.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analyser/CommandReplayAnalyserResult.java
@@ -36,6 +36,9 @@ import org.apache.isis.schema.common.v2.InteractionType;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandReplaySecondary.CommandReplayAnalyserResult")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.java
index 78c5c91..9f1494e 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.java
@@ -33,6 +33,9 @@ import org.apache.isis.extensions.commandreplay.secondary.analyser.CommandReplay
 
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandReplaySecondary.CommandReplayAnalysisService")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
index b040814..1b1c327 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
@@ -52,6 +52,8 @@ import lombok.extern.log4j.Log4j2;
  *     thread-local.  These methods should therefore only be used in single-user
  *     systems, eg a replay secondary.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 @Service()
 @Named("isis.ext.commandReplaySecondary.TickingClockService")
@@ -149,4 +151,4 @@ public class TickingClockService {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/config/SecondaryConfig.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/config/SecondaryConfig.java
index d5a243d..937633c 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/config/SecondaryConfig.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/config/SecondaryConfig.java
@@ -32,6 +32,9 @@ import org.apache.isis.core.config.IsisConfiguration;
 import lombok.Getter;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.commandReplaySecondary.SecondaryConfig")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/executor/CommandExecutorServiceWithTime.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/executor/CommandExecutorServiceWithTime.java
index 46e8df6..63c7469 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/executor/CommandExecutorServiceWithTime.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/executor/CommandExecutorServiceWithTime.java
@@ -42,6 +42,8 @@ import lombok.extern.log4j.Log4j2;
  * <p>
  *     It then delegates down to the default implementation.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 @Service
 @Named("isis.ext.commandReplaySecondary.CommandExecutorServiceWithTime")
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/fetch/CommandFetcher.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/fetch/CommandFetcher.java
index 58790d6..c1daa70 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/fetch/CommandFetcher.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/fetch/CommandFetcher.java
@@ -47,6 +47,9 @@ import org.apache.isis.schema.cmd.v2.CommandsDto;
 import lombok.extern.log4j.Log4j2;
 
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service()
 @Named("isis.ext.commandReplaySecondary.CommandFetcher")
 @Order(OrderPrecedence.MIDPOINT)
@@ -167,4 +170,4 @@ public class CommandFetcher {
     @Inject
     SecondaryConfig secondaryConfig;
 
-}
\ No newline at end of file
+}
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/ReplicateAndReplayJob.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/ReplicateAndReplayJob.java
index f7de20e..f757f12 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/ReplicateAndReplayJob.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/ReplicateAndReplayJob.java
@@ -37,6 +37,9 @@ import org.apache.isis.extensions.commandreplay.secondary.jobcallables.Replicate
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DisallowConcurrentExecution
 @PersistJobDataAfterExecution
 @Log4j2
@@ -53,9 +56,9 @@ public class ReplicateAndReplayJob implements Job {
 
         if(secondaryConfig.isConfigured()) {
             val user = UserMemento.ofNameAndRoleNames(
-                    secondaryConfig.getPrimaryUser(), 
+                    secondaryConfig.getPrimaryUser(),
                     secondaryConfig.getQuartzRoles().stream());
-            
+
             authentication = SimpleAuthentication.validOf(user);
             exec(quartzContext);
         }
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/SecondaryStatusData.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/SecondaryStatusData.java
index e11052d..d43e165 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/SecondaryStatusData.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/job/SecondaryStatusData.java
@@ -26,6 +26,9 @@ import org.apache.isis.extensions.quartz.context.JobExecutionData;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Log4j2
 class SecondaryStatusData {
 
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/jobcallables/ReplicateAndRunCommands.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/jobcallables/ReplicateAndRunCommands.java
index cc40bd6..f055957 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/jobcallables/ReplicateAndRunCommands.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/jobcallables/ReplicateAndRunCommands.java
@@ -48,6 +48,8 @@ import lombok.extern.log4j.Log4j2;
  *     (<code>{@link org.apache.isis.extensions.commandreplay.secondary.job.ReplicateAndReplayJob}</code>)
  *     files.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 @Log4j2
 public class ReplicateAndRunCommands implements Callable<SecondaryStatus> {
@@ -189,4 +191,4 @@ public class ReplicateAndRunCommands implements Callable<SecondaryStatus> {
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_exclude.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_exclude.java
index 8d401df..59b9e95 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_exclude.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_exclude.java
@@ -34,6 +34,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 
+/**
+ * @since 2.0 {@index}
+ */
 @Action(
     semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE,
     domainEvent = CommandJdo_exclude.ActionDomainEvent.class
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_replayQueue.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_replayQueue.java
index ad2e9e4..0156141 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_replayQueue.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/CommandJdo_replayQueue.java
@@ -32,6 +32,9 @@ import org.apache.isis.extensions.commandreplay.secondary.config.SecondaryConfig
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Collection(
     domainEvent = CommandJdo_replayQueue.CollectionDomainEvent.class
 )
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/Object_openOnPrimary.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/Object_openOnPrimary.java
index b2528b9..b3fa856 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/Object_openOnPrimary.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/mixins/Object_openOnPrimary.java
@@ -34,6 +34,9 @@ import org.apache.isis.extensions.commandreplay.secondary.config.SecondaryConfig
 import lombok.RequiredArgsConstructor;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Action(
     semantics = SemanticsOf.SAFE,
     domainEvent = Object_openOnPrimary.ActionDomainEvent.class,
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.java
index 505c668..f8bf43d 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.java
@@ -26,6 +26,8 @@ package org.apache.isis.extensions.commandreplay.secondary.spi;
  * If no implementation is configured, then replication/replay will continue
  * without interruption.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public interface ReplayCommandExecutionController {
 
diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
index 69c6aaf..b3531f9 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/ui/CommandReplayOnSecondaryService.java
@@ -46,6 +46,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DomainService(
     nature = NatureOfService.VIEW,
     objectType = "isis.ext.commandReplaySecondary.CommandReplayOnSecondaryService"
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/IsisModuleIncModelApplib.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/IsisModuleIncModelApplib.java
index 1005fc0..969e674 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/IsisModuleIncModelApplib.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/IsisModuleIncModelApplib.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.modelannotation.applib;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleIncModelApplib {
 
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
index 36ed7b7..02977f7 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
@@ -26,13 +26,13 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Indicates that a method is a supporting-method, one that contributes (hide, validate, ...) 
+ * Indicates that a method is a supporting-method, one that contributes (hide, validate, ...)
  * to an <em>Action</em>.
  * <p>
- * By placing the {@link Model} annotation on a method, a contract with the meta-model is enforced, 
+ * By placing the {@link Model} annotation on a method, a contract with the meta-model is enforced,
  * such that this method must be recognized and cannot be ignored.
  *
- * @since 2.0
+ * @since 2.0 {@index}
  */
 @Inherited
 @Target({ ElementType.METHOD })
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/IsisModuleExtModelAnnotation.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/IsisModuleExtModelAnnotation.java
index f6b5f5c..cb41ff5 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/IsisModuleExtModelAnnotation.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/IsisModuleExtModelAnnotation.java
@@ -24,6 +24,9 @@ import org.springframework.context.annotation.Import;
 import org.apache.isis.extensions.modelannotation.applib.IsisModuleIncModelApplib;
 import org.apache.isis.extensions.modelannotation.metamodel.services.IncubatorMetaModelPlugin;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // modules
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
index d5d3624..41c05cb 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
@@ -38,12 +38,10 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.extensions.modelannotation.applib.annotation.Model;
 
 /**
- * 
- * @since 2.0
- *
+ * @since 2.0 {@index}
  */
-public class SupportingMethodValidatorRefinerFactory 
-extends FacetFactoryAbstract 
+public class SupportingMethodValidatorRefinerFactory
+extends FacetFactoryAbstract
 implements MetaModelRefiner {
 
     public SupportingMethodValidatorRefinerFactory() {
@@ -62,17 +60,17 @@ implements MetaModelRefiner {
 
             final Class<?> type = spec.getCorrespondingClass();
 
-//XXX for debugging ...            
+//XXX for debugging ...
 //            if(spec.getSpecId().asString().contains("ProperMemberSupport")) {
-//                
+//
 //                val sb = new StringBuffer();
-//                
+//
 //                sb.append("\n### debug " + spec.getSpecId().asString()).append("\n");
-//                
+//
 //                spec.streamFacetHolders()
 //                .flatMap(FacetHolder::streamFacets)
 //                .forEach(facet->sb.append("facet: " + facet).append("\n"));
-//                
+//
 //                System.out.println(sb);
 //            }
 
@@ -84,7 +82,7 @@ implements MetaModelRefiner {
                     .map(ImperativeFacet::getMethods)
                     .flatMap(List::stream)
                     .collect(Collectors.toCollection(HashSet::new));
-            
+
             // methods intended to be included with the meta-model
             final HashSet<Method> intendedMethods = _Sets.<Method>newHashSet();
             for(Method method: type.getDeclaredMethods()) {
@@ -97,7 +95,7 @@ implements MetaModelRefiner {
             final Set<Method> notRecognizedMethods =
                     _Sets.minus(intendedMethods, recognizedMethods);
 
-            // find reasons about why these are not recognized    
+            // find reasons about why these are not recognized
             notRecognizedMethods.forEach(notRecognizedMethod->{
                 final List<String>  unmetContraints = unmetContraints(spec, notRecognizedMethod);
 
@@ -123,7 +121,7 @@ implements MetaModelRefiner {
     // -- VALIDATION LOGIC
 
     private List<String> unmetContraints(
-            ObjectSpecification spec, 
+            ObjectSpecification spec,
             Method method) {
 
         //val type = spec.getCorrespondingClass();
@@ -132,7 +130,7 @@ implements MetaModelRefiner {
         if (!MethodUtil.isPublic(method)) {
             unmetContraints.add("method must be 'public'");
             return unmetContraints; // don't check any further
-        } 
+        }
 
         unmetContraints.add("misspelled prefix or unsupported method signature");
         return unmetContraints;
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/services/IncubatorMetaModelPlugin.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/services/IncubatorMetaModelPlugin.java
index 21a8498..a174e8d 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/services/IncubatorMetaModelPlugin.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/metamodel/services/IncubatorMetaModelPlugin.java
@@ -24,13 +24,16 @@ import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.extensions.modelannotation.metamodel.facets.SupportingMethodValidatorRefinerFactory;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Component
 public class IncubatorMetaModelPlugin implements MetaModelRefiner {
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
         programmingModel.addFactory(
-                ProgrammingModel.FacetProcessingOrder.C2_AFTER_METHOD_REMOVING, 
+                ProgrammingModel.FacetProcessingOrder.C2_AFTER_METHOD_REMOVING,
                 SupportingMethodValidatorRefinerFactory.class,
                 ProgrammingModel.Marker.INCUBATING
                 );
diff --git a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/IsisModuleExtQuartzImpl.java b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/IsisModuleExtQuartzImpl.java
index 5d79c3e..fbd2ad9 100644
--- a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/IsisModuleExtQuartzImpl.java
+++ b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/IsisModuleExtQuartzImpl.java
@@ -21,6 +21,9 @@ package org.apache.isis.extensions.quartz;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // @Configuration's
diff --git a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/context/JobExecutionData.java b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/context/JobExecutionData.java
index e884703..01b2f5e 100644
--- a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/context/JobExecutionData.java
+++ b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/context/JobExecutionData.java
@@ -25,6 +25,8 @@ import lombok.extern.log4j.Log4j2;
 
 /**
  * Requires that the job is annotated with the {@link org.quartz.PersistJobDataAfterExecution} annotation.
+ *
+ * @since 2.0 {@index}
  */
 @Log4j2
 @RequiredArgsConstructor
diff --git a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/spring/AutowiringSpringBeanJobFactory.java b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/spring/AutowiringSpringBeanJobFactory.java
index 3f4e18c..1b2e603 100644
--- a/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/spring/AutowiringSpringBeanJobFactory.java
+++ b/extensions/core/quartz/impl/src/main/java/org/apache/isis/extensions/quartz/spring/AutowiringSpringBeanJobFactory.java
@@ -24,6 +24,9 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.scheduling.quartz.SpringBeanJobFactory;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class AutowiringSpringBeanJobFactory
         extends SpringBeanJobFactory
         implements ApplicationContextAware {
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
index 6ce8d5f..ae6b62f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.api;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleExtSecmanApi {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
index c66af4a..58668da 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
@@ -28,6 +28,9 @@ import lombok.Getter;
 import lombok.NonNull;
 import lombok.Singular;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Builder
 public class SecmanConfiguration {
 
@@ -57,30 +60,30 @@ public class SecmanConfiguration {
     final String[] adminStickyNamespacePermissions = new String[]{
             "isis.ext.secman"
     };
-    
-    @Getter @Singular 
+
+    @Getter @Singular
     final Set<String> adminAdditionalNamespacePermissions;
-    
+
     /**
      * Delegated users, on first successful logon, are auto-created but disabled (by default).
-     * <p> 
-     * This option allows to override this behavior, such that authenticated 
+     * <p>
+     * This option allows to override this behavior, such that authenticated
      * users are also auto-enabled.
      * <p>
-     * default: false 
+     * default: false
      *
      */
-    @Getter @Builder.Default 
+    @Getter @Builder.Default
     final boolean autoEnableIfDelegatedAndAuthenticated = false;
 
     // -- UTILITIES
-    
+
     public Stream<String> streamAdminNamespacePermissions() {
         return Stream.concat(
                 _NullSafe.stream(adminStickyNamespacePermissions),
                 _NullSafe.stream(adminAdditionalNamespacePermissions));
     }
-    
+
     public boolean isStickyAdminNamespace(String featureFqn) {
         return _NullSafe.stream(adminStickyNamespacePermissions)
         .anyMatch(stickyPackage->stickyPackage.equals(featureFqn));
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealm.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealm.java
index 8b4a512..767ddc7 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealm.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealm.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.api;
 
 import java.util.EnumSet;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface SecurityRealm {
 
     EnumSet<SecurityRealmCharacteristic> getCharacteristics();
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmCharacteristic.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmCharacteristic.java
index 0cd6b5d..331a4e8 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmCharacteristic.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmCharacteristic.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.extensions.secman.api;
 
+/**
+ * @since 2.0 {@index}
+ */
 public enum SecurityRealmCharacteristic {
     DELEGATING
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmService.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmService.java
index 87402f1..6f45001 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmService.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecurityRealmService.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.extensions.secman.api;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface SecurityRealmService {
 
     SecurityRealm getCurrentRealm();
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionService.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionService.java
index 70101a8..f3ca4cb 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionService.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionService.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.api.encryption;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface PasswordEncryptionService {
 
     @Programmatic
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionServiceNone.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionServiceNone.java
index 0fdb5fe..80b7996 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionServiceNone.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/encryption/PasswordEncryptionServiceNone.java
@@ -22,6 +22,9 @@ import java.util.Objects;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class PasswordEncryptionServiceNone implements PasswordEncryptionService {
 
     @Programmatic
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/events/UserCreatedEvent.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/events/UserCreatedEvent.java
index bea7172..d1e06c9 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/events/UserCreatedEvent.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/events/UserCreatedEvent.java
@@ -24,10 +24,10 @@ import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 import lombok.NonNull;
 import lombok.Value;
 
-/** 
+/**
  * SecMan fires this event when a new user entity just got persisted.
  * <p>
- * Users may subscribe to this event in order to apply business 
+ * Users may subscribe to this event in order to apply business
  * logic to the newly created user. eg. add default roles
  * <p>
  * <pre>
@@ -38,25 +38,26 @@ import lombok.Value;
  *         // business logic ...
  *     }
  * }
- *                     
+ *
  * </pre>
- * @since Jun 23, 2020
+ *
+ * @since 2.0 {@index}
  */
 @Value(staticConstructor="of")
 public class UserCreatedEvent {
-    
+
     @NonNull private ApplicationUser user;
 
     // -- SHORTCUTS
-    
+
     public AccountType getAccountType() {
-        return user.getAccountType(); 
+        return user.getAccountType();
     }
-    
+
     public String getUserName() {
-        return user.getUsername(); 
+        return user.getUsername();
     }
-    
+
     public boolean isDelegated() {
         return getAccountType()!=null && getAccountType().isDelegated();
     }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
index a28d5c7..a207be5 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
@@ -61,27 +61,29 @@ import lombok.val;
  *     implies a {@link ApplicationPermissionMode#CHANGING usability} veto.</li>
  * </ul>
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 @DomainObject(objectType = "isis.ext.secman.IApplicationPermission")
 public interface ApplicationPermission {
-    
+
     // -- DOMAIN EVENTS
-    
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationPermission, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationPermission, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationPermission> {}
-    
+
     public static class AllowDomainEvent extends ActionDomainEvent {}
     public static class UpdateRoleDomainEvent extends ActionDomainEvent {}
     public static class VetoDomainEvent extends ActionDomainEvent {}
     public static class DeleteDomainEvent extends ActionDomainEvent {}
     public static class ChangingDomainEvent extends ActionDomainEvent {}
     public static class ViewingDomainEvent extends ActionDomainEvent {}
-    
+
     public static class RelocateNamespaceDomainEvent extends ActionDomainEvent {}
-    
+
     // -- MODEL
-    
+
     /**
      * having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use
      * wrapperFactory#unwrap(...) method, which is otherwise broken in Isis 1.6.0
@@ -95,7 +97,7 @@ public interface ApplicationPermission {
 
         createFeatureId()
         .ifPresent(featureId->{
-            
+
             switch (featureId.getType()) {
             case PACKAGE:
                 buf.append(getFeatureFqn());              // com.mycompany
@@ -114,16 +116,16 @@ public interface ApplicationPermission {
                 .append(featureId.getMemberName());   // com.mycompany.Bar#foo
                 break;
             }
-            
+
         });
-        
+
         return buf.toString();
     }
-    
+
     ApplicationFeatureType getFeatureType();
 
     // -- ROLE
-    
+
     @Property
     @PropertyLayout(
             hidden=Where.REFERENCES_PARENT
@@ -133,49 +135,49 @@ public interface ApplicationPermission {
         throw _Exceptions.unsupportedOperation("please implement me");
     }
     void setRole(ApplicationRole applicationRole);
-    
+
     // -- RULE
-    
+
     @Property
     @MemberOrder(name="Permissions", sequence = "2")
     default ApplicationPermissionRule getRule() {
         throw _Exceptions.unsupportedOperation("please implement me");
     }
     void setRule(ApplicationPermissionRule rule);
-    
+
     // -- MODE
-    
+
     @Property
     @MemberOrder(name="Permissions", sequence = "3")
     default ApplicationPermissionMode getMode() {
         throw _Exceptions.unsupportedOperation("please implement me");
     }
     void setMode(ApplicationPermissionMode changing);
-    
+
     // -- TYPE
-    
+
     @Property
     @MemberOrder(name="Feature", sequence = "5")
     default String getType() {
         throw _Exceptions.unsupportedOperation("please implement me");
     }
-    
+
     // -- FQN
-    
+
     @Property
     @MemberOrder(name="Feature", sequence = "5.1")
     default String getFeatureFqn() {
         throw _Exceptions.unsupportedOperation("please implement me");
     }
     void setFeatureFqn(String featureFqn);
-    
+
     // -- HELPER
-    
+
     @Programmatic
     default Optional<ApplicationFeatureId> createFeatureId() {
         return Optional.of(getFeatureType())
                 .map(featureType -> ApplicationFeatureId.newFeature(featureType, getFeatureFqn()));
     }
-    
+
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
index 1f0f0a4..1076fcc 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionMode.java
@@ -24,6 +24,8 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 /**
  * Named after UNIX modes (<code>chmod</code> etc), determines that nature of access (of denial of access if vetoed)
  * to an {@link ApplicationFeature}.
+ *
+ * @since 2.0 {@index}
  */
 public enum ApplicationPermissionMode {
     /**
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
index fe49246..eb7c476 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRepository.java
@@ -25,23 +25,26 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureType;
 import org.apache.isis.extensions.secman.api.role.ApplicationRole;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationPermissionRepository<P extends ApplicationPermission> {
 
     Optional<P> findByUserAndPermissionValue(String username, ApplicationPermissionValue changingPermissionValue);
 
     Optional<P> findByRoleAndRuleAndFeature(
-            ApplicationRole holder, 
+            ApplicationRole holder,
             ApplicationPermissionRule rule,
-            ApplicationFeatureType type, 
+            ApplicationFeatureType type,
             String featureFqn);
 
     Collection<P> allPermissions();
-    
+
     Collection<P> findOrphaned();
     Collection<P> findByFeatureCached(ApplicationFeatureId featureId);
     Collection<P> findByRoleAndRuleAndFeatureTypeCached(
             ApplicationRole holder,
-            ApplicationPermissionRule rule, 
+            ApplicationPermissionRule rule,
             ApplicationFeatureType type);
 
 
@@ -49,21 +52,21 @@ public interface ApplicationPermissionRepository<P extends ApplicationPermission
      * @return detached entity
      */
     P newApplicationPermission();
-    
+
     P newPermission(
             ApplicationRole role,
-            ApplicationPermissionRule rule, 
+            ApplicationPermissionRule rule,
             ApplicationPermissionMode mode,
-            String packageFqn, 
-            String className, 
+            String packageFqn,
+            String className,
             String memberName);
 
     P newPermission(
-            ApplicationRole holder, 
-            ApplicationPermissionRule rule, 
+            ApplicationRole holder,
+            ApplicationPermissionRule rule,
             ApplicationPermissionMode mode,
-            ApplicationFeatureType featureType, 
+            ApplicationFeatureType featureType,
             String featureFqn);
-    
+
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
index bf63738..25ac6f0 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionRule.java
@@ -24,6 +24,8 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeature;
 /**
  * Whether the permission {@link #ALLOW grants} or {@link #VETO denies} access to an
  * {@link ApplicationFeature}.
+ *
+ * @since 2.0 {@index}
  */
 public enum ApplicationPermissionRule {
     /**
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
index b4feb50..7291ce6 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
@@ -35,6 +35,8 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
  *     Intended for value type arithmetic and also for caching.  No user/role information is held because that information
  *     is not required to perform the arithmetic.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public class ApplicationPermissionValue implements Comparable<ApplicationPermissionValue>, Serializable {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
index 46eb013..5c53ecc 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
@@ -30,12 +30,14 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
 
 /**
- * A serializable value object representing a set of (anonymized) 
+ * A serializable value object representing a set of (anonymized)
  * {@link ApplicationPermissionValue permission}s.
  *
  * <p>
  *     Intended for value type arithmetic and also for caching.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public class ApplicationPermissionValueSet implements Serializable {
 
@@ -77,14 +79,14 @@ public class ApplicationPermissionValueSet implements Serializable {
      *                     -> VETO, VIEWING
      *                     -> VETO, CHANGING
      * </pre>
-     * 
+     *
      * <p>
      *     Note that {@link org.apache.isis.extensions.security.manager.jdo.dom.permission.ApplicationPermissionRule#ALLOW allow} rule
      *     is ordered before {@link org.apache.isis.extensions.security.manager.jdo.dom.permission.ApplicationPermissionRule#VETO veto} rule
      *     meaning that it is checked first and therefore also takes precedence.
      * </p>
      */
-    private final _Multimaps.SetMultimap<ApplicationFeatureId, ApplicationPermissionValue> permissionsByFeature = 
+    private final _Multimaps.SetMultimap<ApplicationFeatureId, ApplicationPermissionValue> permissionsByFeature =
             _Multimaps.newSortedSetMultimap(
                     Collections.reverseOrder(ApplicationFeatureId.Comparators.natural()),
                     null // natural element order
@@ -99,7 +101,7 @@ public class ApplicationPermissionValueSet implements Serializable {
     // -- constructor
 
     public ApplicationPermissionValueSet(
-            final List<ApplicationPermissionValue> permissionValues, 
+            final List<ApplicationPermissionValue> permissionValues,
             final PermissionsEvaluationService permissionsEvaluationService) {
 
         this.values = Collections.unmodifiableList(_Lists.newArrayList(permissionValues));
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
index bd438df..dfef149 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
@@ -31,6 +31,8 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
  *     All implementations of this interface must be {@link java.io.Serializable}, because
  *     an instance is serialized into {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValueSet}.
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public interface PermissionsEvaluationService extends Serializable {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
index 977f06b..3c041ac 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
@@ -23,6 +23,9 @@ import java.util.Collection;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
 
+/**
+ * @since 2.0 {@index}
+ */
 public abstract class PermissionsEvaluationServiceAbstract implements PermissionsEvaluationService {
 
     private static final long serialVersionUID = 1L;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
index 5c2a48d..03da7eb 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
@@ -22,6 +22,8 @@ import java.util.Collection;
 
 /**
  * An implementation whereby a VETO permission for a feature overrides an ALLOW (for same scope).
+ *
+ * @since 2.0 {@index}
  */
 public class PermissionsEvaluationServiceAllowBeatsVeto extends PermissionsEvaluationServiceAbstract {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
index 5fc66d5..21bd7a4 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
@@ -27,6 +27,8 @@ import lombok.val;
 
 /**
  * An implementation whereby a VETO permission for a feature overrides an ALLOW (for same scope).
+ *
+ * @since 2.0 {@index}
  */
 public class PermissionsEvaluationServiceVetoBeatsAllow extends PermissionsEvaluationServiceAbstract {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
index 890156e..1fa9dd0 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.api.role;
 
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationRole {
 
     public static final int MAX_LENGTH_NAME = 50;
@@ -27,11 +30,11 @@ public interface ApplicationRole {
     public static final int TYPICAL_LENGTH_DESCRIPTION = 50;
 
     // -- EVENTS
-    
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationRole, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationRole, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationRole> {}
-    
+
     public static class AddUserDomainEvent extends ActionDomainEvent {}
     public static class RemoveUserDomainEvent extends ActionDomainEvent {}
     public static class AddActionDomainEvent extends ActionDomainEvent {}
@@ -40,14 +43,14 @@ public interface ApplicationRole {
     public static class AddPackageDomainEvent extends ActionDomainEvent {}
     public static class AddPropertyDomainEvent extends ActionDomainEvent {}
     public static class RemovePermissionDomainEvent extends ActionDomainEvent {}
-    
+
     public static class DeleteDomainEvent extends ActionDomainEvent {}
-    
+
     public static class UpdateDescriptionDomainEvent extends ActionDomainEvent {}
     public static class UpdateNameDomainEvent extends ActionDomainEvent {}
-    
+
     // -- MODEL
-    
+
     /**
      * having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use
      * wrapperFactory#unwrap(...) method, which is otherwise broken in Isis 1.6.0
@@ -55,10 +58,10 @@ public interface ApplicationRole {
     default String title() {
         return getName();
     }
-    
+
     String getName();
     void setName(String name);
-    
+
     String getDescription();
     void setDescription(String description);
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
index 21bc101..75b16a1 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
@@ -23,21 +23,24 @@ import java.util.Optional;
 
 import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationRoleRepository<R extends ApplicationRole> {
 
     /**
-     * 
+     *
      * @return detached entity
      */
     R newApplicationRole();
-    
+
     Collection<R> allRoles();
 
     R newRole(String name, String description);
 
     Collection<R> findNameContaining(String search);
     Collection<R> getRoles(ApplicationUser user);
-    
+
     /**
      * auto-complete support
      * @param search
@@ -54,6 +57,6 @@ public interface ApplicationRoleRepository<R extends ApplicationRole> {
 
     void deleteRole(ApplicationRole holder);
 
-    
+
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
index 591c7da..f55e545 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
@@ -20,18 +20,21 @@ package org.apache.isis.extensions.secman.api.tenancy;
 
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationTenancy {
 
     public static final int MAX_LENGTH_PATH = 255;
     public static final int MAX_LENGTH_NAME = 40;
     public static final int TYPICAL_LENGTH_NAME = 20;
-    
+
     // -- DOMAIN EVENTS
-    
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationTenancy, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationTenancy, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationTenancy> {}
-    
+
     public static class AddUserDomainEvent extends ActionDomainEvent {}
     public static class RemoveUserDomainEvent extends ActionDomainEvent {}
     public static class AddChildDomainEvent extends ActionDomainEvent {}
@@ -39,19 +42,19 @@ public interface ApplicationTenancy {
     public static class RemoveChildDomainEvent extends ActionDomainEvent {}
     public static class UpdateNameDomainEvent extends ActionDomainEvent {}
     public static class UpdateParentDomainEvent extends ActionDomainEvent {}
-    
+
     // -- MODEL
-    
+
     default String title() {
         return getName();
     }
-    
+
     public String getPath();
 
     public String getName();
     public void setName(String name);
 
     public ApplicationTenancy getParent();
-    
+
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.java
index a149ef9..01128cd 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.java
@@ -26,6 +26,8 @@ import org.apache.isis.extensions.secman.api.user.ApplicationUser;
  * making the call (the "who").
  *
  * @see #handles(Class)
+ *
+ * @since 2.0 {@index}
  */
 public interface ApplicationTenancyEvaluator {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyRepository.java
index 7bf17a7..7afbe7f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancyRepository.java
@@ -22,18 +22,21 @@ import java.util.Collection;
 
 import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationTenancyRepository<T extends ApplicationTenancy> {
 
     /**
-     * 
+     *
      * @return detached entity
      */
     T newApplicationTenancy();
-    
+
     Collection<T> allTenancies();
     Collection<T> getChildren(ApplicationTenancy tenancy);
     Collection<T> findByNameOrPathMatchingCached(String partialNameOrPath);
-    
+
     /**
      * auto-complete support
      * @param search
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/HasAtPath.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/HasAtPath.java
index 8a73c05..552ecf9 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/HasAtPath.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/HasAtPath.java
@@ -102,6 +102,8 @@ package org.apache.isis.extensions.secman.api.tenancy;
  * </table>
  * <p>any object that is not tenanted (that is, its class does not implement {@link HasAtPath the WithApplicationTenancy interface} is accessible by any user (usual permission rules apply).
  * </p>
+ *
+ * @since 2.0 {@index}
  */
 public interface HasAtPath {
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/AccountType.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/AccountType.java
index eeaea49..1fbe34f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/AccountType.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/AccountType.java
@@ -21,8 +21,10 @@ package org.apache.isis.extensions.secman.api.user;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 
 /**
- * Whether the user's account is local enabled (user/password) or 
+ * Whether the user's account is local enabled (user/password) or
  * delegated (eg LDAP), as per {@link IsisModuleSecurityRealm#setDelegateAuthenticationRealm(org.apache.shiro.realm.AuthenticatingRealm)}.
+ *
+ * @since 2.0 {@index}
  */
 public enum AccountType {
     LOCAL,
@@ -31,11 +33,11 @@ public enum AccountType {
     public boolean isLocal() {
         return this==LOCAL;
     }
-    
+
     public boolean isDelegated() {
         return this==DELEGATED;
     }
-    
+
     @Override
     public String toString() {
         return StringExtensions.capitalize(name());
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
index d783b74..dc40a86 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
@@ -26,24 +26,26 @@ import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionVal
 import org.apache.isis.extensions.secman.api.role.ApplicationRole;
 import org.apache.isis.extensions.secman.api.tenancy.HasAtPath;
 
-
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationUser extends HasUsername, HasAtPath {
 
     // -- CONSTANTS
-    
+
     public static final int MAX_LENGTH_USERNAME = 30;
     public static final int MAX_LENGTH_FAMILY_NAME = 50;
     public static final int MAX_LENGTH_GIVEN_NAME = 50;
     public static final int MAX_LENGTH_KNOWN_AS = 20;
     public static final int MAX_LENGTH_EMAIL_ADDRESS = 50;
     public static final int MAX_LENGTH_PHONE_NUMBER = 25;
-    
-    // -- DOMAIN EVENTS 
-    
+
+    // -- DOMAIN EVENTS
+
     public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationUser, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationUser, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationUser> {}
-    
+
     public static class AddRoleDomainEvent extends ActionDomainEvent {}
     public static class UpdateAtPathDomainEvent extends ActionDomainEvent {}
     public static class UpdateUsernameDomainEvent extends ActionDomainEvent {}
@@ -63,7 +65,7 @@ public interface ApplicationUser extends HasUsername, HasAtPath {
     public static class UserDuplicateDomainEvent extends ActionDomainEvent {}
 
     // -- MODEL
-    
+
     /**
      * having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use
      * wrapperFactory#unwrap(...) method, which is otherwise broken in Isis 1.6.0
@@ -73,9 +75,9 @@ public interface ApplicationUser extends HasUsername, HasAtPath {
     }
 
     default String iconName() {
-        return getStatus().isEnabled() ? "enabled" : "disabled"; 
+        return getStatus().isEnabled() ? "enabled" : "disabled";
     }
-    
+
     String getName();
 
     String getEncryptedPassword();
@@ -111,13 +113,13 @@ public interface ApplicationUser extends HasUsername, HasAtPath {
     void setPhoneNumber(String phoneNumber);
 
     void setUsername(String username);
-    
+
     void setEncryptedPassword(String encryptedPassword);
 
     boolean isForSelfOrRunAsAdministrator();
 
     boolean isHasPassword();
-    
+
     default boolean isLocalAccount() {
         return getAccountType() == AccountType.LOCAL;
     }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
index 2eb41ff..7d0b7cf 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
@@ -30,6 +30,9 @@ import org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancy;
 
 import lombok.NonNull;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface ApplicationUserRepository<U extends ApplicationUser> {
 
     /**
@@ -45,7 +48,7 @@ public interface ApplicationUserRepository<U extends ApplicationUser> {
     Collection<U> findByAtPath(String atPath);
     Collection<U> findByRole(ApplicationRole role);
     Collection<U> findByTenancy(ApplicationTenancy tenancy);
-    
+
     /**
      * auto-complete support
      * @param search
@@ -59,11 +62,11 @@ public interface ApplicationUserRepository<U extends ApplicationUser> {
     boolean isPasswordFeatureEnabled(ApplicationUser holder);
 
     boolean updatePassword(ApplicationUser user, String password);
-    
+
     U newUser(String username, AccountType accountType, Consumer<U> beforePersist);
 
     default U newLocalUser(
-            @NonNull String username, 
+            @NonNull String username,
             @Nullable Password password,
             @NonNull ApplicationUserStatus status) {
 
@@ -88,7 +91,7 @@ public interface ApplicationUserRepository<U extends ApplicationUser> {
 
     }
 
-    
+
 
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserStatus.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserStatus.java
index eaa706a..da794d6 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserStatus.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserStatus.java
@@ -22,6 +22,8 @@ import org.apache.isis.core.metamodel.commons.StringExtensions;
 
 /**
  * Whether the user's account is enabled or disabled.
+ *
+ * @since 2.0 {@index}
  */
 public enum ApplicationUserStatus {
     ENABLED,
diff --git a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.java b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.java
index d97f6a6..903c112 100644
--- a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.java
+++ b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.java
@@ -23,6 +23,9 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.secman.encryption.jbcrypt.services.PasswordEncryptionServiceUsingJBcrypt;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
     PasswordEncryptionServiceUsingJBcrypt.class
diff --git a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.java b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.java
index 4d81e0a..1ec9fab 100644
--- a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.java
+++ b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/isis/extensions/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.java
@@ -28,6 +28,9 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.extensions.secman.api.encryption.PasswordEncryptionService;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.secman.PasswordEncryptionServiceUsingJBcrypt")
 @Order(OrderPrecedence.MIDPOINT)
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
index c591c89..642daec 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
@@ -21,6 +21,9 @@ package org.apache.isis.extensions.secman.model;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @ComponentScan(
         basePackageClasses= {
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
index 3219ea9..e5c4f6d 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
@@ -35,6 +35,9 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.user.ApplicationUser;
 import org.apache.isis.extensions.secman.api.user.ApplicationUserRepository;
 
+/**
+ * @since 2.0 {@index}
+ */
 @DomainService(
         nature = NatureOfService.VIEW,
         objectType = "isis.ext.secman.MeService"
@@ -51,7 +54,7 @@ public class MeService {
     @Inject private ApplicationUserRepository<? extends ApplicationUser> applicationUserRepository;
     @Inject private UserService userService;
     @Inject private javax.inject.Provider<QueryResultsCache> queryResultsCacheProvider;
-    
+
     // -- iconName
     public String iconName() {
         return "applicationUser";
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
index d98e1f2..148215d 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java
@@ -21,6 +21,9 @@ package org.apache.isis.extensions.secman.jdo;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @ComponentScan(
         basePackageClasses= {
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
index dee96ee..9d6facb 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
@@ -32,6 +32,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
 
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.secman.SeedSecurityModuleService")
 @Order(OrderPrecedence.MIDPOINT)
@@ -56,9 +59,9 @@ public class SeedSecurityModuleService {
 
             fixtureScripts.run(new SeedUsersAndRolesFixtureScript());
         }
-        
+
     }
 
-    
+
 
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedUsersAndRolesFixtureScript.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedUsersAndRolesFixtureScript.java
index de66e4f..25cb3f2 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedUsersAndRolesFixtureScript.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedUsersAndRolesFixtureScript.java
@@ -33,8 +33,10 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
  * This fixture script will be run automatically on start-up by virtue of the fact that the
  * {@link org.apache.isis.extensions.secman.jdo.seed.SeedSecurityModuleService} is a
  * {@link org.apache.isis.applib.annotation.DomainService} and calls the setup during its
- * {@link org.apache.isis.extensions.secman.jdo.seed.SeedSecurityModuleService#init() init} 
+ * {@link org.apache.isis.extensions.secman.jdo.seed.SeedSecurityModuleService#init() init}
  * ({@link javax.annotation.PostConstruct}) method.
+ *
+ * @since 2.0 {@index}
  */
 public class SeedUsersAndRolesFixtureScript extends FixtureScript {
 
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/GlobalTenancy.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/GlobalTenancy.java
index 9ded73b..53ce9a0 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/GlobalTenancy.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/GlobalTenancy.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.jdo.seed.scripts;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class GlobalTenancy extends AbstractTenancyFixtureScript {
 
     public static final String TENANCY_NAME = "Global";
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
index 475ecbb..4bc5012 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
@@ -22,6 +22,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtFixturesFixtureResultsRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
     public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
index 43c90c3..3285d50 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
@@ -23,6 +23,9 @@ import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
     private String[] adminInitialPackagePermissions;
@@ -40,5 +43,5 @@ public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermiss
                 ApplicationPermissionMode.CHANGING,
                 adminInitialPackagePermissions);
     }
-    
+
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminUser.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminUser.java
index 9dd98d5..73f5ddb 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminUser.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanAdminUser.java
@@ -23,14 +23,17 @@ import java.util.Arrays;
 import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.user.AccountType;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtSecmanAdminUser extends AbstractUserAndRolesFixtureScript {
 
     public IsisExtSecmanAdminUser(SecmanConfiguration configBean) {
         super(
-                configBean.getAdminUserName(), 
+                configBean.getAdminUserName(),
                 configBean.getAdminPassword(),
                 null,
-                GlobalTenancy.TENANCY_PATH, 
+                GlobalTenancy.TENANCY_PATH,
                 AccountType.LOCAL,
                 Arrays.asList(configBean.getAdminRoleName()));
     }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
index a8d5564..8bf6a6f 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
@@ -24,6 +24,8 @@ import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRul
 
 /**
  * Role to run in the prototype fixture scripts for the example webapp for the security module.
+ *
+ * @since 2.0 {@index}
  */
 public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
index 450536e..70e84f3 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
@@ -29,6 +29,8 @@ import org.apache.isis.extensions.secman.model.app.user.MeService;
 /**
  * Role for regular users of the security module, providing the ability to lookup their user account using the
  * {@link org.apache.isis.extensions.secman.model.app.user.MeService}, and for viewing and maintaining their user details.
+ *
+ * @since 2.0 {@index}
  */
 public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
@@ -50,7 +52,7 @@ public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndP
                 ApplicationPermissionMode.CHANGING,
                 MeService.class,
                 "me");
-        
+
         newClassPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.VIEWING,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
index 2840157..6fe1ec0 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java
@@ -32,6 +32,9 @@ import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
 import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUserRepository;
 import org.apache.isis.extensions.secman.jpa.seed.SeedSecurityModuleService;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
     ApplicationPermissionRepository.class,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedSecurityModuleService.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedSecurityModuleService.java
index 075cca6..e499406 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedSecurityModuleService.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedSecurityModuleService.java
@@ -32,6 +32,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
 
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.secman.SeedSecurityModuleService")
 @Order(OrderPrecedence.MIDPOINT)
@@ -56,9 +59,9 @@ public class SeedSecurityModuleService {
 
             fixtureScripts.run(new SeedUsersAndRolesFixtureScript());
         }
-        
+
     }
 
-    
+
 
 }
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedUsersAndRolesFixtureScript.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedUsersAndRolesFixtureScript.java
index c862a64..9e5583d 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedUsersAndRolesFixtureScript.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/SeedUsersAndRolesFixtureScript.java
@@ -33,8 +33,10 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
  * This fixture script will be run automatically on start-up by virtue of the fact that the
  * {@link org.apache.isis.extensions.secman.jpa.seed.SeedSecurityModuleService} is a
  * {@link org.apache.isis.applib.annotation.DomainService} and calls the setup during its
- * {@link org.apache.isis.extensions.secman.jpa.seed.SeedSecurityModuleService#init() init} 
+ * {@link org.apache.isis.extensions.secman.jpa.seed.SeedSecurityModuleService#init() init}
  * ({@link javax.annotation.PostConstruct}) method.
+ *
+ * @since 2.0 {@index}
  */
 public class SeedUsersAndRolesFixtureScript extends FixtureScript {
 
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/GlobalTenancy.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/GlobalTenancy.java
index 6e636d5..5a2a54a0 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/GlobalTenancy.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/GlobalTenancy.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.secman.jpa.seed.scripts;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class GlobalTenancy extends AbstractTenancyFixtureScript {
 
     public static final String TENANCY_NAME = "Global";
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
index 7bbcf4d..35c6934 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtFixturesFixtureResultsRoleAndPermissions.java
@@ -22,6 +22,9 @@ import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResult;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtFixturesFixtureResultsRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
     public static final String ROLE_NAME = "isis-ext-fixtures-fixtureresults";
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
index d2cbbfc..fd80466 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminRoleAndPermissions.java
@@ -23,6 +23,9 @@ import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
     private String[] adminInitialPackagePermissions;
@@ -40,5 +43,5 @@ public class IsisExtSecmanAdminRoleAndPermissions extends AbstractRoleAndPermiss
                 ApplicationPermissionMode.CHANGING,
                 adminInitialPackagePermissions);
     }
-    
+
 }
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminUser.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminUser.java
index 3e7cf6b..2fdcf6c 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminUser.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanAdminUser.java
@@ -23,14 +23,17 @@ import java.util.Arrays;
 import org.apache.isis.extensions.secman.api.SecmanConfiguration;
 import org.apache.isis.extensions.secman.api.user.AccountType;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisExtSecmanAdminUser extends AbstractUserAndRolesFixtureScript {
 
     public IsisExtSecmanAdminUser(SecmanConfiguration configBean) {
         super(
-                configBean.getAdminUserName(), 
+                configBean.getAdminUserName(),
                 configBean.getAdminPassword(),
                 null,
-                GlobalTenancy.TENANCY_PATH, 
+                GlobalTenancy.TENANCY_PATH,
                 AccountType.LOCAL,
                 Arrays.asList(configBean.getAdminRoleName()));
     }
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
index 0045210..08092b2 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanFixtureRoleAndPermissions.java
@@ -24,6 +24,8 @@ import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRul
 
 /**
  * Role to run in the prototype fixture scripts for the example webapp for the security module.
+ *
+ * @since 2.0 {@index}
  */
 public class IsisExtSecmanFixtureRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
index ae5ff2d..d9a12f5 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/seed/scripts/IsisExtSecmanRegularUserRoleAndPermissions.java
@@ -29,6 +29,8 @@ import org.apache.isis.extensions.secman.model.app.user.MeService;
 /**
  * Role for regular users of the security module, providing the ability to lookup their user account using the
  * {@link org.apache.isis.extensions.secman.model.app.user.MeService}, and for viewing and maintaining their user details.
+ *
+ * @since 2.0 {@index}
  */
 public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndPermissionsFixtureScript {
 
@@ -44,7 +46,7 @@ public class IsisExtSecmanRegularUserRoleAndPermissions extends AbstractRoleAndP
                 ApplicationPermissionMode.CHANGING,
                 LogoutMenu.class,
                 "logout");
-        
+
         newMemberPermissions(
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/userreg/SecurityModuleAppUserRegistrationServiceAbstract.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/userreg/SecurityModuleAppUserRegistrationServiceAbstract.java
index 22a5158..2fa7ee3 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/userreg/SecurityModuleAppUserRegistrationServiceAbstract.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/userreg/SecurityModuleAppUserRegistrationServiceAbstract.java
@@ -35,12 +35,14 @@ import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUserRepository;
 /**
  * An abstract implementation of {@link org.apache.isis.applib.services.userreg.UserRegistrationService}
  * with a single abstract method for the initial role of newly created local users
+ *
+ * @since 2.0 {@index}
  */
 public abstract class SecurityModuleAppUserRegistrationServiceAbstract implements UserRegistrationService {
 
     @Inject private ApplicationUserRepository applicationUserRepository;
     @Inject private ApplicationRoleRepository applicationRoleRepository;
-    
+
     @Override
     public boolean usernameExists(final String username) {
         return applicationUserRepository.findByUsername(username).isPresent();
@@ -52,19 +54,19 @@ public abstract class SecurityModuleAppUserRegistrationServiceAbstract implement
 
         final Password password = new Password(userDetails.getPassword());
         final ApplicationRole initialRole = getInitialRole();
-        
+
         final String username = userDetails.getUsername();
         final String emailAddress = userDetails.getEmailAddress();
         final ApplicationUser applicationUser = (ApplicationUser) applicationUserRepository
                 .newLocalUser(username, password, ApplicationUserStatus.ENABLED);
-        
+
         if(_Strings.isNotEmpty(emailAddress)) {
             applicationUser.setEmailAddress(emailAddress);
         }
         if(initialRole!=null) {
             applicationRoleRepository.addRoleToUser(initialRole, applicationUser);
         }
-        
+
         final Set<ApplicationRole> additionalRoles = getAdditionalInitialRoles();
         if(additionalRoles != null) {
             for (final ApplicationRole additionalRole : additionalRoles) {
@@ -99,5 +101,5 @@ public abstract class SecurityModuleAppUserRegistrationServiceAbstract implement
      * @return Additional roles for newly created local users
      */
     protected abstract Set<ApplicationRole> getAdditionalInitialRoles();
-    
+
 }
diff --git a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanRealmShiro.java b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanRealmShiro.java
index 476b831..f4f796b 100644
--- a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanRealmShiro.java
+++ b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanRealmShiro.java
@@ -23,6 +23,9 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.secman.shiro.services.SecurityRealmServiceUsingShiro;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
     SecurityRealmServiceUsingShiro.class
diff --git a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.java b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.java
index 350a309..b023bfd 100644
--- a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.java
+++ b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.java
@@ -58,6 +58,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements SecurityRealm {
 
     private static final String SECMAN_ENABLE_DELEGATED_USERS = "isis.ext.secman.enableDelegatedUsers";
@@ -66,7 +69,7 @@ public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements S
     @Inject protected PlatformTransactionManager txMan;
     @Inject private SecmanConfiguration configBean;
 	@Inject protected IsisConfiguration isisConfiguration;
-    
+
     @Getter @Setter private AuthenticatingRealm delegateAuthenticationRealm;
     @Getter @Setter private boolean autoCreateUser = true;
 
@@ -94,11 +97,11 @@ public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements S
         val usernamePasswordToken = (UsernamePasswordToken) token;
         val username = usernamePasswordToken.getUsername();
         val password = usernamePasswordToken.getPassword();
-        
+
 
         // this code block is just an optimization, entirely optional
         {
-            val alreadyAuthenticatedPrincipal = 
+            val alreadyAuthenticatedPrincipal =
                     getPrincipal_fromAlreadyAuthenticatedSubjectIfApplicable(token);
             if(alreadyAuthenticatedPrincipal!=null) {
                 val credentials = token.getCredentials();
@@ -106,20 +109,20 @@ public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements S
                 return AuthInfoForApplicationUser.of(alreadyAuthenticatedPrincipal, realmName, credentials);
             }
         }
-        
+
         // lookup from database, for roles/perms
         PrincipalForApplicationUser principal = lookupPrincipal_inApplicationUserRepository(username);
 
         val autoCreateUserWhenDelegatedAuthentication = hasDelegateAuthenticationRealm() && isAutoCreateUser();
         if (principal == null && autoCreateUserWhenDelegatedAuthentication) {
-            // When using delegated authentication, desired behavior is to auto-create user accounts in the 
+            // When using delegated authentication, desired behavior is to auto-create user accounts in the
             // DB only if these do successfully authenticate with the delegated authentication mechanism
             // while the newly created user will be disabled by default
             authenticateElseThrow_usingDelegatedMechanism(token);
             val newPrincipal = createPrincipal_inApplicationUserRepository(username);
 
             _Assert.assertNotNull(newPrincipal);
-            
+
             if(configBean.isAutoEnableIfDelegatedAndAuthenticated()) {
                 principal = newPrincipal;
             } else {
@@ -171,24 +174,24 @@ public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements S
     }
 
     // -- HELPER
-    
+
     /**
      * @implNote
      * This is just an optimization, entirely optional.
      * <p>
-     * We reuse principal information on subjects that are already authenticated, 
+     * We reuse principal information on subjects that are already authenticated,
      * provided we are in a single realm authentication scenario.
      * @param token
      * @return {@code null} if not applicable
      */
     private PrincipalForApplicationUser getPrincipal_fromAlreadyAuthenticatedSubjectIfApplicable(
             AuthenticationToken token) {
-        
+
         // this optimization is only implemented for the simple case of a single realm setup
         if(!ShiroUtils.isSingleRealm()) {
-            return null;   
+            return null;
         }
-        
+
         val currentSubject = SecurityUtils.getSubject();
         if(currentSubject!=null && currentSubject.isAuthenticated()) {
             val authenticatedPrincipalObject = currentSubject.getPrincipal();
@@ -219,7 +222,7 @@ public class IsisModuleExtSecmanShiroRealm extends AuthorizingRealm implements S
                 return _NullSafe.size(fullStackTrace)>1
                         ? _Arrays.subArray(super.getStackTrace(), 0, 1)
                         : fullStackTrace;
-            }            
+            }
         };
     }
 
diff --git a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/services/SecurityRealmServiceUsingShiro.java b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/services/SecurityRealmServiceUsingShiro.java
index 3fe9c94..40fc0d2 100644
--- a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/services/SecurityRealmServiceUsingShiro.java
+++ b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/services/SecurityRealmServiceUsingShiro.java
@@ -33,12 +33,15 @@ import org.apache.isis.extensions.secman.shiro.util.ShiroUtils;
 
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.ext.secman.SecurityRealmServiceUsingShiro")
 @Order(OrderPrecedence.MIDPOINT)
 @Qualifier("Shiro")
 public class SecurityRealmServiceUsingShiro implements SecurityRealmService {
-    
+
     @Inject private ServiceInjector serviceInjector;
 
     @Override
diff --git a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/util/ShiroUtils.java b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/util/ShiroUtils.java
index dbaede2..7100675 100644
--- a/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/util/ShiroUtils.java
+++ b/extensions/security/secman/shiro-realm/src/main/java/org/apache/isis/extensions/secman/shiro/util/ShiroUtils.java
@@ -30,6 +30,9 @@ import org.apache.isis.extensions.secman.shiro.IsisModuleExtSecmanShiroRealm;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class ShiroUtils {
 
@@ -62,5 +65,5 @@ public class ShiroUtils {
         final RealmSecurityManager securityManager = getSecurityManager();
         return securityManager.getRealms().size() == 1;
     }
-    
+
 }
diff --git a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapContextFactory.java b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapContextFactory.java
index 226cc52..8b641de 100644
--- a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapContextFactory.java
+++ b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapContextFactory.java
@@ -33,6 +33,8 @@ import org.apache.shiro.realm.ldap.JndiLdapContextFactory;
  *
  * <p>
  * See {@link IsisLdapRealm} for typical configuration within <tt>shiro.ini</tt>.
+ *
+ * @since 1.x {@index}
  */
 public class IsisLdapContextFactory extends JndiLdapContextFactory {
 
diff --git a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapRealm.java b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapRealm.java
index 0ff708b..9adda95 100644
--- a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapRealm.java
+++ b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisLdapRealm.java
@@ -133,6 +133,8 @@ import static org.apache.isis.commons.internal.base._NullSafe.stream;
  * See the sample for group and user attribute and mapping.
  * <p/>
  * </p>
+ *
+ * @since 1.x {@index}
  */
 public class IsisLdapRealm extends DefaultLdapRealm {
 
diff --git a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisModuleExtShiroRealmLdapImpl.java b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisModuleExtShiroRealmLdapImpl.java
index 6537f27..27b6d9d 100644
--- a/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisModuleExtShiroRealmLdapImpl.java
+++ b/extensions/security/shiro-realm-ldap/impl/src/main/java/org/apache/isis/extensions/shirorealmldap/realm/impl/IsisModuleExtShiroRealmLdapImpl.java
@@ -24,6 +24,9 @@ import org.springframework.context.annotation.Import;
 import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
 
 
+/**
+ * @since 1.x {@index}
+ */
 @Configuration
 @Import({
         // modules
diff --git a/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/IsisModuleExtCorsImpl.java b/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/IsisModuleExtCorsImpl.java
index bc8e6e8..76df208 100644
--- a/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/IsisModuleExtCorsImpl.java
+++ b/extensions/vro/cors/impl/src/main/java/org/apache/isis/extensions/cors/impl/IsisModuleExtCorsImpl.java
@@ -38,19 +38,22 @@ import org.apache.isis.core.config.IsisConfiguration;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Named("isis.ext.cors.WebModuleServerCors")
 @Qualifier("CORS")
 @Log4j2
 public class IsisModuleExtCorsImpl {
-    
+
     @Bean
     public FilterRegistrationBean<Filter> createCorsFilterRegistration(IsisConfiguration configuration) {
 
         final Map<String, String> cfgMap = configuration.getAsMap();
         final String resteasyBase = cfgMap.getOrDefault("resteasy.jaxrs.defaultPath", "/restful/*");
-        log.info("Setting up CORS to filter resteasy-base at '{}' with {}", 
-                resteasyBase, 
+        log.info("Setting up CORS to filter resteasy-base at '{}' with {}",
+                resteasyBase,
                 configuration.getExtensions().getCors());
 
         final FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
@@ -61,21 +64,21 @@ public class IsisModuleExtCorsImpl {
     }
 
     private CorsFilter createCorsFilter(IsisConfiguration configuration) {
-        
+
         val isisCorsConfig = configuration.getExtensions().getCors();
-        
+
         val corsConfiguration = new CorsConfiguration();
         corsConfiguration.setAllowCredentials(isisCorsConfig.isAllowCredentials());
         corsConfiguration.setAllowedHeaders(isisCorsConfig.getAllowedHeaders());
         corsConfiguration.setAllowedMethods(isisCorsConfig.getAllowedMethods());
         corsConfiguration.setAllowedOrigins(isisCorsConfig.getAllowedOrigins());
         corsConfiguration.setExposedHeaders(isisCorsConfig.getExposedHeaders());
-        
+
         val source = new UrlBasedCorsConfigurationSource();
         source.registerCorsConfiguration("/**", corsConfiguration);
-        
+
         return new CorsFilter(source);
     }
-    
+
 
 }
diff --git a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.java b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.java
index a393815..b33b682 100644
--- a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.java
+++ b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.java
@@ -23,6 +23,9 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.viewer.wicket.exceldownload.ui.components.CollectionContentsAsExcelFactory;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // @Component's
diff --git a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.java b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.java
index cdebca1..ce357da 100644
--- a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.java
+++ b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.java
@@ -34,6 +34,8 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel
 /**
  * {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel
  * collection of entity}s rendered using {@link AjaxFallbackDefaultDataTable}.
+ *
+ * @since 2.0 {@index}
  */
 public class CollectionContentsAsExcel extends PanelAbstract<EntityCollectionModel> {
 
diff --git a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.java b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.java
index b892e65..405d4ad 100644
--- a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.java
+++ b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.java
@@ -30,10 +30,12 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 
 /**
  * {@link ComponentFactory} for {@link CollectionContentsAsExcel}.
+ *
+ * @since 2.0 {@index}
  */
 @org.springframework.stereotype.Component
-public class CollectionContentsAsExcelFactory 
-extends ComponentFactoryAbstract 
+public class CollectionContentsAsExcelFactory
+extends ComponentFactoryAbstract
 implements CollectionContentsAsFactory {
 
     private static final long serialVersionUID = 1L;
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/CalendarEventable.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/CalendarEventable.java
index 76cdf76..9002746 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/CalendarEventable.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/CalendarEventable.java
@@ -24,6 +24,9 @@ import org.apache.isis.extensions.fullcalendar.applib.value.CalendarEvent;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface CalendarEventable {
 
     /**
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/Calendarable.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/Calendarable.java
index c10ce81..ee1baf0 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/Calendarable.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/Calendarable.java
@@ -21,25 +21,28 @@ package org.apache.isis.extensions.fullcalendar.applib;
 import java.util.Map;
 import java.util.Set;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface Calendarable {
 
     /**
      * The names of unique &quot;calendar&quot;s provided by this object.
-     * 
+     *
      * <p>
      * The &quot;calendar&quot; is a string identifier that indicates the nature of this event.
-     * 
+     *
      * <p>
      * For example, an event of a lease's <code>FixedBreakOption</code> has three dates: the <i>break date</i>,
-     * the <i>exercise date</i> and the <i>reminder date</i>.  These therefore correspond to three different 
-     * calendar names, respectively <i>Fixed break</i>, <i>Fixed break exercise</i> and 
+     * the <i>exercise date</i> and the <i>reminder date</i>.  These therefore correspond to three different
+     * calendar names, respectively <i>Fixed break</i>, <i>Fixed break exercise</i> and
      * <i>Fixed break exercise reminder</i>.
      */
     Set<String> getCalendarNames();
-    
+
     /**
      * The events associated with this object, keyed by their corresponding {@link #getCalendarNames() calendar name}.
      */
 	Map<String, CalendarEventable> getCalendarEvents();
-	
+
 }
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/IsisModuleExtFullCalendarApplib.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/IsisModuleExtFullCalendarApplib.java
index c393ecb..7a23c6b 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/IsisModuleExtFullCalendarApplib.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/IsisModuleExtFullCalendarApplib.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.fullcalendar.applib;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleExtFullCalendarApplib {
 }
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/spi/CalendarableDereferencingService.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/spi/CalendarableDereferencingService.java
index ff65e2c..ed9906c 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/spi/CalendarableDereferencingService.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/spi/CalendarableDereferencingService.java
@@ -30,6 +30,7 @@ import org.apache.isis.extensions.fullcalendar.applib.Calendarable;
  *     <tt>Note</tt> (ie the <tt>Notable</tt>) sto be shown instead.
  * </p>
  *
+ * @since 2.0 {@index}
  */
 public interface CalendarableDereferencingService {
 	Object dereference(final Object calendarableOrCalendarEventable);
diff --git a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEvent.java b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEvent.java
index 2ee040d..92f2970 100644
--- a/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEvent.java
+++ b/extensions/vw/fullcalendar/applib/src/main/java/org/apache/isis/extensions/fullcalendar/applib/value/CalendarEvent.java
@@ -28,19 +28,21 @@ import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
 
 /**
  * Value type representing an event on a calendar.
+ *
+ * @since 2.0 {@index}
  */
 @Value(semanticsProviderClass=CalendarEventSemanticsProvider.class)
 public class CalendarEvent implements Serializable {
 
     private static final long serialVersionUID = 1L;
-    
+
 	static final CalendarEvent DEFAULT_VALUE = null; // no default
-	
+
     private final DateTime dateTime;
     private final String calendarName;
     private final String title;
     private final String notes;
-	
+
 	public CalendarEvent(final DateTime dateTime, final String calendarName, final String title) {
         this(dateTime, calendarName, title, null);
 	}
@@ -55,41 +57,41 @@ public class CalendarEvent implements Serializable {
     public DateTime getDateTime() {
         return dateTime;
     }
-    
+
     public String getCalendarName() {
         return calendarName;
     }
-    
+
     public String getTitle() {
         return title;
     }
-    
+
     public String getNotes() {
         return notes;
     }
-   
+
 	public CalendarEvent withDateTime(final DateTime date) {
 		return new CalendarEvent(date, this.calendarName, this.title, this.notes);
 	}
-	
+
 	public CalendarEvent withCalendarName(final String calendarName) {
 	    return new CalendarEvent(this.dateTime, calendarName, this.title, this.notes);
 	}
-	
+
 	public CalendarEvent withTitle(final String title) {
 	    return new CalendarEvent(this.dateTime, this.calendarName, title, this.notes);
 	}
-	
+
 	public CalendarEvent withNotes(final String notes) {
 	    return new CalendarEvent(this.dateTime, this.calendarName, this.title, notes);
 	}
 
-	private static final ObjectContract<CalendarEvent> objectContract = 
+	private static final ObjectContract<CalendarEvent> objectContract =
 	    ObjectContracts.contract(CalendarEvent.class)
 	    .thenUse("dateTime", CalendarEvent::getDateTime)
 	    .thenUse("calendarName", CalendarEvent::getCalendarName);
-	
-	
+
+
 	@Override
     public int hashCode() {
 	    return objectContract.hashCode(this);
@@ -104,7 +106,7 @@ public class CalendarEvent implements Serializable {
     public String toString() {
         return objectContract.toString(this);
     }
-    
+
     public static int typicalLength() {
 		return 30;
 	}
diff --git a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/IsisModuleExtFullCalendarUi.java b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/IsisModuleExtFullCalendarUi.java
index 0f721e0..8fdeb63 100644
--- a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/IsisModuleExtFullCalendarUi.java
+++ b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/IsisModuleExtFullCalendarUi.java
@@ -23,6 +23,9 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.fullcalendar.applib.IsisModuleExtFullCalendarApplib;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         IsisModuleExtFullCalendarApplib.class
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/annotations/PdfJsViewer.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/annotations/PdfJsViewer.java
index 4f1df63..f5534d4 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/annotations/PdfJsViewer.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/annotations/PdfJsViewer.java
@@ -29,6 +29,8 @@ import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.Scale;
  * An annotation that could be applied on a property or parameter
  * of type {@link org.apache.isis.applib.value.Blob}. Such property/parameter will be visualized
  * with <a href="https://github.com/mozilla/pdf.js">PDF.js</a> viewer.
+ *
+ * @since 2.0 {@index}
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(value = {ElementType.METHOD, ElementType.FIELD})
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
index fc7dfcd..c8e6507 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
@@ -24,6 +24,9 @@ import de.agilecoders.wicket.jquery.AbstractConfig;
 import de.agilecoders.wicket.jquery.IKey;
 import de.agilecoders.wicket.jquery.Key;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class PdfJsConfig extends AbstractConfig {
 
     private static final IKey<Integer> INITIAL_PAGE = new Key<>("initialPage", 1);
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
index fb8204b..7c57e2b 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config;
 
 import org.apache.wicket.util.lang.Objects;
 
+/**
+ * @since 2.0 {@index}
+ */
 public enum Scale {
     AUTOMATIC("auto"),
     ACTUAL_SIZE("page-actual"),
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/spi/PdfJsViewerAdvisor.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/spi/PdfJsViewerAdvisor.java
index 33b54c4..67765e3 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/spi/PdfJsViewerAdvisor.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/spi/PdfJsViewerAdvisor.java
@@ -27,6 +27,8 @@ import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.Scale;
 
 /**
  * SPI service interface.
+ *
+ * @since 2.0 {@index}
  */
 public interface PdfJsViewerAdvisor {
 
@@ -49,7 +51,7 @@ public interface PdfJsViewerAdvisor {
     class InstanceKey implements Serializable {
 
         private static final long serialVersionUID = 1L;
-        
+
         private final TypeKey typeKey;
         private final String identifier;
 
@@ -124,7 +126,7 @@ public interface PdfJsViewerAdvisor {
         public static class TypeKey implements Serializable {
 
             private static final long serialVersionUID = 1L;
-            
+
             private final String objectType;
             private final String propertyId;
             private final String userName;
@@ -206,7 +208,7 @@ public interface PdfJsViewerAdvisor {
     class Advice implements Serializable {
 
         private static final long serialVersionUID = 1L;
-        
+
         private final Integer pageNum;
         private final TypeAdvice typeAdvice;
 
@@ -271,7 +273,7 @@ public interface PdfJsViewerAdvisor {
         public static class TypeAdvice implements Serializable {
 
             private static final long serialVersionUID = 1L;
-            
+
             private final Scale scale;
             private final Integer height;
 
diff --git a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java
index 53ea359..c24bccb 100644
--- a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java
+++ b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/IsisModuleExtPdfjsUi.java
@@ -24,6 +24,9 @@ import org.springframework.context.annotation.Import;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.metamodel.IsisModuleExtPdfjsMetaModel;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.ui.components.PdfJsViewerPanelComponentFactory;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // modules
diff --git a/isis-tooling.yml b/isis-tooling.yml
index 356bc14..183c13a 100644
--- a/isis-tooling.yml
+++ b/isis-tooling.yml
@@ -59,7 +59,7 @@ global:
     Extensions: org.apache.isis.extensions
     "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
     "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
-    "Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
+    #"Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
     "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
     "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
     #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
diff --git a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/IsisModuleExtJaxRsClientApplib.java b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/IsisModuleExtJaxRsClientApplib.java
index a3d3e7b..6c5f5e7 100644
--- a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/IsisModuleExtJaxRsClientApplib.java
+++ b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/IsisModuleExtJaxRsClientApplib.java
@@ -22,6 +22,9 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @Import({
         // modules
diff --git a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsClient.java b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsClient.java
index 9928d16..ed36eeb 100644
--- a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsClient.java
+++ b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsClient.java
@@ -22,6 +22,9 @@ import java.net.URI;
 
 import lombok.Getter;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface JaxRsClient {
 
     public enum ReprType {
diff --git a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsResponse.java b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsResponse.java
index 46ed637..428d44a 100644
--- a/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsResponse.java
+++ b/mappings/jaxrsclient/applib/src/main/java/org/apache/isis/extensions/jaxrsclient/applib/client/JaxRsResponse.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.extensions.jaxrsclient.applib.client;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface JaxRsResponse {
 
     int getStatus();
diff --git a/mappings/jaxrsclient/impl/src/main/java/org/apache/isis/extensions/jaxrsclient/impl/IsisModuleExtJaxRsClientImpl.java b/mappings/jaxrsclient/impl/src/main/java/org/apache/isis/extensions/jaxrsclient/impl/IsisModuleExtJaxRsClientImpl.java
index af8a507..932fff9 100644
--- a/mappings/jaxrsclient/impl/src/main/java/org/apache/isis/extensions/jaxrsclient/impl/IsisModuleExtJaxRsClientImpl.java
+++ b/mappings/jaxrsclient/impl/src/main/java/org/apache/isis/extensions/jaxrsclient/impl/IsisModuleExtJaxRsClientImpl.java
@@ -21,6 +21,9 @@ package org.apache.isis.extensions.jaxrsclient.impl;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @ComponentScan
 public class IsisModuleExtJaxRsClientImpl {
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ActionParameterListBuilder.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ActionParameterListBuilder.java
index 57efcff..d02c72d 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ActionParameterListBuilder.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ActionParameterListBuilder.java
@@ -27,19 +27,18 @@ import javax.ws.rs.client.Entity;
 import lombok.Getter;
 
 /**
- * 
- * @since 2.0
+ * @since 2.0 {@index}
  */
 public class ActionParameterListBuilder {
 
     private final Map<String, String> actionParameters = new LinkedHashMap<>();
-    
+
     @Getter
     private final Map<String, Class<?>> actionParameterTypes = new LinkedHashMap<>();
 
     public ActionParameterListBuilder addActionParameter(String parameterName, String parameterValue) {
-        actionParameters.put(parameterName, parameterValue != null 
-                ? value("\"" + parameterValue + "\"") 
+        actionParameters.put(parameterName, parameterValue != null
+                ? value("\"" + parameterValue + "\"")
                         : value(JSON_NULL_LITERAL));
         actionParameterTypes.put(parameterName, String.class);
         return this;
@@ -87,12 +86,12 @@ public class ActionParameterListBuilder {
         return this;
     }
 
-//XXX would be nice to have, but also requires the RO spec to be updated     
+//XXX would be nice to have, but also requires the RO spec to be updated
 //    public ActionParameterListBuilder addActionParameterDto(String parameterName, Object parameterDto) {
 //        actionParameters.put(parameterName, dto(parameterDto));
 //        return this;
 //    }
-    
+
     public Entity<String> build() {
 
         final StringBuilder sb = new StringBuilder();
@@ -112,7 +111,7 @@ public class ActionParameterListBuilder {
     private String value(String valueLiteral) {
         return "{\"value\" : " + valueLiteral + "}";
     }
-    
+
 //    @SneakyThrows
 //    private String dto(Object dto) {
 //        val mapper = new ObjectMapper();
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/IsisModuleExtRestClient.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/IsisModuleExtRestClient.java
index 2de0526..9ae6064 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/IsisModuleExtRestClient.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/IsisModuleExtRestClient.java
@@ -20,6 +20,9 @@ package org.apache.isis.extensions.restclient;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleExtRestClient {
 }
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ResponseDigest.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ResponseDigest.java
index c4b32d1..a881f87 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ResponseDigest.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/ResponseDigest.java
@@ -49,8 +49,7 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * 
- * @since 2.0
+ * @since 2.0 {@index}
  */
 @Log4j2
 public class ResponseDigest<T> {
@@ -63,12 +62,12 @@ public class ResponseDigest<T> {
      * @return
      */
     public static <T> ResponseDigest<T> of(
-            @NonNull final Response response, 
+            @NonNull final Response response,
             @NonNull final Class<T> entityType) {
-        
+
         return new ResponseDigest<>(response, entityType, null).digest();
     }
-    
+
     /**
      * synchronous response processing (list of entities)
      * @param <T>
@@ -78,17 +77,17 @@ public class ResponseDigest<T> {
      * @return
      */
     public static <T> ResponseDigest<T> ofList(
-            @NonNull final Response response, 
+            @NonNull final Response response,
             @NonNull final Class<T> entityType,
             @NonNull final GenericType<List<T>> genericType) {
-        
+
         return new ResponseDigest<>(response, entityType, genericType).digest();
     }
-    
+
     /** a-synchronous response failure processing */
     public static <T> ResponseDigest<T> ofAsyncFailure(
-            final Future<Response> asyncResponse, 
-            final Class<T> entityType, 
+            final Future<Response> asyncResponse,
+            final Class<T> entityType,
             final Exception failure) {
 
         Response response;
@@ -101,7 +100,7 @@ public class ResponseDigest<T> {
         final ResponseDigest<T> failureDigest = new ResponseDigest<>(response, entityType, null);
         return failureDigest.digestAsyncFailure(asyncResponse.isCancelled(), failure);
     }
-    
+
     private final Response response;
     private final Class<T> entityType;
     private final GenericType<List<T>> genericType;
@@ -129,44 +128,44 @@ public class ResponseDigest<T> {
     public boolean isFailure() {
         return failureCause!=null;
     }
-    
+
     /**
      * @return (non-null), optionally the result if cardinality is exactly ONE
      */
     public Optional<T> getEntity(){
         return getEntities().getSingleton();
     }
-    
+
     /**
-     * @return (non-null), the entities replied by the REST endpoint supporting any cardinality ZERO, ONE or more. 
+     * @return (non-null), the entities replied by the REST endpoint supporting any cardinality ZERO, ONE or more.
      */
     public Can<T> getEntities(){
         return entities;
     }
 
     /**
-     * @return (nullable), the failure case (if any), when the REST endpoint replied with a failure status code 
+     * @return (nullable), the failure case (if any), when the REST endpoint replied with a failure status code
      */
     public @Nullable Exception getFailureCause(){
         return failureCause;
     }
 
     /**
-     * @param failureMapper - fallback, to calculate a result from given failure exception 
-     * @return the result if cardinality is exactly ONE, otherwise the result of applying the failure to the {@code failureMapper} 
+     * @param failureMapper - fallback, to calculate a result from given failure exception
+     * @return the result if cardinality is exactly ONE, otherwise the result of applying the failure to the {@code failureMapper}
      */
     public T singletonOrElseMapFailure(Function<Exception, T> failureMapper) {
-        return isSuccess() 
+        return isSuccess()
                 ? getEntity().orElseGet(()->failureMapper.apply(new NoSuchElementException()))
                 : failureMapper.apply(getFailureCause());
     }
 
     /**
      * @param failureMapper - fallback, to calculate a result from given failure exception
-     * @return the result of any cardinality, otherwise the result of applying the failure to the {@code failureMapper} 
+     * @return the result of any cardinality, otherwise the result of applying the failure to the {@code failureMapper}
      */
     public Can<T> multipleOrElseMapFailure(Function<Exception, Can<T>> failureMapper) {
-        return isSuccess() 
+        return isSuccess()
                 ? getEntities()
                         : failureMapper.apply(getFailureCause());
     }
@@ -181,24 +180,24 @@ public class ResponseDigest<T> {
             return this;
         }
 
-        // a valid result corresponding to object not found, which is not an error per se  
+        // a valid result corresponding to object not found, which is not an error per se
         if(response.getStatusInfo().getStatusCode() == 404) {
             entities = Can.empty();
             return this;
         }
-        
+
         if(!response.hasEntity()) {
             entities = Can.empty();
             failureCause = new NoSuchElementException(defaultFailureMessage(response));
             return this;
         }
-        
+
         if(response.getStatusInfo().getFamily() != Family.SUCCESSFUL) {
             entities = Can.empty();
             failureCause = new RestfulClientException(defaultFailureMessage(response));
             return this;
         }
-        
+
         // see if we can extract the returned representation type (repr-type) from the header
         val contentTypeHeaderString = response.getHeaderString("Content-Type");
         val reprType = RepresentationTypeSimplifiedV2.parseContentTypeHeaderString(contentTypeHeaderString)
@@ -206,13 +205,13 @@ public class ResponseDigest<T> {
         if(reprType==null) {
             entities = Can.empty();
             failureCause = new RestfulClientException(String.format(
-                    "Invalid REST response, cannot parse header's Content-Type '%s' for the repr-type to use", 
+                    "Invalid REST response, cannot parse header's Content-Type '%s' for the repr-type to use",
                     contentTypeHeaderString));
             return this;
         }
-        
+
         try {
-            
+
             if(genericType==null) {
                 // when response is a singleton
                 val singleton = readSingle(reprType);
@@ -223,7 +222,7 @@ public class ResponseDigest<T> {
                 // when response is a list
                 entities = Can.ofCollection(readList(reprType));
             }
-            
+
         } catch (Exception e) {
             entities = Can.empty();
             failureCause = new RestfulClientException("failed to read JAX-RS response content", e);
@@ -232,12 +231,12 @@ public class ResponseDigest<T> {
         return this;
     }
 
-    private T readSingle(final RepresentationTypeSimplifiedV2 reprType) 
+    private T readSingle(final RepresentationTypeSimplifiedV2 reprType)
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         log.debug("readSingle({})", reprType);
-        
-        if(reprType.isValue() 
+
+        if(reprType.isValue()
                 || isValueType(entityType)) {
             val mapper = new ObjectMapper();
             val jsonInput = response.readEntity(String.class);
@@ -246,25 +245,25 @@ public class ResponseDigest<T> {
         }
         return response.<T>readEntity(entityType);
     }
-    
-    private List<T> readList(final RepresentationTypeSimplifiedV2 reprType) 
+
+    private List<T> readList(final RepresentationTypeSimplifiedV2 reprType)
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         log.debug("readList({})", reprType);
-        
-        if(reprType.isValues() 
+
+        if(reprType.isValues()
                 || isValueType(entityType)) {
             val mapper = new ObjectMapper();
             val jsonInput = response.readEntity(String.class);
-            final List<ScalarValueDtoV2> scalarValueDtoList = 
+            final List<ScalarValueDtoV2> scalarValueDtoList =
                     mapper.readValue(
-                            jsonInput, 
+                            jsonInput,
                             mapper.getTypeFactory().constructCollectionType(List.class, ScalarValueDtoV2.class));
-            
+
             final List<T> resultList = new ArrayList<>(scalarValueDtoList.size());
             for(val valueBody : scalarValueDtoList) {
                 // explicit loop, for simpler exception propagation
-                resultList.add(extractValue(valueBody)); 
+                resultList.add(extractValue(valueBody));
             }
             return resultList;
 
@@ -286,15 +285,15 @@ public class ResponseDigest<T> {
             return this;
         }
 
-        failureCause = new RestfulClientException("Async JAX-RS request failed " 
+        failureCause = new RestfulClientException("Async JAX-RS request failed "
                 + defaultFailureMessage(response), failure);
         return this;
 
     }
 
     private String defaultFailureMessage(Response response) {
-        String failureMessage = "non-successful JAX-RS response: " + 
-                String.format("%s (Http-Status-Code: %d)", 
+        String failureMessage = "non-successful JAX-RS response: " +
+                String.format("%s (Http-Status-Code: %d)",
                         response.getStatusInfo().getReasonPhrase(),
                         response.getStatus());
 
@@ -315,8 +314,8 @@ public class ResponseDigest<T> {
     private boolean isValueType(Class<T> entityType) {
         return CommonDtoUtils.isValueType(entityType);
     }
-    
-    private T extractValue(ScalarValueDtoV2 scalarValueDto) 
+
+    private T extractValue(ScalarValueDtoV2 scalarValueDto)
             throws JsonParseException, JsonMappingException, IOException {
         return _Casts.uncheckedCast(scalarValueDto.getValue());
     }
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClient.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClient.java
index 0b48ba1..4db0af5 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClient.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClient.java
@@ -56,12 +56,12 @@ clientConfig.setUseRequestDebugLogging(true); // default = false
 
 RestfulClient client = RestfulClient.ofConfig(clientConfig);
  * </pre></blockquote>
- * 
+ *
  * Synchronous example:
  * <blockquote><pre>{@code
 
 Builder request = client.request(
-                "services/myService/actions/lookupMyObjectById/invoke", 
+                "services/myService/actions/lookupMyObjectById/invoke",
                 SuppressionType.RO);
 
 Entity<String> args = client.arguments()
@@ -80,9 +80,9 @@ if(digest.isSuccess()) {
 }
  * </pre></blockquote>
  * Asynchronous example:
- * <blockquote><pre>{@code 
+ * <blockquote><pre>{@code
 Builder request = client.request(
-                "services/myService/actions/lookupMyObjectById/invoke", 
+                "services/myService/actions/lookupMyObjectById/invoke",
                 SuppressionType.RO);
 
 Entity<String> args = client.arguments()
@@ -93,7 +93,7 @@ Future<Response> asyncResponse = request
         .async()
         .post(args);
 
-CompletableFuture<ResponseDigest<MyObject>> digestFuture = 
+CompletableFuture<ResponseDigest<MyObject>> digestFuture =
                 client.digest(asyncResponse, MyObject.class);
 
 ResponseDigest<MyObject> digest = digestFuture.get(); // blocking
@@ -105,7 +105,7 @@ if(digest.isSuccess()) {
     digest.getFailureCause().printStackTrace();
 }
  * </pre></blockquote>
- * 
+ *
  * Maven Setup:
  * <blockquote><pre>{@code
 <dependency>
@@ -129,8 +129,8 @@ if(digest.isSuccess()) {
     <version>2.7.5</version>
 </dependency>
  * }</pre></blockquote>
- * 
- * @since 2.0
+ *
+ * @since 2.0 {@index}
  */
 @Log4j2
 public class RestfulClient {
@@ -191,11 +191,11 @@ public class RestfulClient {
     public <T> ResponseDigest<T> digestList(Response response, Class<T> entityType, GenericType<List<T>> genericType) {
         return ResponseDigest.ofList(response, entityType, genericType);
     }
-    
+
     // -- RESPONSE PROCESSING (ASYNC)
 
     public <T> CompletableFuture<ResponseDigest<T>> digest(
-            final Future<Response> asyncResponse, 
+            final Future<Response> asyncResponse,
             final Class<T> entityType) {
 
         final CompletableFuture<ResponseDigest<T>> completableFuture = CompletableFuture.supplyAsync(()->{
@@ -212,9 +212,9 @@ public class RestfulClient {
 
         return completableFuture;
     }
-    
+
     public <T> CompletableFuture<ResponseDigest<T>> digestList(
-            final Future<Response> asyncResponse, 
+            final Future<Response> asyncResponse,
             final Class<T> entityType,
             GenericType<List<T>> genericType) {
 
@@ -226,9 +226,9 @@ public class RestfulClient {
                 return digest;
 
             } catch (Exception e) {
-                
+
                 return ResponseDigest.ofAsyncFailure(asyncResponse, entityType, e);
-                
+
             }
         });
 
@@ -251,7 +251,7 @@ public class RestfulClient {
     private void registerBasicAuthFilter() {
         if(clientConfig.isUseBasicAuth()){
             final Credentials credentials = Credentials.of(
-                    clientConfig.getRestfulAuthUser(), 
+                    clientConfig.getRestfulAuthUser(),
                     clientConfig.getRestfulAuthPassword());
             client.register(BasicAuthFilter.of(credentials));
         }
@@ -287,6 +287,6 @@ public class RestfulClient {
 
         return "";
     }
-    
+
 
 }
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientConfig.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientConfig.java
index 0e10351..93bca84 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientConfig.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientConfig.java
@@ -32,18 +32,17 @@ import org.apache.isis.extensions.restclient.log.ClientConversationFilter;
 import lombok.Data;
 
 /**
- * 
- * @since 2.0
+ * @since 2.0 {@index}
  */
 @XmlRootElement(name="restful-client-config")
 @XmlAccessorType(XmlAccessType.FIELD)
 @Data
 public class RestfulClientConfig {
 
-    @XmlElement(name="restfulBase") 
+    @XmlElement(name="restfulBase")
     private String restfulBase;
 
-    @XmlElement(name="useBasicAuth") 
+    @XmlElement(name="useBasicAuth")
     private boolean useBasicAuth;
 
     @XmlElement(name="restfulAuthUser")
@@ -52,9 +51,9 @@ public class RestfulClientConfig {
     @XmlElement(name="restfulAuthPassword")
     private String restfulAuthPassword;
 
-    @XmlElement(name="useRequestDebugLogging") 
+    @XmlElement(name="useRequestDebugLogging")
     private boolean useRequestDebugLogging;
-    
+
     @XmlTransient
     private List<ClientConversationFilter> clientConversationFilters = new ArrayList<>();
 
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientException.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientException.java
index 1d3f3c2..bd1c31f 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientException.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/RestfulClientException.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.extensions.restclient;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class RestfulClientException extends RuntimeException {
 
     private static final long serialVersionUID = 1L;
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/auth/BasicAuthFilter.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/auth/BasicAuthFilter.java
index c0dff13..54ca4d8 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/auth/BasicAuthFilter.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/auth/BasicAuthFilter.java
@@ -31,14 +31,13 @@ import org.apache.isis.commons.internal.base._Strings;
 import static org.apache.isis.commons.internal.base._With.requires;
 
 /**
- * 
- * @since 2.0
+ * @since 2.0 {@index}
  */
 @Priority(100)
 public class BasicAuthFilter implements ClientRequestFilter {
 
     /**
-     * 
+     *
      * @since 2.0
      */
     public static class Credentials {
@@ -94,4 +93,4 @@ public class BasicAuthFilter implements ClientRequestFilter {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationFilter.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationFilter.java
index 59c0a80..8ed653d 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationFilter.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationFilter.java
@@ -33,16 +33,19 @@ import org.apache.isis.commons.internal.base._Bytes;
 
 import lombok.val;
 
-public interface ClientConversationFilter 
+/**
+ * @since 2.0 {@index}
+ */
+public interface ClientConversationFilter
 extends ClientRequestFilter, ClientResponseFilter {
-    
+
     void onRequest(
             String endpoint,
             String method,
             String acceptHeaderParsing,
-            Map<String, List<String>> headers, 
+            Map<String, List<String>> headers,
             String body);
-    
+
     void onResponse(int httpReturnCode, Map<String, List<String>> headers, String body);
 
     @Override
@@ -66,10 +69,10 @@ extends ClientRequestFilter, ClientResponseFilter {
 
         onRequest(
                 endpoint, method, acceptHeaderParsing,
-                requestContext.getStringHeaders(), 
+                requestContext.getStringHeaders(),
                 requestBody);
     }
-    
+
     @Override
     default void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
 
@@ -85,6 +88,6 @@ extends ClientRequestFilter, ClientResponseFilter {
 
         onResponse(responseContext.getStatusInfo().getStatusCode(), responseContext.getHeaders(), responseBody);
     }
-  
-    
+
+
 }
diff --git a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationLogger.java b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationLogger.java
index 0679688..fc2695f 100644
--- a/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationLogger.java
+++ b/mappings/restclient/applib/src/main/java/org/apache/isis/extensions/restclient/log/ClientConversationLogger.java
@@ -28,16 +28,15 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * 
- * @since 2.0
+ * @since 2.0 {@index}
  */
 @Log4j2
 public class ClientConversationLogger implements ClientConversationFilter {
-    
+
     @Override
     public void onRequest(String endpoint, String method, String acceptHeaderParsing,
             Map<String, List<String>> headers, String body) {
-        
+
         val headersAsText = headers.entrySet().stream()
                 .map(this::toKeyValueString)
                 .map(this::obscureAuthHeader)
@@ -63,7 +62,7 @@ public class ClientConversationLogger implements ClientConversationFilter {
                 .map(this::toKeyValueString)
                 .map(this::obscureAuthHeader)
                 .collect(Collectors.joining(",\n\t"));
-        
+
         val sb = new StringBuilder();
         sb.append("\n")
         .append("---------- JAX-RS RESPONSE -------------\n")
@@ -78,12 +77,12 @@ public class ClientConversationLogger implements ClientConversationFilter {
 
     // -- HELPER
 
-    private final String basicAuthMagic = "Authorization: [Basic "; 
+    private final String basicAuthMagic = "Authorization: [Basic ";
 
     private String toKeyValueString(Map.Entry<?, ?> entry) {
         return "" + entry.getKey() + ": " + entry.getValue();
     }
-    
+
     private String obscureAuthHeader(String keyValueLiteral) {
         if(_Strings.isEmpty(keyValueLiteral)) {
             return keyValueLiteral;
@@ -100,4 +99,4 @@ public class ClientConversationLogger implements ClientConversationFilter {
 
 
 
-}
\ No newline at end of file
+}
diff --git a/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/IsisModulePersistenceJdoApplib.java b/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/IsisModulePersistenceJdoApplib.java
index bad4667..a7ae218 100644
--- a/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/IsisModulePersistenceJdoApplib.java
+++ b/persistence/jdo/applib/src/main/java/org/apache/isis/persistence/jdo/applib/IsisModulePersistenceJdoApplib.java
@@ -20,6 +20,9 @@ package org.apache.isis.persistence.jdo.applib;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModulePersistenceJdoApplib {
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java
index 23afaec..aed2213 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java
@@ -52,6 +52,9 @@ import org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersis
 
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 @Configuration
 @Import({
     // modules
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
index 9ef64bc..1231a56 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.java
@@ -53,6 +53,8 @@ import lombok.extern.log4j.Log4j2;
  * <li>recognizePersisting <-> preStore (when NEW)</li>
  * <li>recognizeUpdating <-> postStore (when NOT NEW)</li>
  * </ul>
+ *
+ * @since 2.0 {@index}
  */
 @Vetoed // managed by isis
 @RequiredArgsConstructor
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusIdLong.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusIdLong.java
index aee7b43..06ac469 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusIdLong.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusIdLong.java
@@ -31,6 +31,9 @@ import org.apache.isis.applib.mixins.MixinConstants;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Property(
         domainEvent = Persistable_datanucleusIdLong.PropertyDomainEvent.class)
 @PropertyLayout(
@@ -42,7 +45,7 @@ public class Persistable_datanucleusIdLong {
 
     private final Persistable persistable;
 
-    public static class PropertyDomainEvent 
+    public static class PropertyDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.PropertyDomainEvent
     <Persistable_datanucleusIdLong, Long> {}
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.java
index b922be4..d49a3f6 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionLong.java
@@ -30,6 +30,9 @@ import org.apache.isis.applib.mixins.MixinConstants;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Property(
         domainEvent = Persistable_datanucleusVersionLong.PropertyDomainEvent.class)
 @PropertyLayout(
@@ -41,7 +44,7 @@ public class Persistable_datanucleusVersionLong {
 
     private final Persistable persistable;
 
-    public static class PropertyDomainEvent 
+    public static class PropertyDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.PropertyDomainEvent
     <Persistable_datanucleusVersionLong, Long> {}
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.java
index ae156eb..e5ff509 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_datanucleusVersionTimestamp.java
@@ -30,6 +30,9 @@ import org.apache.isis.applib.mixins.MixinConstants;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Property(
         domainEvent = Persistable_datanucleusVersionTimestamp.PropertyDomainEvent.class)
 @PropertyLayout(
@@ -41,7 +44,7 @@ public class Persistable_datanucleusVersionTimestamp {
 
     private final Persistable persistable;
 
-    public static class PropertyDomainEvent 
+    public static class PropertyDomainEvent
     extends org.apache.isis.applib.IsisModuleApplib.PropertyDomainEvent
     <Persistable_datanucleusVersionTimestamp, java.sql.Timestamp> {}
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.java
index e7e15a2..823b92a 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.java
@@ -40,6 +40,9 @@ import org.apache.isis.persistence.jdo.applib.integration.JdoSupportService;
 
 import lombok.RequiredArgsConstructor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Action(
         domainEvent = Persistable_downloadJdoMetadata.ActionDomainEvent.class,
         semantics = SemanticsOf.SAFE,
@@ -53,7 +56,7 @@ import lombok.RequiredArgsConstructor;
 public class Persistable_downloadJdoMetadata {
 
     @Inject JdoSupportService jdoSupport;
-    
+
     private final Persistable persistable;
 
     public static class ActionDomainEvent extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent<Persistable_downloadJdoMetadata> {}
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisBookmarkConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisBookmarkConverter.java
index 4e919d2..b9ac392 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisBookmarkConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisBookmarkConverter.java
@@ -22,6 +22,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisBookmarkConverter implements TypeConverter<Bookmark, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisLocalResourcePathConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisLocalResourcePathConverter.java
index 0e41080..8e661a4 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisLocalResourcePathConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisLocalResourcePathConverter.java
@@ -22,6 +22,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 
 import org.apache.isis.applib.value.LocalResourcePath;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisLocalResourcePathConverter implements TypeConverter<LocalResourcePath, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisMarkupConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisMarkupConverter.java
index b84cbfa..744171f 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisMarkupConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisMarkupConverter.java
@@ -22,6 +22,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 
 import org.apache.isis.applib.value.Markup;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisMarkupConverter implements TypeConverter<Markup, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisPasswordConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisPasswordConverter.java
index 3275251..3a87876 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisPasswordConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/applib/IsisPasswordConverter.java
@@ -22,6 +22,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 
 import org.apache.isis.applib.value.Password;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisPasswordConverter implements TypeConverter<Password, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.java
index 1ba371e..2a10001 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/image/JavaAwtBufferedImageByteArrayConverter.java
@@ -26,9 +26,12 @@ import org.datanucleus.store.types.converters.TypeConverter;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.image._Images;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class JavaAwtBufferedImageByteArrayConverter implements TypeConverter<BufferedImage, byte[]> {
 
-    // generated 
+    // generated
     private static final long serialVersionUID = 5481131533536472276L;
 
     @Override
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisChangesDtoConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisChangesDtoConverter.java
index 7cdbcdc..0c6d836 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisChangesDtoConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisChangesDtoConverter.java
@@ -23,6 +23,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 import org.apache.isis.applib.util.schema.ChangesDtoUtils;
 import org.apache.isis.schema.chg.v2.ChangesDto;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisChangesDtoConverter implements TypeConverter<ChangesDto, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisCommandDtoConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisCommandDtoConverter.java
index b24f503..c2e997c 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisCommandDtoConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisCommandDtoConverter.java
@@ -23,6 +23,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 import org.apache.isis.applib.util.schema.CommandDtoUtils;
 import org.apache.isis.schema.cmd.v2.CommandDto;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisCommandDtoConverter implements TypeConverter<CommandDto, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisInteractionDtoConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisInteractionDtoConverter.java
index 12f28ad..818db97 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisInteractionDtoConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisInteractionDtoConverter.java
@@ -23,6 +23,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisInteractionDtoConverter implements TypeConverter<InteractionDto, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisOidDtoConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisOidDtoConverter.java
index c3a77cf..fa11f3c 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisOidDtoConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/schema/v2/IsisOidDtoConverter.java
@@ -23,6 +23,9 @@ import org.datanucleus.store.types.converters.TypeConverter;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.schema.common.v2.OidDto;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsisOidDtoConverter implements TypeConverter<OidDto, String>{
 
     private static final long serialVersionUID = 1L;
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
index 7b667f7..6c4a1bf 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
@@ -23,10 +23,13 @@ import java.time.format.DateTimeFormatter;
 
 import org.datanucleus.store.types.converters.TypeConverter;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsoOffsetTimeConverter implements TypeConverter<OffsetTime, String>{
 
     private static final long serialVersionUID = 1L;
-    
+
     @Override
     public String toDatastoreType(final OffsetTime offsetTime) {
         return offsetTime != null
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
index c92f7f8..7dd3070 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
@@ -23,10 +23,13 @@ import java.time.format.DateTimeFormatter;
 
 import org.datanucleus.store.types.converters.TypeConverter;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class IsoZonedDateTimeConverter implements TypeConverter<ZonedDateTime, String>{
 
     private static final long serialVersionUID = 1L;
-    
+
     @Override
     public String toDatastoreType(final ZonedDateTime offsetTime) {
         return offsetTime != null
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuemappings/applib/ByteArrayBlobRdbmsMapping.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuemappings/applib/ByteArrayBlobRdbmsMapping.java
index 5375612..279a601 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuemappings/applib/ByteArrayBlobRdbmsMapping.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuemappings/applib/ByteArrayBlobRdbmsMapping.java
@@ -23,6 +23,9 @@ import org.datanucleus.store.rdbms.mapping.column.BlobColumnMapping;
 import org.datanucleus.store.rdbms.mapping.java.JavaTypeMapping;
 import org.datanucleus.store.rdbms.table.Column;
 
+/**
+ * @since 1.x {@index}
+ */
 public class ByteArrayBlobRdbmsMapping extends BlobColumnMapping {
 
     public ByteArrayBlobRdbmsMapping(JavaTypeMapping mapping, RDBMSStoreManager storeMgr, Column col) {
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisBlobMapping.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisBlobMapping.java
index b39f17a..5a889c1 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisBlobMapping.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisBlobMapping.java
@@ -33,6 +33,9 @@ import org.datanucleus.store.rdbms.table.Table;
 
 import org.apache.isis.applib.value.Blob;
 
+/**
+ * @since 1.x {@index}
+ */
 public class IsisBlobMapping extends SingleFieldMultiMapping {
 
     public IsisBlobMapping() {
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisClobMapping.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisClobMapping.java
index 9550dfa..d56a221 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisClobMapping.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/applib/IsisClobMapping.java
@@ -32,6 +32,9 @@ import org.datanucleus.store.rdbms.table.Table;
 
 import org.apache.isis.applib.value.Clob;
 
+/**
+ * @since 1.x {@index}
+ */
 public class IsisClobMapping extends SingleFieldMultiMapping {
 
     public IsisClobMapping() {
diff --git a/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/integration/JpaEntityInjectionPointResolver.java b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/integration/JpaEntityInjectionPointResolver.java
index 5bbc698..6908348 100644
--- a/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/integration/JpaEntityInjectionPointResolver.java
+++ b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/integration/JpaEntityInjectionPointResolver.java
@@ -35,19 +35,19 @@ import lombok.extern.log4j.Log4j2;
  * EntityListener class for listing with the {@link javax.persistence.EntityListeners} annotation, to
  * support injection point resolving for entities.
  * <p>
- * Instances of this class are not managed by Spring, but by the persistence layer. 
+ * Instances of this class are not managed by Spring, but by the persistence layer.
  * <p>
- * The particular persistence layer implementation in use needs to be configured, 
- * with a BeanManager, that is able to resolve injection points for this EntityListener.   
- *  
- * @since 2.0
+ * The particular persistence layer implementation in use needs to be configured,
+ * with a BeanManager, that is able to resolve injection points for this EntityListener.
+ *
+ * @since 2.0 {@index}
  */
 @Log4j2
 public class JpaEntityInjectionPointResolver {
 
     @Inject // not managed by Spring (directly)
     private ServiceInjector serviceInjector;
-    
+
     @PrePersist
     @PreUpdate
     @PreRemove
@@ -55,7 +55,7 @@ public class JpaEntityInjectionPointResolver {
         log.debug("beforeAnyUpdate: {}", entityPojo);
         serviceInjector.injectServicesInto(entityPojo);
     }
-    
+
     @PostPersist
     @PostUpdate
     @PostRemove
@@ -63,11 +63,11 @@ public class JpaEntityInjectionPointResolver {
         log.debug("afterAnyUpdate: {}" + entityPojo);
         //serviceInjector.injectServicesInto(entityPojo);
     }
-    
+
     @PostLoad
     private void afterLoad(Object entityPojo) {
         log.debug("afterLoad: {}" + entityPojo);
         serviceInjector.injectServicesInto(entityPojo);
     }
-    
+
 }
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
index 615e65e..1389825 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
@@ -48,47 +48,49 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * EclipseLink integration. 
+ * EclipseLink integration.
  * <p>
  * Sets up EclipseLink as the implementation provider for Spring Data JPA.
- * 
+ *
  * @implNote does not (yet) support weaving, explicitly disables it
  * @see <a href="https://www.baeldung.com/spring-eclipselink">baeldung.com</a>
+ *
+ * @since 2.0 {@index}
  */
-@Configuration 
+@Configuration
 @Import({
     IsisModuleJpaIntegration.class
 })
 @Log4j2
-public class IsisModuleJpaEclipselink extends JpaBaseConfiguration { 
+public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
 
     @Inject private Provider<ServiceInjector> serviceInjectorProvider;
-    
+
     @Bean
     public EclipseLinkJpaDialect eclipselinkJpaDialect() {
         return new EclipseLinkJpaDialect();
     }
-    
+
     @Bean
     public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
         return new PersistenceExceptionTranslationPostProcessor();
     }
-    
+
     protected IsisModuleJpaEclipselink(
             IsisConfiguration isisConfiguration,
-            DataSource dataSource, 
+            DataSource dataSource,
             JpaProperties properties,
             ObjectProvider<JtaTransactionManager> jtaTransactionManager) {
-        
+
         super(
-                autoCreateSchemas(dataSource, isisConfiguration), 
-                addAdditionalOrmFiles(properties, isisConfiguration), 
+                autoCreateSchemas(dataSource, isisConfiguration),
+                addAdditionalOrmFiles(properties, isisConfiguration),
                 jtaTransactionManager);
     }
 
-    @Override 
-    protected AbstractJpaVendorAdapter createJpaVendorAdapter() { 
-        return new EclipseLinkJpaVendorAdapter(); 
+    @Override
+    protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
+        return new EclipseLinkJpaVendorAdapter();
     }
 
     @Override
@@ -108,27 +110,27 @@ public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
     protected static DataSource autoCreateSchemas(
             final DataSource dataSource,
             final IsisConfiguration isisConfiguration) {
-        
+
         val persistenceSchemaConf = isisConfiguration.getPersistence().getJpa();
-        
+
         if(!persistenceSchemaConf.getAutoCreateSchemas().isEmpty()) {
-            
+
             log.info("about to create db schema(s) {}", persistenceSchemaConf.getAutoCreateSchemas());
-            
+
             try(val con = dataSource.getConnection()){
-                
+
                 val s = con.createStatement();
-                
+
                 for(val schema : persistenceSchemaConf.getAutoCreateSchemas()) {
                     s.execute(String.format(persistenceSchemaConf.getCreateSchemaSqlTemplate(), schema));
                 }
-                
+
             }
         }
 
         return dataSource;
     }
-    
+
     /**
      * integrates with settings from isis.persistence.jpa.*
      */
@@ -137,16 +139,16 @@ public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
             IsisConfiguration isisConfiguration) {
 
         val persistenceSchemaConf = isisConfiguration.getPersistence().getJpa();
-        
+
         persistenceSchemaConf.getAdditionalOrmFiles()
         .forEach(schema->properties.getMappingResources()
                 .add(String.format("META-INF/orm-%s.xml", schema)));
-        
+
         if(!properties.getMappingResources().isEmpty()) {
             log.info("using mapping-resources {}", properties.getMappingResources());
         }
-        
+
         return properties;
     }
-    
-}
\ No newline at end of file
+
+}
diff --git a/security/bypass/src/main/java/org/apache/isis/security/bypass/IsisModuleSecurityBypass.java b/security/bypass/src/main/java/org/apache/isis/security/bypass/IsisModuleSecurityBypass.java
index 710a0e7..e8e4a1e 100644
--- a/security/bypass/src/main/java/org/apache/isis/security/bypass/IsisModuleSecurityBypass.java
+++ b/security/bypass/src/main/java/org/apache/isis/security/bypass/IsisModuleSecurityBypass.java
@@ -27,8 +27,8 @@ import org.apache.isis.security.bypass.authorization.AuthorizorBypass;
 
 /**
  * Auth/bypass for eg. Integration Testing
- *  
- * @since 2.0
+ *
+ * @since 1.x {@index}
  */
 @Configuration
 @Import({
diff --git a/security/bypass/src/main/java/org/apache/isis/security/bypass/authentication/AuthenticatorBypass.java b/security/bypass/src/main/java/org/apache/isis/security/bypass/authentication/AuthenticatorBypass.java
index bc18ea2..9f46619 100644
--- a/security/bypass/src/main/java/org/apache/isis/security/bypass/authentication/AuthenticatorBypass.java
+++ b/security/bypass/src/main/java/org/apache/isis/security/bypass/authentication/AuthenticatorBypass.java
@@ -31,6 +31,8 @@ import org.apache.isis.core.security.authentication.standard.AuthenticatorAbstra
 
 /**
  * Implementation that bypasses authentication.
+ *
+ * @since 1.x {@index}
  */
 @Service
 @Named("isis.security.AuthenticatorBypass")
diff --git a/security/bypass/src/main/java/org/apache/isis/security/bypass/authorization/AuthorizorBypass.java b/security/bypass/src/main/java/org/apache/isis/security/bypass/authorization/AuthorizorBypass.java
index ad6cd1c..c6458b0 100644
--- a/security/bypass/src/main/java/org/apache/isis/security/bypass/authorization/AuthorizorBypass.java
+++ b/security/bypass/src/main/java/org/apache/isis/security/bypass/authorization/AuthorizorBypass.java
@@ -29,6 +29,9 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.core.security.authorization.standard.Authorizor;
 
+/**
+ * @since 1.x {@index}
+ */
 @Service
 @Named("isis.security.AuthorizorBypass")
 @Order(OrderPrecedence.LATE)
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
index a1710cb..9bb35c9 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
@@ -29,8 +29,8 @@ import org.apache.isis.core.webapp.IsisModuleCoreWebapp;
 
 /**
  * Configuration Bean to support Isis Security using Shiro.
- *  
- * @since 2.0
+ *
+ * @since 2.0 {@index}
  */
 @Configuration
 @Import({
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
index fcf152e..f9d72f5 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
@@ -32,13 +32,16 @@ import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.AuthenticationContext;
 import org.apache.isis.core.security.authentication.standard.Authenticator;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.security.AuthenticatorKeycloak")
 @Order(OrderPrecedence.EARLY)
 @Qualifier("Keycloak")
 @Singleton
 public class AuthenticatorKeycloak implements Authenticator {
-    
+
     @Inject private AuthenticationContext authenticationTracker;
 
     @Override
@@ -48,7 +51,7 @@ public class AuthenticatorKeycloak implements Authenticator {
 
     @Override
     public Authentication authenticate(final AuthenticationRequest request, final String code) {
-        // HTTP request filters should already have taken care of Authentication creation    
+        // HTTP request filters should already have taken care of Authentication creation
         return authenticationTracker.currentAuthentication().orElse(null);
     }
 
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authorization/AuthorizorKeycloak.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authorization/AuthorizorKeycloak.java
index 19b8f06..5202277 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authorization/AuthorizorKeycloak.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authorization/AuthorizorKeycloak.java
@@ -29,6 +29,9 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.core.security.authorization.standard.Authorizor;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.security.AuthorizorKeycloak")
 @Order(OrderPrecedence.EARLY)
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
index 8853bbd..b74de88 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
@@ -41,8 +41,11 @@ import org.apache.isis.core.security.authentication.standard.SimpleAuthenticatio
 
 import lombok.val;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class KeycloakFilter implements Filter {
-    
+
     @Autowired private InteractionFactory isisInteractionFactory;
 
     @Override
@@ -61,11 +64,11 @@ public class KeycloakFilter implements Filter {
             return;
         }
         final List<String> roles = toClaims(rolesHeader);
-        
+
         val user = UserMemento.ofNameAndRoleNames(userid, roles.stream());
         val authentication = SimpleAuthentication.of(user, subjectHeader);
         authentication.setType(Authentication.Type.EXTERNAL);
-        
+
         isisInteractionFactory.runAuthenticated(
                 authentication,
                 ()->{
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
index 75c2b2c..2fe1cb7 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
@@ -37,6 +37,8 @@ import lombok.Getter;
 
 /**
  * WebModule to enable support for Keycloak.
+ *
+ * @since 2.0 {@index}
  */
 @Service
 @Named("isis.security.WebModuleKeycloak")
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
index 6cacb7f..e424b36 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
@@ -28,8 +28,8 @@ import org.apache.isis.security.shiro.webmodule.WebModuleShiro;
 
 /**
  * Configuration Bean to support Isis Security using Shiro.
- *  
- * @since 2.0
+ *
+ * @since 1.x {@index}
  */
 @Configuration
 @Import({
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
index 4eb0695..8439a9c 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
@@ -69,6 +69,8 @@ import lombok.extern.log4j.Log4j2;
  * However, although there are two objects, they are set up to share the same {@link SecurityManager Shiro SecurityManager}
  * (bound to a thread-local).
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @Service
 @Named("isis.security.AuthenticatorShiro")
@@ -103,7 +105,7 @@ public class AuthenticatorShiro implements Authenticator {
         if(securityManager == null) {
             return null;
         }
-        
+
         final AuthenticationToken token = asAuthenticationToken(request);
 
         final Subject currentSubject = SecurityUtils.getSubject();
@@ -158,9 +160,9 @@ public class AuthenticatorShiro implements Authenticator {
     }
 
     Authentication authenticationFor(
-            AuthenticationRequest request, 
-            String validationCode, 
-            AuthenticationToken token, 
+            AuthenticationRequest request,
+            String validationCode,
+            AuthenticationToken token,
             Subject currentSubject) {
 
         final Stream<String> roles = Stream.concat(
@@ -169,8 +171,8 @@ public class AuthenticatorShiro implements Authenticator {
                 // copy over any roles passed in
                 // (this is used by the Wicket viewer, for example).
                 request.streamRoles());
-        
-        val user = UserMemento.ofNameAndRoleNames(request.getName(), roles); 
+
+        val user = UserMemento.ofNameAndRoleNames(request.getName(), roles);
         return SimpleAuthentication.of(user, validationCode);
     }
 
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/AuthorizorShiro.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/AuthorizorShiro.java
index 8045e7c..636e2b5 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/AuthorizorShiro.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/AuthorizorShiro.java
@@ -52,13 +52,15 @@ import lombok.val;
  * However, although there are two objects, they are set up to share the same {@link SecurityManager Shiro SecurityManager}
  * (bound to a thread-local).
  * </p>
+ *
+ * @since 1.x {@index}
  */
 @Service
 @Named("isis.security.AuthorizorShiro")
 @Order(OrderPrecedence.EARLY)
 @Qualifier("Shiro")
 public class AuthorizorShiro implements Authorizor {
-    
+
     @Inject private SpecificationLoader specificationLoader;
 
     @Override
@@ -125,7 +127,7 @@ public class AuthorizorShiro implements Authorizor {
     }
 
     // -- DEPS
-    
+
     /**
      * The {@link SecurityManager} is shared between both the {@link Authenticator} and the {@link Authorizor}
      * (if shiro is configured for both components).
@@ -133,12 +135,12 @@ public class AuthorizorShiro implements Authorizor {
     protected RealmSecurityManager getSecurityManager() {
         return ShiroSecurityContext.getSecurityManager();
     }
-    
+
     // -- HELPER
-    
+
     /**
      * @deprecated while this is technically correct, we should not need to call the SpecificationLoader
-     * on every permission check 
+     * on every permission check
      */
     private String asFeatureFqns(Identifier identifier) {
         val className = identifier.getClassName();
@@ -146,7 +148,7 @@ public class AuthorizorShiro implements Authorizor {
                 .<String>mapSuccess(this::asFeatureFqns)
                 .orElse(className);
     }
-    
+
     private String asFeatureFqns(Class<?> cls) {
         return Optional.ofNullable(specificationLoader.loadSpecification(cls))
                 .map(ObjectSpecification::getSpecId)
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermission.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermission.java
index ea16d31..3877e72 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermission.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermission.java
@@ -29,6 +29,9 @@ import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
 
 import lombok.val;
 
+/**
+ * @since 1.x {@index}
+ */
 public class IsisPermission extends WildcardPermission {
 
     private static final long serialVersionUID = 1L;
@@ -89,10 +92,10 @@ public class IsisPermission extends WildcardPermission {
     public String toString() {
         return (isVetoed?"!":"") + (permissionGroup != null? permissionGroup + "/": "") + super.toString();
     }
-    
+
     // -- HELPER
-    
-    private static final ThreadLocal<ListMultimap<String, IsisPermission>> VETOING_PERMISSIONS = 
+
+    private static final ThreadLocal<ListMultimap<String, IsisPermission>> VETOING_PERMISSIONS =
             ThreadLocal.withInitial(_Multimaps::newListMultimap);
 
     public static void resetVetoedPermissions() {
@@ -114,7 +117,7 @@ public class IsisPermission extends WildcardPermission {
         val vetoMultimap = IsisPermission.VETOING_PERMISSIONS.get();
         vetoMultimap.putElement(permissionGroup, vetoingPermission);
     }
-    
+
     private boolean impliesWithoutVeto(Permission p) {
         return super.implies(p);
     }
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermissionResolver.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermissionResolver.java
index e9ec4e9..99862a2 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermissionResolver.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/authorization/IsisPermissionResolver.java
@@ -21,6 +21,9 @@ package org.apache.isis.security.shiro.authorization;
 import org.apache.shiro.authz.Permission;
 import org.apache.shiro.authz.permission.PermissionResolver;
 
+/**
+ * @since 1.x {@index}
+ */
 public class IsisPermissionResolver implements PermissionResolver {
 
     public IsisPermissionResolver(){
diff --git a/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java b/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
index 12b50c0..ebcc42a 100644
--- a/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
+++ b/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
@@ -61,7 +61,8 @@ import lombok.extern.log4j.Log4j2;
  * WebModule to enable support for Shiro.
  * <p>
  * Can be customized via static {@link WebModuleShiro#setShiroEnvironmentClass(Class)}
- * @since 2.0
+ *
+ * @since 2.0 {@index}
  */
 @Service
 @Named("isis.security.WebModuleShiro")
@@ -69,7 +70,7 @@ import lombok.extern.log4j.Log4j2;
 @Qualifier("Shiro")
 @Log4j2
 public class WebModuleShiro extends WebModuleAbstract {
-    
+
 
     private static final String SHIRO_FILTER_NAME = "ShiroFilter";
 
@@ -84,7 +85,7 @@ public class WebModuleShiro extends WebModuleAbstract {
         if(shiroEnvironmentClass==null) {
             System.setProperty("shiroEnvironmentClass", null);
             return;
-        } 
+        }
         System.setProperty("shiroEnvironmentClass", shiroEnvironmentClass.getName());
     }
 
@@ -95,8 +96,8 @@ public class WebModuleShiro extends WebModuleAbstract {
             if(_Strings.isNotEmpty(customShiroIniResource)) {
                 val ini = new Ini();
                 ini.loadFromPath(customShiroIniResource);
-                return ini;	
-            } 
+                return ini;
+            }
             return null;
         }
         // see https://issues.apache.org/jira/browse/SHIRO-610
@@ -117,7 +118,7 @@ public class WebModuleShiro extends WebModuleAbstract {
         System.setProperty("shiroIniResource", resourcePath);
         setShiroEnvironmentClass(IniWebEnvironmentUsingSystemProperty.class);
     }
-    
+
     /**
      * Adds support for dependency injection into security realms
      * @since 2.0
@@ -137,16 +138,16 @@ public class WebModuleShiro extends WebModuleAbstract {
             super.contextInitialized(sce);
         }
 
-        @Override 
+        @Override
         protected WebEnvironment createEnvironment(ServletContext servletContext) {
             val shiroEnvironment = super.createEnvironment(servletContext);
             val securityManager = shiroEnvironment.getSecurityManager();
 
             injectServicesIntoRealms(securityManager);
-            
+
             return shiroEnvironment;
         }
-        
+
         @SuppressWarnings("unchecked")
         @SneakyThrows
         public void injectServicesIntoRealms(
@@ -160,16 +161,16 @@ public class WebModuleShiro extends WebModuleAbstract {
                         + "As a consequence cannot enumerate realms.");
                 return;
             }
-            
+
             val realms = (Collection<Realm>) realmsGetter
                     .invoke(securityManager, _Constants.emptyObjects);
 
             realms.stream().forEach(serviceInjector::injectServicesInto);
         }
-        
+
     }
 
-    // -- 
+    // --
 
     @Getter
     private final String name = "Shiro";
@@ -189,7 +190,7 @@ public class WebModuleShiro extends WebModuleAbstract {
         registerFilter(ctx, SHIRO_FILTER_NAME, ShiroFilter.class)
             .ifPresent(filterReg -> {
                 filterReg.addMappingForUrlPatterns(
-                        EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC), 
+                        EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC),
                         false, // filter is forced first
                         "/*");
             });
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Chained.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Chained.java
index b936e8e..5893a74 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Chained.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Chained.java
@@ -25,30 +25,33 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.subdomains.base.applib.with.WithInterval;
 import org.apache.isis.subdomains.base.applib.with.WithIntervalContiguous;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface Chained<T extends Chained<T>> {
 
-    
+
     /**
      * The object (usually an {@link WithInterval}, but not necessarily) that precedes this one, if any (not
      * necessarily contiguously)..
-     * 
+     *
      * <p>
-     * Implementations where successive intervals are contiguous should instead implement 
+     * Implementations where successive intervals are contiguous should instead implement
      * {@link WithIntervalContiguous}.
      */
     @Property(editing = Editing.DISABLED, hidden=Where.ALL_TABLES, optionality = Optionality.OPTIONAL)
     public T getPrevious();
 
     /**
-     * The object (usually an {@link WithInterval}, but not necessarily) that succeeds this one, if any (not 
+     * The object (usually an {@link WithInterval}, but not necessarily) that succeeds this one, if any (not
      * necessarily contiguously).
-     * 
+     *
      * <p>
-     * Implementations where successive intervals are contiguous should instead implement 
+     * Implementations where successive intervals are contiguous should instead implement
      * {@link WithIntervalContiguous}.
      */
     @Property(editing = Editing.DISABLED, hidden=Where.ALL_TABLES, optionality = Optionality.OPTIONAL)
     public T getNext();
-    
-    
+
+
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Dflt.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Dflt.java
index 71f59da..d4f1ac9 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Dflt.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Dflt.java
@@ -22,6 +22,9 @@ import java.util.Collection;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class Dflt {
 
     private Dflt(){}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/IsisModuleSubdomainsBaseApplib.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/IsisModuleSubdomainsBaseApplib.java
index ce171d5..252db1e 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/IsisModuleSubdomainsBaseApplib.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/IsisModuleSubdomainsBaseApplib.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib;
 
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 public class IsisModuleSubdomainsBaseApplib {
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/PowerType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/PowerType.java
index 75daaad..420cb89 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/PowerType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/PowerType.java
@@ -23,6 +23,8 @@ import org.apache.isis.applib.services.factory.FactoryService;
 /**
  * For <tt>enum</tt>s that act as powertypes, in other words acting as a factory
  * for subtypes of some inheritance hierarchy.
+ *
+ * @since 2.0 {@index}
  */
 public interface PowerType<T> {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Titled.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Titled.java
index 7556838..c49a2f1 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Titled.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/Titled.java
@@ -18,8 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface Titled {
-    
     String title();
-
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/TitledEnum.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/TitledEnum.java
index ef8b209..6eb5d66 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/TitledEnum.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/TitledEnum.java
@@ -23,7 +23,9 @@ import org.apache.isis.subdomains.base.applib.utils.StringUtils;
 /**
  * An enum that implements {@link Titled} and moreover its {@link #title()}
  * is derived according to the {@link StringUtils#enumTitle(String)} algorithm.
+ *
+ * @since 2.0 {@index}
  */
 public interface TitledEnum extends Titled {
-    
+
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/BaseServicesModule.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/BaseServicesModule.java
index bd0065c..e0804ac 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/BaseServicesModule.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/BaseServicesModule.java
@@ -21,6 +21,9 @@ package org.apache.isis.subdomains.base.applib.services;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Configuration
 @ComponentScan
 public class BaseServicesModule {
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/calendar/CalendarService.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/calendar/CalendarService.java
index 6a4198d..48a2455 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/calendar/CalendarService.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/services/calendar/CalendarService.java
@@ -32,6 +32,9 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.clock.ClockService;
 
+/**
+ * @since 2.0 {@index}
+ */
 @Service
 @Named("isis.sub.base.CalendarService")
 @Order(OrderPrecedence.MIDPOINT)
@@ -40,9 +43,9 @@ import org.apache.isis.applib.services.clock.ClockService;
 public class CalendarService {
 
     private static final int MONTHS_IN_QUARTER = 3;
-    
+
     private ClockService clockService;
-    
+
     @Inject
     public CalendarService(ClockService clockService) {
         this.clockService = clockService;
@@ -64,7 +67,7 @@ public class CalendarService {
     public LocalDate beginningOfNextQuarter() {
         return beginningOfQuarter(nowAsLocalDate().plusMonths(3));
     }
-    
+
     static LocalDate beginningOfQuarter(final LocalDate date) {
         final LocalDate beginningOfMonth = beginningOfMonth(date);
         final int monthOfYear = beginningOfMonth.getMonthValue();
@@ -77,7 +80,7 @@ public class CalendarService {
     private LocalDate nowAsLocalDate() {
         return clockService.getClock().localDate(ZoneId.systemDefault());
     }
-    
+
     /**
      * @deprecated - use {@link ClockService#getClock()}.getEpochMillis()
      */
@@ -86,5 +89,5 @@ public class CalendarService {
         return clockService.getClock().getEpochMillis();
     }
 
-    
+
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/DescriptionType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/DescriptionType.java
index b553516..2c08e75 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/DescriptionType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/DescriptionType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class DescriptionType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/FqcnType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/FqcnType.java
index 33f19aa..f91a4ea 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/FqcnType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/FqcnType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class FqcnType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/MoneyType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/MoneyType.java
index 217545a..42e2490 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/MoneyType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/MoneyType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class MoneyType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NameType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NameType.java
index db835d0..bdea9bf 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NameType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NameType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class NameType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NotesType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NotesType.java
index 15c8c25..db77526 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NotesType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/NotesType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class NotesType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ObjectIdentifierType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ObjectIdentifierType.java
index 0dc1e3b..4abf1e1 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ObjectIdentifierType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ObjectIdentifierType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class ObjectIdentifierType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/PercentageType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/PercentageType.java
index 46002dc..5280f44 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/PercentageType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/PercentageType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class PercentageType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ProperNameType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ProperNameType.java
index 374965f..08ef75b 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ProperNameType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ProperNameType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class ProperNameType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ReferenceType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ReferenceType.java
index eb5e67d..25a0656 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ReferenceType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/ReferenceType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class ReferenceType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/TitleType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/TitleType.java
index 884e823..4e27d1b 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/TitleType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/TitleType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class TitleType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UrlTemplateType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UrlTemplateType.java
index 390f7ef..f350eb9 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UrlTemplateType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UrlTemplateType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class UrlTemplateType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UserNameType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UserNameType.java
index 3fadb11..c19b026 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UserNameType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/UserNameType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class UserNameType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/XxxType.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/XxxType.java
index f05d812..c11108e 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/XxxType.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/types/XxxType.java
@@ -20,6 +20,9 @@ package org.apache.isis.subdomains.base.applib.types;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 @UtilityClass
 public class XxxType {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/ClassUtils.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/ClassUtils.java
index 436009d..102926d 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/ClassUtils.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/ClassUtils.java
@@ -18,8 +18,11 @@
  */
 package org.apache.isis.subdomains.base.applib.utils;
 
+/**
+ * @since 2.0 {@index}
+ */
 public final class ClassUtils {
-    
+
     private ClassUtils(){}
 
     @SuppressWarnings("unchecked")
@@ -28,11 +31,11 @@ public final class ClassUtils {
         try {
             clsx = Thread.currentThread().getContextClassLoader().loadClass(clsName);
         } catch (ClassNotFoundException e) {
-            throw new IllegalArgumentException("Class '" + clsName + "' not found"); 
+            throw new IllegalArgumentException("Class '" + clsName + "' not found");
+        }
+        if (!cls.isAssignableFrom(clsx)) {
+            throw new IllegalArgumentException("Class '" + clsName + "' not a subclass of " + cls.getName());
         }
-        if (!cls.isAssignableFrom(clsx)) { 
-            throw new IllegalArgumentException("Class '" + clsName + "' not a subclass of " + cls.getName()); 
-        } 
         return (Class<? extends T>) clsx;
     }
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/JodaPeriodUtils.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/JodaPeriodUtils.java
index 7275d37..e3d426a 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/JodaPeriodUtils.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/JodaPeriodUtils.java
@@ -24,6 +24,8 @@ import org.joda.time.format.PeriodFormatterBuilder;
 
 /**
  * Utilities for manipulating parsing JODA {@link Period}s.
+ *
+ * @since 2.0 {@index}
  */
 public final class JodaPeriodUtils {
 
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MathUtils.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MathUtils.java
index c99e2c1..d307a32 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MathUtils.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MathUtils.java
@@ -23,11 +23,13 @@ import java.math.MathContext;
 
 /**
  * General-purpose math utilities.
+ *
+ * @since 2.0 {@index}
  */
 public final class MathUtils {
-    
+
     private MathUtils() {}
-    
+
     public static BigDecimal round(final BigDecimal input, final int precision) {
         final MathContext mc = new MathContext(precision+1);
         return input.round(mc);
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MessageUtils.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MessageUtils.java
index 74f88af..285d68b 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MessageUtils.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/MessageUtils.java
@@ -23,6 +23,9 @@ import java.util.regex.Pattern;
 
 import org.apache.isis.commons.internal.base._Strings;
 
+/**
+ * @since 2.0 {@index}
+ */
 public final class MessageUtils {
 
     private MessageUtils(){}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/StringUtils.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/StringUtils.java
index d8e35bb..5c9a402 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/StringUtils.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/StringUtils.java
@@ -23,6 +23,9 @@ import java.util.stream.Collectors;
 
 import org.apache.isis.commons.internal.base._Strings;
 
+/**
+ * @since 2.0 {@index}
+ */
 public final class StringUtils {
 
     private StringUtils() {
@@ -33,7 +36,7 @@ public final class StringUtils {
                 ? StringUtils.capitalize(input.toLowerCase())
                 : null;
     };
-    
+
     private static UnaryOperator<String> UPPER_CASE = (final String input) -> {
         return input != null
                 ? StringUtils.capitalize(input.toUpperCase())
@@ -45,7 +48,7 @@ public final class StringUtils {
         if(string == null) {
             return null;
         }
-        
+
         return _Strings.splitThenStream(string, "_")
         .map(LOWER_CASE_THEN_CAPITALIZE)
         .collect(Collectors.joining(" "));
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/TitleBuilder.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/TitleBuilder.java
index 0c5db71..d6f4ff4 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/TitleBuilder.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/utils/TitleBuilder.java
@@ -23,7 +23,11 @@ import java.lang.reflect.Method;
 
 import org.apache.isis.applib.util.TitleBufferException;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class TitleBuilder {
+
     private static final String SPACE = " ";
     private static final String DELIMITER = "[]";
     private static final String PARENT_SEPARATOR = " > ";
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/AbstractInterval.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/AbstractInterval.java
index 5a5c9c8..9374522 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/AbstractInterval.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/AbstractInterval.java
@@ -23,6 +23,9 @@ import org.joda.time.LocalDate;
 import org.joda.time.Period;
 import org.joda.time.PeriodType;
 
+/**
+ * @since 2.0 {@index}
+ */
 public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     public enum IntervalEnding {
@@ -64,7 +67,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * Determines how end dates are shown in the ui and stored in the database:
-     * 
+     *
      * {@link IntervalEnding#EXCLUDING_END_DATE} uses the start date of the next interval as end date.
      * {@link IntervalEnding#INCLUDING_END_DATE} used the last day of the interval as the end date.
      */
@@ -99,7 +102,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * Does this date contain the specified time interval.
-     * 
+     *
      * @param date
      * @return
      */
@@ -121,7 +124,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * Does this time interval contain the specified time interval.
-     * 
+     *
      * @param localDateInterval
      * @return
      */
@@ -131,7 +134,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * The duration in days
-     * 
+     *
      * @return
      */
     public int days() {
@@ -179,10 +182,10 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
     protected String dateToString(LocalDate localDate, String format) {
         return localDate == null ? "----------" : localDate.toString(format);
     }
-    
+
     /**
      * Gets the overlap between this interval and another interval.
-     * 
+     *
      * @param otherInterval
      * @return
      */
@@ -215,7 +218,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * Does this time interval contain the specified time interval.
-     * 
+     *
      * @param interval
      * @return
      */
@@ -232,7 +235,7 @@ public abstract class AbstractInterval<T extends AbstractInterval<T>> {
 
     /**
      * Does this interval is within the specified interval
-     * 
+     *
      * @param interval
      * @return
      */
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/LocalDateInterval.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/LocalDateInterval.java
index 9df0e28..8a1c2fb 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/LocalDateInterval.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/LocalDateInterval.java
@@ -23,6 +23,9 @@ import java.util.Objects;
 import org.joda.time.Interval;
 import org.joda.time.LocalDate;
 
+/**
+ * @since 2.0 {@index}
+ */
 public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
 
     public static LocalDateInterval excluding(final LocalDate startDate, final LocalDate endDate) {
@@ -34,7 +37,7 @@ public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
     }
 
     // //////////////////////////////////////
-    
+
     public LocalDateInterval() {
     }
 
@@ -89,7 +92,7 @@ public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
                         .append(dateToString(endDateExcluding()));
         return builder.toString();
     }
-    
+
     public String toString(String format) {
         StringBuilder builder =
                 new StringBuilder(
@@ -100,12 +103,12 @@ public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
     }
 
     // //////////////////////////////////////
-    
+
     /**
      * Parse a string representation of a LocalDateInterval
-     * 
+     *
      * Since this method is only used for testing it's not heavily guarded against illegal arguments
-     * 
+     *
      * @param input  a string with format yyyy-mm-dd/yyyy-mm-dd, end date is excluding
      * @return
      */
@@ -120,7 +123,7 @@ public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
 
     /**
      * Parse a string to a LocalDate
-     * 
+     *
      * @param input  a string representing a parsable LocalDate, "*" or "----------" returns null
      * @return
      */
@@ -133,14 +136,14 @@ public class LocalDateInterval extends AbstractInterval<LocalDateInterval>{
 
 
     /**
-     * Returns an end date given the start date of the next adjoining interverval 
-     * 
+     * Returns an end date given the start date of the next adjoining interverval
+     *
      * @param date
      * @return
      */
     public static LocalDate endDateFromStartDate(LocalDate date) {
         return new LocalDateInterval(date, null).endDateFromStartDate();
-        
+
     }
-    
+
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/VT.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/VT.java
index 14c6a5d..4d98741 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/VT.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/valuetypes/VT.java
@@ -26,12 +26,14 @@ import org.joda.time.LocalDate;
 
 /**
  * Factory methods for value types
+ *
+ * @since 2.0 {@index}
  */
 public final class VT {
 
     private VT(){}
 
-    // //////////////////////////////////////
+
 
     public static LocalDateInterval ldi(String intervalStr) {
         return intervalStr != null? LocalDateInterval.parseString(intervalStr) : null;
@@ -45,7 +47,7 @@ public final class VT {
         return ldi(st, endDate, AbstractInterval.IntervalEnding.EXCLUDING_END_DATE);
     }
 
-    // //////////////////////////////////////
+
 
     /**
      *
@@ -59,7 +61,8 @@ public final class VT {
         return new LocalDate(yyyy,mm,dd);
     }
 
-    // //////////////////////////////////////
+
+
 
     public static BigInteger bi(int val) {
         return BigInteger.valueOf(val);
@@ -68,7 +71,8 @@ public final class VT {
         return val != null ? bi(val): null;
     }
 
-    // //////////////////////////////////////
+
+
 
     public static BigDecimal bd(String str) {
         return new BigDecimal(str);
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeComparable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeComparable.java
index a81fd8f..2faa51a 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeComparable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeComparable.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithCodeComparable<T extends WithCodeComparable<T>> extends Comparable<T>, WithCodeGetter {
     void setCode(String code);
-}
\ No newline at end of file
+}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeGetter.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeGetter.java
index 0e84285..d0d884a 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeGetter.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeGetter.java
@@ -22,13 +22,15 @@ import org.apache.isis.applib.util.ObjectContracts.ToStringEvaluator;
 
 /**
  * Indicates that the implementing class has a {@link #getCode() code}.
+ *
+ * @since 2.0 {@index}
  */
 public interface WithCodeGetter {
 
     public String getCode();
-    
+
     /**
-     * Utility class for obtaining the string value of an object that implements {@link WithCodeGetter}. 
+     * Utility class for obtaining the string value of an object that implements {@link WithCodeGetter}.
      */
     public static final class ToString {
         private ToString() {}
@@ -38,7 +40,7 @@ public interface WithCodeGetter {
                 public boolean canEvaluate(final Object o) {
                     return o instanceof WithCodeGetter;
                 }
-                
+
                 @Override
                 public String evaluate(final Object o) {
                     return ((WithCodeGetter)o).getCode();
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeUnique.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeUnique.java
index 2e3c33a..c0da8f6 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeUnique.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithCodeUnique.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithCodeUnique extends WithCodeGetter {
 
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionComparable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionComparable.java
index a493f68..a50386b 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionComparable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionComparable.java
@@ -18,7 +18,10 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
-public interface WithDescriptionComparable<T extends WithDescriptionComparable<T>> 
+/**
+ * @since 2.0 {@index}
+ */
+public interface WithDescriptionComparable<T extends WithDescriptionComparable<T>>
         extends Comparable<T>, WithDescriptionGetter {
     void setDescription(String description);
-}
\ No newline at end of file
+}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionGetter.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionGetter.java
index 384e0c7..fde15f2 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionGetter.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionGetter.java
@@ -22,13 +22,15 @@ import org.apache.isis.applib.util.ObjectContracts.ToStringEvaluator;
 
 /**
  * Indicates that the implementing class has a {@link #getDescription() description}.
+ *
+ * @since 2.0 {@index}
  */
 public interface WithDescriptionGetter {
 
     public String getDescription();
-    
+
     /**
-     * Utility class for obtaining the string value of an object that implements {@link WithDescriptionGetter}. 
+     * Utility class for obtaining the string value of an object that implements {@link WithDescriptionGetter}.
      */
     public static final class ToString {
         private ToString() {}
@@ -38,7 +40,7 @@ public interface WithDescriptionGetter {
                 public boolean canEvaluate(final Object o) {
                     return o instanceof WithDescriptionGetter;
                 }
-                
+
                 @Override
                 public String evaluate(final Object o) {
                     return ((WithDescriptionGetter)o).getDescription();
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionUnique.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionUnique.java
index 9524b00..dc89c46 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionUnique.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithDescriptionUnique.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithDescriptionUnique extends WithDescriptionGetter {
 
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithInterval.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithInterval.java
index 662574e..501f4a5 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithInterval.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithInterval.java
@@ -32,11 +32,14 @@ import org.apache.isis.subdomains.base.applib.valuetypes.LocalDateInterval;
 
 import lombok.experimental.UtilityClass;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithInterval<T extends WithInterval<T>> extends WithStartDate {
 
     /**
      * The start date of the interval.
-     * 
+     *
      * <p>
      * A value of <tt>null</tt> implies that the parent's start date should be used. If
      * that is <tt>null</tt>, then implies 'the beginning of time'.
@@ -48,7 +51,7 @@ public interface WithInterval<T extends WithInterval<T>> extends WithStartDate {
 
     /**
      * The end date of the interval.
-     * 
+     *
      * <p>
      * A value of <tt>null</tt> implies that the parent's end date should be used. If
      * that is <tt>null</tt>, then implies 'the end of time'.
@@ -125,7 +128,7 @@ public interface WithInterval<T extends WithInterval<T>> extends WithStartDate {
         // }
 
         public static <T extends WithInterval<T>> T firstElseNull(
-                final SortedSet<T> roles, 
+                final SortedSet<T> roles,
                 final Predicate<T> predicate) {
             return _NullSafe.stream(roles)
             .filter(predicate)
@@ -136,7 +139,7 @@ public interface WithInterval<T extends WithInterval<T>> extends WithStartDate {
 
     @UtilityClass
     public static final class Predicates {
-        
+
         /**
          * A {@link Predicate} that tests whether the role's {@link WithInterval#isCurrent() current}
          * status is the specified value.
@@ -148,5 +151,5 @@ public interface WithInterval<T extends WithInterval<T>> extends WithStartDate {
         }
 
     }
-    
+
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalContiguous.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalContiguous.java
index a4f46db..940b074 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalContiguous.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalContiguous.java
@@ -34,17 +34,20 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.subdomains.base.applib.Chained;
 
-public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>> 
+/**
+ * @since 2.0 {@index}
+ */
+public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
         extends WithIntervalMutable<T>, Comparable<T> {
 
-    
+
     /**
      * The interval that immediately precedes this one, if any.
-     * 
+     *
      * <p>
      * The predecessor's {@link #getEndDate() end date} is the day before this interval's
      * {@link #getStartDate() start date}.
-     * 
+     *
      * <p>
      * Implementations where successive intervals are NOT contiguous should instead implement {@link Chained}.
      */
@@ -53,43 +56,43 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
 
     /**
      * The interval that immediately succeeds this one, if any.
-     * 
+     *
      * <p>
      * The successor's {@link #getStartDate() start date} is the day after this interval's
      * {@link #getEndDate() end date}.
-     * 
+     *
      * <p>
      * Implementations where successive intervals are NOT contiguous should instead implement {@link Chained}.
      */
     @Property(editing = Editing.DISABLED, hidden=Where.ALL_TABLES, optionality = Optionality.OPTIONAL)
     public T getSuccessor();
-    
-    
+
+
 
     /**
      * Show this {@link WithIntervalContiguous} in context with its
      * predecessors and successors.
-     * 
+     *
      * <p>
      * This will typically (always) be a derived collection obtained
      * by filtering a collection of the "parent".
      */
     @Property(editing = Editing.DISABLED)
     public SortedSet<T> getTimeline();
-    
+
 
     // //////////////////////////////////////
 
-    
+
     public interface Factory<T extends WithIntervalContiguous<T>> {
         T newRole(LocalDate startDate, LocalDate endDate);
     }
-    
+
     /**
      * Helper class for implementations to delegate to.
      */
     public static class Helper<T extends WithIntervalContiguous<T>> {
-        
+
         private final T withInterval;
         public Helper(final T withInterval) {
             this.withInterval = withInterval;
@@ -98,7 +101,7 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
         // //////////////////////////////////////
 
         public T succeededBy(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate,
                 final WithIntervalContiguous.Factory<T> factory) {
             final WithInterval<?> successor = withInterval.getSuccessor();
@@ -114,7 +117,7 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
         }
 
         public String validateSucceededBy(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate) {
             if(startDate != null && endDate != null && startDate.isAfter(endDate)) {
                 return "End date cannot be earlier than start date";
@@ -133,15 +136,15 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
             }
             return null;
         }
-        
+
         // //////////////////////////////////////
 
 
         public T precededBy(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate,
                 final WithIntervalContiguous.Factory<T> factory) {
-            
+
             final WithInterval<?> predecessor = withInterval.getPredecessor();
             if(predecessor != null) {
                 predecessor.setEndDate(dayBeforeElseNull(startDate));
@@ -149,13 +152,13 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
             withInterval.setStartDate(dayAfterElseNull(endDate));
             return factory.newRole(startDate, endDate);
         }
-         
+
         public LocalDate default2PrecededBy() {
             return dayBeforeElseNull(withInterval.getStartDate());
         }
 
         public String validatePrecededBy(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate) {
             if(startDate != null && endDate != null && startDate.isAfter(endDate)) {
                 return "End date cannot be earlier than start date";
@@ -213,13 +216,13 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
             .filter(filter)
             .collect(Collectors.toCollection(TreeSet::new));
         }
-        
+
         // //////////////////////////////////////
 
         public T changeDates(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate) {
-            
+
             final T predecessor = withInterval.getPredecessor();
             if(predecessor != null) {
                 predecessor.setEndDate(dayBeforeElseNull(startDate));
@@ -236,13 +239,13 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
         public LocalDate default0ChangeDates() {
             return withInterval.getEffectiveInterval().startDate();
         }
-        
+
         public LocalDate default1ChangeDates() {
             return withInterval.getEffectiveInterval().endDate();
         }
 
         public String validateChangeDates(
-                final LocalDate startDate, 
+                final LocalDate startDate,
                 final LocalDate endDate) {
 
             if(startDate != null && endDate != null && startDate.isAfter(endDate)) {
@@ -268,7 +271,7 @@ public interface WithIntervalContiguous<T extends WithIntervalContiguous<T>>
             }
             return null;
         }
-        
+
         // //////////////////////////////////////
 
         private static LocalDate dayBeforeElseNull(final LocalDate date) {
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalMutable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalMutable.java
index 4d41952..723435a 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalMutable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithIntervalMutable.java
@@ -26,6 +26,9 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.subdomains.base.applib.valuetypes.LocalDateInterval;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithIntervalMutable<T extends WithIntervalMutable<T>> extends WithInterval<T> {
 
     @Action(semantics = SemanticsOf.IDEMPOTENT)
@@ -43,7 +46,7 @@ public interface WithIntervalMutable<T extends WithIntervalMutable<T>> extends W
 
     /**
      * Helper class for implementations to delegate to.
-     * 
+     *
      * <p>
      * If the class implements {@link WithIntervalContiguous} then use
      * {@link WithIntervalContiguous.Helper} instead.
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameComparable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameComparable.java
index d6c572b..914afb3 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameComparable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameComparable.java
@@ -18,7 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithNameComparable<T extends WithNameComparable<T>> extends Comparable<T>, WithNameGetter {
-    
     void setName(String name);
-}
\ No newline at end of file
+}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameGetter.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameGetter.java
index 9dff134..b3bcbb9 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameGetter.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameGetter.java
@@ -22,13 +22,15 @@ import org.apache.isis.applib.util.ObjectContracts;
 
 /**
  * Indicates that the implementing class has a {@link #getName() name}.
+ *
+ * @since 2.0 {@index}
  */
 public interface WithNameGetter {
 
     public String getName();
-    
+
     /**
-     * Utility class for obtaining the string value of an object that implements {@link WithNameGetter}. 
+     * Utility class for obtaining the string value of an object that implements {@link WithNameGetter}.
      */
     public static final class ToString {
         private ToString() {}
@@ -38,7 +40,7 @@ public interface WithNameGetter {
                 public boolean canEvaluate(final Object o) {
                     return o instanceof WithNameGetter;
                 }
-                
+
                 @Override
                 public String evaluate(final Object o) {
                     return ((WithNameGetter)o).getName();
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameUnique.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameUnique.java
index c3ce237..3071569 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameUnique.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithNameUnique.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithNameUnique extends WithNameGetter {
 
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceComparable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceComparable.java
index a323bd1..50e1a85 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceComparable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceComparable.java
@@ -18,7 +18,10 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
-public interface WithReferenceComparable<T extends WithReferenceComparable<T>> 
+/**
+ * @since 2.0 {@index}
+ */
+public interface WithReferenceComparable<T extends WithReferenceComparable<T>>
         extends Comparable<T>, WithReferenceGetter {
     void setReference(String reference);
-}
\ No newline at end of file
+}
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceGetter.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceGetter.java
index ba9f01e..c1e2781 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceGetter.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceGetter.java
@@ -22,13 +22,15 @@ import org.apache.isis.applib.util.ObjectContracts.ToStringEvaluator;
 
 /**
  * Indicates that the implementing class has a {@link #getReference() reference}.
+ *
+ * @since 2.0 {@index}
  */
 public interface WithReferenceGetter {
 
     public String getReference();
-    
+
     /**
-     * Utility class for obtaining the string value of an object that implements {@link WithReferenceGetter}. 
+     * Utility class for obtaining the string value of an object that implements {@link WithReferenceGetter}.
      */
     public static final class ToString {
         private ToString() {}
@@ -38,7 +40,7 @@ public interface WithReferenceGetter {
                 public boolean canEvaluate(final Object o) {
                     return o instanceof WithReferenceGetter;
                 }
-                
+
                 @Override
                 public String evaluate(final Object o) {
                     return ((WithReferenceGetter)o).getReference();
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceUnique.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceUnique.java
index 597ac74..6cfb5e1 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceUnique.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithReferenceUnique.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithReferenceUnique extends WithReferenceGetter {
 
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithSequence.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithSequence.java
index f85ec0c..760cb7e 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithSequence.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithSequence.java
@@ -20,8 +20,10 @@ package org.apache.isis.subdomains.base.applib.with;
 
 import java.math.BigInteger;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithSequence {
-
     public BigInteger getSequence();
     public void setSequence(BigInteger sequence);
 }
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithStartDate.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithStartDate.java
index 5ec6eba..95a5f8a 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithStartDate.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithStartDate.java
@@ -23,6 +23,9 @@ import org.joda.time.LocalDate;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
 
+/**
+ * @since 2.0 {@index}
+ */
 public interface WithStartDate {
 
     @Property(editing = Editing.DISABLED)
diff --git a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithTitleComparable.java b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithTitleComparable.java
index d66a686..4bbea0f 100644
--- a/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithTitleComparable.java
+++ b/subdomains/base/applib/src/main/java/org/apache/isis/subdomains/base/applib/with/WithTitleComparable.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.subdomains.base.applib.with;
... 4603 lines suppressed ...