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/16 09:05:57 UTC

[isis] branch ISIS-2444 updated (89b1ee6 -> cc3ed74)

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.


    from 89b1ee6  ISIS-2444: updates docs
     add d129796  Bump dependency-check-maven from 6.1.0 to 6.1.1
     add 7c8545b  Merge pull request #379 from apache/dependabot/maven/org.owasp-dependency-check-maven-6.1.1
     add aba886d  Bump asciidoctorj.version from 2.4.2 to 2.4.3
     add 262d987  Merge pull request #380 from apache/dependabot/maven/asciidoctorj.version-2.4.3
     add 1438d6e  Bump frontend-maven-plugin from 1.11.0 to 1.11.2
     add b151fab  Merge pull request #381 from apache/dependabot/maven/com.github.eirslett-frontend-maven-plugin-1.11.2
     add 8cdc4c4  Bump camel.version from 3.7.2 to 3.8.0
     add d4b9e71  Merge pull request #377 from apache/dependabot/maven/camel.version-3.8.0
     add 970128d  ISIS-2502: fixes build
     new cc3ed74  ISIS-2444: adds in tooling support to detect and include hook files

The 1 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:
 .../generated/pages/index/applib/Identifier.adoc   |   1 -
 .../index/applib/RecreatableDomainObject.adoc      |   1 -
 .../generated/pages/index/applib/ViewModel.adoc    |   1 -
 .../index/applib/adapters/DefaultsProvider.adoc    |   1 -
 .../index/applib/adapters/EncoderDecoder.adoc      |   1 -
 .../pages/index/applib/adapters/Parser.adoc        |   1 -
 .../applib/adapters/ValueSemanticsProvider.adoc    |   1 -
 .../pages/index/applib/annotation/Action.adoc      |   1 -
 .../index/applib/annotation/ActionLayout.adoc      |   1 -
 .../index/applib/annotation/BookmarkPolicy.adoc    |   1 -
 .../pages/index/applib/annotation/Collection.adoc  |   1 -
 .../index/applib/annotation/CollectionLayout.adoc  |   1 -
 .../pages/index/applib/annotation/Defaulted.adoc   |   1 -
 .../index/applib/annotation/DomainObject.adoc      |   1 -
 .../applib/annotation/DomainObjectLayout.adoc      |   1 -
 .../index/applib/annotation/DomainService.adoc     |   1 -
 .../applib/annotation/DomainServiceLayout.adoc     |   1 -
 .../pages/index/applib/annotation/Editing.adoc     |   1 -
 .../pages/index/applib/annotation/Facets.adoc      |   1 -
 .../index/applib/annotation/InteractionScope.adoc  |   2 +-
 .../index/applib/annotation/LabelPosition.adoc     |   1 -
 .../pages/index/applib/annotation/MemberOrder.adoc |   1 -
 .../pages/index/applib/annotation/Nature.adoc      |   1 -
 .../index/applib/annotation/NatureOfService.adoc   |   1 -
 .../pages/index/applib/annotation/Optionality.adoc |   1 -
 .../index/applib/annotation/OrderPrecedence.adoc   |   1 -
 .../pages/index/applib/annotation/Parameter.adoc   |   1 -
 .../index/applib/annotation/ParameterLayout.adoc   |   1 -
 .../pages/index/applib/annotation/Projecting.adoc  |   1 -
 .../pages/index/applib/annotation/PromptStyle.adoc |   1 -
 .../pages/index/applib/annotation/Property.adoc    |   1 -
 .../index/applib/annotation/PropertyLayout.adoc    |   1 -
 .../pages/index/applib/annotation/Publishing.adoc  |   1 -
 .../pages/index/applib/annotation/Redirect.adoc    |   1 -
 .../pages/index/applib/annotation/RenderDay.adoc   |   1 -
 .../pages/index/applib/annotation/Repainting.adoc  |   1 -
 .../pages/index/applib/annotation/SemanticsOf.adoc |   1 -
 .../pages/index/applib/annotation/Snapshot.adoc    |   1 -
 .../pages/index/applib/annotation/Title.adoc       |   1 -
 .../pages/index/applib/annotation/Value.adoc       |   1 -
 .../pages/index/applib/annotation/Where.adoc       |   1 -
 .../client/RepresentationTypeSimplifiedV2.adoc     |   1 -
 .../pages/index/applib/client/SuppressionType.adoc |   1 -
 .../pages/index/applib/clock/VirtualClock.adoc     |   1 -
 .../pages/index/applib/events/EventObjectBase.adoc |   1 -
 .../applib/events/domain/AbstractDomainEvent.adoc  |   1 -
 .../applib/events/domain/ActionDomainEvent.adoc    |   1 -
 .../events/domain/CollectionDomainEvent.adoc       |   1 -
 .../applib/events/domain/PropertyDomainEvent.adoc  |   1 -
 .../index/applib/events/ui/AbstractUiEvent.adoc    |   1 -
 .../index/applib/events/ui/CssClassUiEvent.adoc    |   1 -
 .../pages/index/applib/events/ui/IconUiEvent.adoc  |   1 -
 .../index/applib/events/ui/LayoutUiEvent.adoc      |   1 -
 .../pages/index/applib/events/ui/TitleUiEvent.adoc |   1 -
 .../applib/exceptions/TranslatableException.adoc   |   1 -
 .../pages/index/applib/graph/tree/TreeAdapter.adoc |   1 -
 .../pages/index/applib/graph/tree/TreeNode.adoc    |   1 -
 .../pages/index/applib/graph/tree/TreePath.adoc    |   1 -
 .../applib/layout/component/ActionLayoutData.adoc  |   1 -
 .../layout/component/CollectionLayoutData.adoc     |   1 -
 .../layout/component/DomainObjectLayoutData.adoc   |   1 -
 .../index/applib/layout/component/FieldSet.adoc    |   1 -
 .../layout/component/PropertyLayoutData.adoc       |   1 -
 .../layout/component/ServiceActionLayoutData.adoc  |   1 -
 .../applib/layout/grid/bootstrap3/BS3Col.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3Element.adoc  |   1 -
 .../layout/grid/bootstrap3/BS3ElementAbstract.adoc |   1 -
 .../applib/layout/grid/bootstrap3/BS3Grid.adoc     |   1 -
 .../applib/layout/grid/bootstrap3/BS3Row.adoc      |   1 -
 .../layout/grid/bootstrap3/BS3RowContent.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3Tab.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3TabGroup.adoc |   1 -
 .../applib/layout/grid/bootstrap3/HasCssId.adoc    |   1 -
 .../applib/layout/menubars/bootstrap3/BS3Menu.adoc |   1 -
 .../layout/menubars/bootstrap3/BS3MenuBars.adoc    |   1 -
 .../generated/pages/index/applib/query/Query.adoc  |   1 -
 .../pages/index/applib/query/QueryRange.adoc       |   1 -
 .../index/applib/services/DomainChangeRecord.adoc  |   1 -
 .../index/applib/services/bookmark/Bookmark.adoc   |   1 -
 .../applib/services/bookmark/BookmarkService.adoc  |   1 -
 .../services/bookmarkui/BookmarkUiService.adoc     |   1 -
 .../index/applib/services/command/Command.adoc     |   1 -
 .../services/command/CommandExecutorService.adoc   |   1 -
 .../ContentMappingServiceForCommandsDto.adoc       |   1 -
 .../commanddto/processor/CommandDtoProcessor.adoc  |   1 -
 .../processor/spi/CommandDtoProcessorService.adoc  |   1 -
 .../confview/ConfigurationViewService.adoc         |   1 -
 .../services/conmap/ContentMappingService.adoc     |   1 -
 .../index/applib/services/email/EmailService.adoc  |   1 -
 .../index/applib/services/error/SimpleTicket.adoc  |   1 -
 .../pages/index/applib/services/error/Ticket.adoc  |   1 -
 .../applib/services/eventbus/EventBusService.adoc  |   1 -
 .../index/applib/services/exceprecog/Category.adoc |   1 -
 .../services/exceprecog/ExceptionRecognizer.adoc   |   1 -
 .../exceprecog/ExceptionRecognizerService.adoc     |   1 -
 .../applib/services/exceprecog/Recognition.adoc    |   1 -
 .../applib/services/factory/FactoryService.adoc    |   1 -
 .../applib/services/grid/GridLoaderService.adoc    |   1 -
 .../index/applib/services/grid/GridService.adoc    |   1 -
 .../applib/services/grid/GridSystemService.adoc    |   1 -
 .../index/applib/services/hint/HintStore.adoc      |   1 -
 .../index/applib/services/i18n/LocaleProvider.adoc |   1 -
 .../pages/index/applib/services/i18n/Mode.adoc     |  52 ++++++++++
 .../applib/services/i18n/TranslatableString.adoc   |   1 -
 .../applib/services/i18n/TranslationService.adoc   |   5 +-
 .../applib/services/i18n/TranslationsResolver.adoc |  20 +++-
 .../index/applib/services/iactn/Execution.adoc     |   1 -
 .../applib/services/iactn/ExecutionContext.adoc    |   1 -
 .../index/applib/services/iactn/Interaction.adoc   |   1 -
 .../applib/services/iactn/InteractionContext.adoc  |   1 -
 .../index/applib/services/iactn/Sequence.adoc      |   1 -
 .../applib/services/inject/ServiceInjector.adoc    |  30 +++++-
 .../index/applib/services/jaxb/JaxbService.adoc    |   1 -
 .../applib/services/layout/LayoutService.adoc      |   1 -
 .../pages/index/applib/services/layout/Style.adoc  |   1 -
 .../applib/services/linking/DeepLinkService.adoc   |   1 -
 .../services/menu/MenuBarsLoaderService.adoc       |   1 -
 .../applib/services/menu/MenuBarsService.adoc      |   1 -
 .../applib/services/message/MessageService.adoc    |   1 -
 .../index/applib/services/metamodel/BeanSort.adoc  |   1 -
 .../index/applib/services/metamodel/Config.adoc    |   1 -
 .../services/metamodel/MetaModelService.adoc       |   1 -
 .../applib/services/metrics/MetricsService.adoc    |   1 -
 .../services/publishing/spi/CommandSubscriber.adoc |   1 -
 .../services/publishing/spi/EntityChanges.adoc     |   1 -
 .../publishing/spi/EntityChangesSubscriber.adoc    |   1 -
 .../spi/EntityPropertyChangeSubscriber.adoc        |   1 -
 .../publishing/spi/ExecutionSubscriber.adoc        |   1 -
 .../queryresultscache/QueryResultsCache.adoc       |   1 -
 .../QueryResultsCacheControl.adoc                  |   1 -
 .../registry/InstanceByPriorityComparator.adoc}    |   9 +-
 .../applib/services/registry/ServiceRegistry.adoc  |  26 ++++-
 .../applib/services/repository/EntityState.adoc    |   1 -
 .../services/repository/RepositoryService.adoc     |   1 -
 .../applib/services/routing/RoutingService.adoc    |  43 +++++++-
 .../applib/services/scratchpad/Scratchpad.adoc     |   7 +-
 .../services/session/SessionLoggingService.adoc    |  20 +++-
 .../index/applib/services/sudo/SudoService.adoc    |  17 ++--
 .../services/swagger/Format.adoc}                  |  46 ++++-----
 .../applib/services/swagger/SwaggerService.adoc    |  18 +++-
 .../index/applib/services/swagger/Visibility.adoc  |  55 +++++++++++
 .../services/tablecol/TableColumnOrderService.adoc |  36 ++++++-
 .../index/applib/services/title/TitleService.adoc  |  15 +--
 .../services/urlencoding/UrlEncodingService.adoc   |  32 +++++-
 ...rlEncodingServiceUsingBaseEncodingAbstract.adoc |   2 +
 .../index/applib/services/user/RoleMemento.adoc    |   7 +-
 .../index/applib/services/user/UserService.adoc    |   3 +-
 .../services/userprof/UserProfileService.adoc      |  11 +--
 .../services/userreg/EmailNotificationService.adoc |   1 -
 .../services/userreg/UserRegistrationService.adoc  |  56 +++++++++--
 .../applib/services/wrapper/WrapperFactory.adoc    |  13 +--
 .../applib/services/wrapper/WrappingObject.adoc    |   1 -
 .../services/wrapper/control/AsyncControl.adoc     |  93 +++++++++++++++++-
 .../services/wrapper/control/ControlAbstract.adoc  |   1 -
 .../services/wrapper/control/ExceptionHandler.adoc |   1 -
 .../services/wrapper/control/ExecutionMode.adoc    |   1 -
 .../services/wrapper/control/SyncControl.adoc      |  51 +++++++++-
 .../wrapper/events/ActionArgumentEvent.adoc        |   1 -
 .../wrapper/events/ActionInvocationEvent.adoc      |   1 -
 .../wrapper/events/CollectionAddToEvent.adoc       |   1 -
 .../wrapper/events/CollectionMethodEvent.adoc      |   1 -
 .../services/wrapper/events/InteractionEvent.adoc  |   1 -
 .../services/wrapper/events/ParseValueEvent.adoc   |   1 -
 .../wrapper/events/PropertyModifyEvent.adoc        |   1 -
 .../wrapper/listeners/InteractionListener.adoc     |   3 +-
 .../index/applib/services/xactn/TransactionId.adoc |  55 ++++++++++-
 .../applib/services/xactn/TransactionService.adoc  |   3 +-
 .../applib/services/xactn/TransactionState.adoc    |  69 +++++++++----
 .../services/xactn/TransactionalProcessor.adoc     |   3 +-
 .../index/applib/services/xml/XmlService.adoc      |   3 +-
 .../services/xmlsnapshot/XmlSnapshotService.adoc   |   9 +-
 .../xmlsnapshot/XmlSnapshotService~Snapshot.adoc   |   1 -
 .../XmlSnapshotService~Snapshot~Builder.adoc       |   1 -
 .../snapshot/SnapshottableWithInclusions.adoc      |   1 -
 .../index/applib/spec/AbstractSpecification.adoc   |   1 -
 .../index/applib/spec/AbstractSpecification2.adoc  |   1 -
 .../pages/index/applib/spec/Specification.adoc     |   1 -
 .../pages/index/applib/spec/Specification2.adoc    |   1 -
 .../pages/index/applib/util/ReasonBuffer.adoc      |   1 -
 .../pages/index/applib/util/ReasonBuffer2.adoc     |   1 -
 .../pages/index/applib/util/TitleBuffer.adoc       |   1 -
 .../applib/util/schema/InteractionDtoUtils.adoc    |   1 -
 .../generated/pages/index/applib/value/Blob.adoc   |   1 -
 .../generated/pages/index/applib/value/Clob.adoc   |   1 -
 .../generated/pages/index/applib/value/Markup.adoc |   1 -
 .../pages/index/commons/collections/Can.adoc       |   1 -
 .../index/commons/collections/Cardinality.adoc     |   1 -
 .../pages/index/commons/having/HasUniqueId.adoc    |   1 -
 .../pages/index/commons/having/HasUsername.adoc    |   1 -
 .../interaction/session/InteractionFactory.adoc    | 109 +++++++++++++++++++++
 .../transaction/TransactionServiceSpring.adoc      |   1 -
 .../changetracking/EntityChangeTrackerDefault.adoc |   1 -
 .../events/TransactionAfterCompletionEvent.adoc    |   1 -
 .../impl/IsisModuleExtCommandLogImpl.adoc          |   1 -
 .../impl/mixins/HasUniqueId_command.adoc           |   1 -
 .../primary/restapi/CommandRetrievalService.adoc   |   1 -
 .../primary/ui/CommandReplayOnPrimaryService.adoc  |   1 -
 .../secondary/analyser/CommandReplayAnalyser.adoc  |   1 -
 .../analysis/CommandReplayAnalysisService.adoc     |   1 -
 .../secondary/clock/TickingClockService.adoc       |   1 -
 .../secondary/fetch/CommandFetcher.adoc            |   1 -
 .../spi/ReplayCommandExecutionController.adoc      |   1 -
 .../fullcalendar/applib/CalendarEventable.adoc     |   1 -
 .../fullcalendar/applib/Calendarable.adoc          |   1 -
 .../quartz/context/JobExecutionData.adoc           |   1 -
 .../extensions/restclient/ResponseDigest.adoc      |   1 -
 .../extensions/secman/api/SecmanConfiguration.adoc |   1 -
 .../api/permission/ApplicationPermission.adoc      |   1 -
 .../api/permission/ApplicationPermissionMode.adoc  |   1 -
 .../ApplicationPermissionRepository.adoc           |   1 -
 .../api/permission/ApplicationPermissionRule.adoc  |   1 -
 .../permission/PermissionsEvaluationService.adoc   |   1 -
 .../secman/api/role/ApplicationRole.adoc           |   1 -
 .../secman/api/role/ApplicationRoleRepository.adoc |   1 -
 .../api/tenancy/ApplicationTenancyEvaluator.adoc   |   1 -
 .../api/tenancy/ApplicationTenancyRepository.adoc  |   1 -
 .../secman/api/user/ApplicationUser.adoc           |   1 -
 .../secman/api/user/ApplicationUserRepository.adoc |   1 -
 .../shiro/IsisModuleExtSecmanShiroRealm.adoc       |   1 -
 .../shirorealmldap/realm/impl/IsisLdapRealm.adoc   |   1 -
 .../jdo/applib/services/JdoSupportService.adoc     |   1 -
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.adoc  |   1 -
 .../changetracking/JdoLifecycleListener.adoc       |   1 -
 .../jpa/applib/services/JpaSupportService.adoc     |   1 -
 .../shiro/authorization/AuthorizorShiro.adoc       |   1 -
 .../index/subdomains/base/applib/Chained.adoc      |   1 -
 .../applib/services/calendar/CalendarService.adoc  |   1 -
 .../subdomains/base/applib/utils/TitleBuilder.adoc |   1 -
 .../base/applib/valuetypes/AbstractInterval.adoc   |   1 -
 .../base/applib/valuetypes/LocalDateInterval.adoc  |   1 -
 .../subdomains/base/applib/valuetypes/VT.adoc      |   1 -
 .../subdomains/base/applib/with/WithInterval.adoc  |   1 -
 .../base/applib/with/WithIntervalContiguous.adoc   |   1 -
 .../subdomains/excel/applib/dom/ExcelService.adoc  |   1 -
 .../subdomains/excel/applib/dom/WorksheetSpec.adoc |   1 -
 .../excel/applib/dom/util/ExcelServiceImpl.adoc    |   1 -
 .../subdomains/excel/applib/dom/util/Mode.adoc     |   1 -
 .../excel/applib/dom/util/SheetPivoter.adoc        |   1 -
 .../subdomains/excel/testing/ExcelFixture2.adoc    |   1 -
 .../testing/fakedata/applib/services/Booleans.adoc |   1 -
 .../fakedata/applib/services/Collections.adoc      |   1 -
 .../fakedata/applib/services/FakeDataService.adoc  |   1 -
 .../integtestsupport/applib/ThrowableMatchers.adoc |   1 -
 .../applib/swagger/SwaggerExporter.adoc            |   6 +-
 .../applib/validate/DomainModelValidator.adoc      |   1 -
 .../core/comparable/ComparableContractTester.adoc  |   1 -
 .../unittestsupport/applib/core/files/Files.adoc   |   1 -
 .../applib/core/jaxb/JaxbMatchers.adoc             |   1 -
 .../applib/core/jmocking/Imposterisers.adoc        |   1 -
 .../core/jmocking/InjectIntoJMockAction.adoc       |   1 -
 .../applib/core/jmocking/JUnitRuleMockery2.adoc    |   1 -
 .../core/soap/SoapEndpointPublishingRule.adoc      |   1 -
 .../applib/core/soap/SoapEndpointSpec.adoc         |   1 -
 .../applib/core/utils/IndentPrinter.adoc           |   1 -
 .../markdown/applib/value/Converter.adoc           |   1 -
 .../restfulobjects/applib/JsonRepresentation.adoc  |   1 -
 .../restfulobjects/applib/LinkRepresentation.adoc  |   1 -
 .../index/viewer/restfulobjects/applib/Rel.adoc    |   1 -
 .../restfulobjects/applib/RelDefinition.adoc       |   1 -
 .../restfulobjects/applib/RepresentationType.adoc  |   1 -
 .../restfulobjects/applib/RestfulResponse.adoc     |   1 -
 .../DomainObjectMemberRepresentation.adoc          |   1 -
 .../domainobjects/DomainObjectRepresentation.adoc  |   1 -
 .../domainobjects/DomainServiceResource.adoc       |   1 -
 .../applib/homepage/HomePageResource.adoc          |   1 -
 .../applib/menubars/MenuBarsResource.adoc          |   1 -
 .../restfulobjects/applib/user/UserResource.adoc   |   1 -
 .../restfulobjects/applib/util/JsonMapper.adoc     |   1 -
 .../restfulobjects/applib/util/JsonNodeUtils.adoc  |   1 -
 .../restfulobjects/applib/util/MediaTypes.adoc     |   1 -
 .../RepresentationServiceContentNegotiator.adoc    |   1 -
 ...entNegotiationServiceForRestfulObjectsV1_0.adoc |   1 -
 .../ContentNegotiationServiceOrgApacheIsisV2.adoc  |   1 -
 .../ContentNegotiationServiceXRoDomainType.adoc    |   1 -
 .../service/swagger/SwaggerServiceMenu.adoc        |   6 +-
 .../modules/generated/pages/system-overview.adoc   |  31 +++---
 .../services/metamodel/MetaModelService.java       |   3 -
 core/pom.xml                                       |   4 +-
 examples/demo/vaadin/pom.xml                       |   2 +-
 incubator/viewers/vaadin/ui/pom.xml                |   2 +-
 .../publishing/jdo/JdoExecutionPublishingTest.java |   2 +-
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java |   4 +-
 .../org/apache/isis/tooling/j2adoc/J2AdocUnit.java |   5 +-
 .../isis/tooling/j2adoc/format/UnitFormatter.java  |  13 ++-
 .../j2adoc/format/UnitFormatterAbstract.java       |  28 +++++-
 .../isis/tooling/j2adoc/test/J2AdocTest.java       |   5 +-
 tooling/pom.xml                                    |   2 +-
 valuetypes/asciidoc/pom.xml                        |   2 +-
 288 files changed, 879 insertions(+), 399 deletions(-)
 create mode 100644 antora/components/system/modules/generated/pages/index/applib/services/i18n/Mode.adoc
 copy antora/components/system/modules/generated/pages/index/applib/{annotation/MinLength.adoc => services/registry/InstanceByPriorityComparator.adoc} (77%)
 copy antora/components/system/modules/generated/pages/index/{commons/collections/Cardinality.adoc => applib/services/swagger/Format.adoc} (52%)
 create mode 100644 antora/components/system/modules/generated/pages/index/applib/services/swagger/Visibility.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/core/interaction/session/InteractionFactory.adoc


[isis] 01/01: ISIS-2444: adds in tooling support to detect and include hook files

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 cc3ed740674ba1be91ac333d45db1a38e0c49b4c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Feb 16 08:58:48 2021 +0000

    ISIS-2444: adds in tooling support to detect and include hook files
---
 .../generated/pages/index/applib/Identifier.adoc   |   1 -
 .../index/applib/RecreatableDomainObject.adoc      |   1 -
 .../generated/pages/index/applib/ViewModel.adoc    |   1 -
 .../index/applib/adapters/DefaultsProvider.adoc    |   1 -
 .../index/applib/adapters/EncoderDecoder.adoc      |   1 -
 .../pages/index/applib/adapters/Parser.adoc        |   1 -
 .../applib/adapters/ValueSemanticsProvider.adoc    |   1 -
 .../pages/index/applib/annotation/Action.adoc      |   1 -
 .../index/applib/annotation/ActionLayout.adoc      |   1 -
 .../index/applib/annotation/BookmarkPolicy.adoc    |   1 -
 .../pages/index/applib/annotation/Collection.adoc  |   1 -
 .../index/applib/annotation/CollectionLayout.adoc  |   1 -
 .../pages/index/applib/annotation/Defaulted.adoc   |   1 -
 .../index/applib/annotation/DomainObject.adoc      |   1 -
 .../applib/annotation/DomainObjectLayout.adoc      |   1 -
 .../index/applib/annotation/DomainService.adoc     |   1 -
 .../applib/annotation/DomainServiceLayout.adoc     |   1 -
 .../pages/index/applib/annotation/Editing.adoc     |   1 -
 .../pages/index/applib/annotation/Facets.adoc      |   1 -
 .../index/applib/annotation/InteractionScope.adoc  |   2 +-
 .../index/applib/annotation/LabelPosition.adoc     |   1 -
 .../pages/index/applib/annotation/MemberOrder.adoc |   1 -
 .../pages/index/applib/annotation/Nature.adoc      |   1 -
 .../index/applib/annotation/NatureOfService.adoc   |   1 -
 .../pages/index/applib/annotation/Optionality.adoc |   1 -
 .../index/applib/annotation/OrderPrecedence.adoc   |   1 -
 .../pages/index/applib/annotation/Parameter.adoc   |   1 -
 .../index/applib/annotation/ParameterLayout.adoc   |   1 -
 .../pages/index/applib/annotation/Projecting.adoc  |   1 -
 .../pages/index/applib/annotation/PromptStyle.adoc |   1 -
 .../pages/index/applib/annotation/Property.adoc    |   1 -
 .../index/applib/annotation/PropertyLayout.adoc    |   1 -
 .../pages/index/applib/annotation/Publishing.adoc  |   1 -
 .../pages/index/applib/annotation/Redirect.adoc    |   1 -
 .../pages/index/applib/annotation/RenderDay.adoc   |   1 -
 .../pages/index/applib/annotation/Repainting.adoc  |   1 -
 .../pages/index/applib/annotation/SemanticsOf.adoc |   1 -
 .../pages/index/applib/annotation/Snapshot.adoc    |   1 -
 .../pages/index/applib/annotation/Title.adoc       |   1 -
 .../pages/index/applib/annotation/Value.adoc       |   1 -
 .../pages/index/applib/annotation/Where.adoc       |   1 -
 .../client/RepresentationTypeSimplifiedV2.adoc     |   1 -
 .../pages/index/applib/client/SuppressionType.adoc |   1 -
 .../pages/index/applib/clock/VirtualClock.adoc     |   1 -
 .../pages/index/applib/events/EventObjectBase.adoc |   1 -
 .../applib/events/domain/AbstractDomainEvent.adoc  |   1 -
 .../applib/events/domain/ActionDomainEvent.adoc    |   1 -
 .../events/domain/CollectionDomainEvent.adoc       |   1 -
 .../applib/events/domain/PropertyDomainEvent.adoc  |   1 -
 .../index/applib/events/ui/AbstractUiEvent.adoc    |   1 -
 .../index/applib/events/ui/CssClassUiEvent.adoc    |   1 -
 .../pages/index/applib/events/ui/IconUiEvent.adoc  |   1 -
 .../index/applib/events/ui/LayoutUiEvent.adoc      |   1 -
 .../pages/index/applib/events/ui/TitleUiEvent.adoc |   1 -
 .../applib/exceptions/TranslatableException.adoc   |   1 -
 .../pages/index/applib/graph/tree/TreeAdapter.adoc |   1 -
 .../pages/index/applib/graph/tree/TreeNode.adoc    |   1 -
 .../pages/index/applib/graph/tree/TreePath.adoc    |   1 -
 .../applib/layout/component/ActionLayoutData.adoc  |   1 -
 .../layout/component/CollectionLayoutData.adoc     |   1 -
 .../layout/component/DomainObjectLayoutData.adoc   |   1 -
 .../index/applib/layout/component/FieldSet.adoc    |   1 -
 .../layout/component/PropertyLayoutData.adoc       |   1 -
 .../layout/component/ServiceActionLayoutData.adoc  |   1 -
 .../applib/layout/grid/bootstrap3/BS3Col.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3Element.adoc  |   1 -
 .../layout/grid/bootstrap3/BS3ElementAbstract.adoc |   1 -
 .../applib/layout/grid/bootstrap3/BS3Grid.adoc     |   1 -
 .../applib/layout/grid/bootstrap3/BS3Row.adoc      |   1 -
 .../layout/grid/bootstrap3/BS3RowContent.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3Tab.adoc      |   1 -
 .../applib/layout/grid/bootstrap3/BS3TabGroup.adoc |   1 -
 .../applib/layout/grid/bootstrap3/HasCssId.adoc    |   1 -
 .../applib/layout/menubars/bootstrap3/BS3Menu.adoc |   1 -
 .../layout/menubars/bootstrap3/BS3MenuBars.adoc    |   1 -
 .../generated/pages/index/applib/query/Query.adoc  |   1 -
 .../pages/index/applib/query/QueryRange.adoc       |   1 -
 .../index/applib/services/DomainChangeRecord.adoc  |   1 -
 .../index/applib/services/bookmark/Bookmark.adoc   |   1 -
 .../applib/services/bookmark/BookmarkService.adoc  |   1 -
 .../services/bookmarkui/BookmarkUiService.adoc     |   1 -
 .../index/applib/services/command/Command.adoc     |   1 -
 .../services/command/CommandExecutorService.adoc   |   1 -
 .../ContentMappingServiceForCommandsDto.adoc       |   1 -
 .../commanddto/processor/CommandDtoProcessor.adoc  |   1 -
 .../processor/spi/CommandDtoProcessorService.adoc  |   1 -
 .../confview/ConfigurationViewService.adoc         |   1 -
 .../services/conmap/ContentMappingService.adoc     |   1 -
 .../index/applib/services/email/EmailService.adoc  |   1 -
 .../index/applib/services/error/SimpleTicket.adoc  |   1 -
 .../pages/index/applib/services/error/Ticket.adoc  |   1 -
 .../applib/services/eventbus/EventBusService.adoc  |   1 -
 .../index/applib/services/exceprecog/Category.adoc |   1 -
 .../services/exceprecog/ExceptionRecognizer.adoc   |   1 -
 .../exceprecog/ExceptionRecognizerService.adoc     |   1 -
 .../applib/services/exceprecog/Recognition.adoc    |   1 -
 .../applib/services/factory/FactoryService.adoc    |   1 -
 .../applib/services/grid/GridLoaderService.adoc    |   1 -
 .../index/applib/services/grid/GridService.adoc    |   1 -
 .../applib/services/grid/GridSystemService.adoc    |   1 -
 .../index/applib/services/hint/HintStore.adoc      |   1 -
 .../index/applib/services/i18n/LocaleProvider.adoc |   1 -
 .../pages/index/applib/services/i18n/Mode.adoc     |  52 ++++++++++
 .../applib/services/i18n/TranslatableString.adoc   |   1 -
 .../applib/services/i18n/TranslationService.adoc   |   5 +-
 .../applib/services/i18n/TranslationsResolver.adoc |  20 +++-
 .../index/applib/services/iactn/Execution.adoc     |   1 -
 .../applib/services/iactn/ExecutionContext.adoc    |   1 -
 .../index/applib/services/iactn/Interaction.adoc   |   1 -
 .../applib/services/iactn/InteractionContext.adoc  |   1 -
 .../index/applib/services/iactn/Sequence.adoc      |   1 -
 .../applib/services/inject/ServiceInjector.adoc    |  30 +++++-
 .../index/applib/services/jaxb/JaxbService.adoc    |   1 -
 .../applib/services/layout/LayoutService.adoc      |   1 -
 .../pages/index/applib/services/layout/Style.adoc  |   1 -
 .../applib/services/linking/DeepLinkService.adoc   |   1 -
 .../services/menu/MenuBarsLoaderService.adoc       |   1 -
 .../applib/services/menu/MenuBarsService.adoc      |   1 -
 .../applib/services/message/MessageService.adoc    |   1 -
 .../index/applib/services/metamodel/BeanSort.adoc  |   1 -
 .../index/applib/services/metamodel/Config.adoc    |   1 -
 .../services/metamodel/MetaModelService.adoc       |   1 -
 .../applib/services/metrics/MetricsService.adoc    |   1 -
 .../services/publishing/spi/CommandSubscriber.adoc |   1 -
 .../services/publishing/spi/EntityChanges.adoc     |   1 -
 .../publishing/spi/EntityChangesSubscriber.adoc    |   1 -
 .../spi/EntityPropertyChangeSubscriber.adoc        |   1 -
 .../publishing/spi/ExecutionSubscriber.adoc        |   1 -
 .../queryresultscache/QueryResultsCache.adoc       |   1 -
 .../QueryResultsCacheControl.adoc                  |   1 -
 .../registry/InstanceByPriorityComparator.adoc}    |  16 ++-
 .../applib/services/registry/ServiceRegistry.adoc  |  26 ++++-
 .../applib/services/repository/EntityState.adoc    |   1 -
 .../services/repository/RepositoryService.adoc     |   1 -
 .../applib/services/routing/RoutingService.adoc    |  43 +++++++-
 .../applib/services/scratchpad/Scratchpad.adoc     |   7 +-
 .../services/session/SessionLoggingService.adoc    |  20 +++-
 .../index/applib/services/sudo/SudoService.adoc    |  17 ++--
 .../swagger/Format.adoc}                           |  43 ++++----
 .../applib/services/swagger/SwaggerService.adoc    |  18 +++-
 .../index/applib/services/swagger/Visibility.adoc  |  55 +++++++++++
 .../services/tablecol/TableColumnOrderService.adoc |  36 ++++++-
 .../index/applib/services/title/TitleService.adoc  |  15 +--
 .../services/urlencoding/UrlEncodingService.adoc   |  32 +++++-
 ...rlEncodingServiceUsingBaseEncodingAbstract.adoc |   2 +
 .../index/applib/services/user/RoleMemento.adoc    |   7 +-
 .../index/applib/services/user/UserService.adoc    |   3 +-
 .../services/userprof/UserProfileService.adoc      |  11 +--
 .../services/userreg/EmailNotificationService.adoc |   1 -
 .../services/userreg/UserRegistrationService.adoc  |  56 +++++++++--
 .../applib/services/wrapper/WrapperFactory.adoc    |  13 +--
 .../applib/services/wrapper/WrappingObject.adoc    |   1 -
 .../services/wrapper/control/AsyncControl.adoc     |  93 +++++++++++++++++-
 .../services/wrapper/control/ControlAbstract.adoc  |   1 -
 .../services/wrapper/control/ExceptionHandler.adoc |   1 -
 .../services/wrapper/control/ExecutionMode.adoc    |   1 -
 .../services/wrapper/control/SyncControl.adoc      |  51 +++++++++-
 .../wrapper/events/ActionArgumentEvent.adoc        |   1 -
 .../wrapper/events/ActionInvocationEvent.adoc      |   1 -
 .../wrapper/events/CollectionAddToEvent.adoc       |   1 -
 .../wrapper/events/CollectionMethodEvent.adoc      |   1 -
 .../services/wrapper/events/InteractionEvent.adoc  |   1 -
 .../services/wrapper/events/ParseValueEvent.adoc   |   1 -
 .../wrapper/events/PropertyModifyEvent.adoc        |   1 -
 .../wrapper/listeners/InteractionListener.adoc     |   3 +-
 .../index/applib/services/xactn/TransactionId.adoc |  55 ++++++++++-
 .../applib/services/xactn/TransactionService.adoc  |   3 +-
 .../applib/services/xactn/TransactionState.adoc    |  69 +++++++++----
 .../services/xactn/TransactionalProcessor.adoc     |   3 +-
 .../index/applib/services/xml/XmlService.adoc      |   3 +-
 .../services/xmlsnapshot/XmlSnapshotService.adoc   |   9 +-
 .../xmlsnapshot/XmlSnapshotService~Snapshot.adoc   |   1 -
 .../XmlSnapshotService~Snapshot~Builder.adoc       |   1 -
 .../snapshot/SnapshottableWithInclusions.adoc      |   1 -
 .../index/applib/spec/AbstractSpecification.adoc   |   1 -
 .../index/applib/spec/AbstractSpecification2.adoc  |   1 -
 .../pages/index/applib/spec/Specification.adoc     |   1 -
 .../pages/index/applib/spec/Specification2.adoc    |   1 -
 .../pages/index/applib/util/ReasonBuffer.adoc      |   1 -
 .../pages/index/applib/util/ReasonBuffer2.adoc     |   1 -
 .../pages/index/applib/util/TitleBuffer.adoc       |   1 -
 .../applib/util/schema/InteractionDtoUtils.adoc    |   1 -
 .../generated/pages/index/applib/value/Blob.adoc   |   1 -
 .../generated/pages/index/applib/value/Clob.adoc   |   1 -
 .../generated/pages/index/applib/value/Markup.adoc |   1 -
 .../pages/index/commons/collections/Can.adoc       |   1 -
 .../index/commons/collections/Cardinality.adoc     |   1 -
 .../pages/index/commons/having/HasUniqueId.adoc    |   1 -
 .../pages/index/commons/having/HasUsername.adoc    |   1 -
 .../interaction/session/InteractionFactory.adoc    | 109 +++++++++++++++++++++
 .../transaction/TransactionServiceSpring.adoc      |   1 -
 .../changetracking/EntityChangeTrackerDefault.adoc |   1 -
 .../events/TransactionAfterCompletionEvent.adoc    |   1 -
 .../impl/IsisModuleExtCommandLogImpl.adoc          |   1 -
 .../impl/mixins/HasUniqueId_command.adoc           |   1 -
 .../primary/restapi/CommandRetrievalService.adoc   |   1 -
 .../primary/ui/CommandReplayOnPrimaryService.adoc  |   1 -
 .../secondary/analyser/CommandReplayAnalyser.adoc  |   1 -
 .../analysis/CommandReplayAnalysisService.adoc     |   1 -
 .../secondary/clock/TickingClockService.adoc       |   1 -
 .../secondary/fetch/CommandFetcher.adoc            |   1 -
 .../spi/ReplayCommandExecutionController.adoc      |   1 -
 .../fullcalendar/applib/CalendarEventable.adoc     |   1 -
 .../fullcalendar/applib/Calendarable.adoc          |   1 -
 .../quartz/context/JobExecutionData.adoc           |   1 -
 .../extensions/restclient/ResponseDigest.adoc      |   1 -
 .../extensions/secman/api/SecmanConfiguration.adoc |   1 -
 .../api/permission/ApplicationPermission.adoc      |   1 -
 .../api/permission/ApplicationPermissionMode.adoc  |   1 -
 .../ApplicationPermissionRepository.adoc           |   1 -
 .../api/permission/ApplicationPermissionRule.adoc  |   1 -
 .../permission/PermissionsEvaluationService.adoc   |   1 -
 .../secman/api/role/ApplicationRole.adoc           |   1 -
 .../secman/api/role/ApplicationRoleRepository.adoc |   1 -
 .../api/tenancy/ApplicationTenancyEvaluator.adoc   |   1 -
 .../api/tenancy/ApplicationTenancyRepository.adoc  |   1 -
 .../secman/api/user/ApplicationUser.adoc           |   1 -
 .../secman/api/user/ApplicationUserRepository.adoc |   1 -
 .../shiro/IsisModuleExtSecmanShiroRealm.adoc       |   1 -
 .../shirorealmldap/realm/impl/IsisLdapRealm.adoc   |   1 -
 .../jdo/applib/services/JdoSupportService.adoc     |   1 -
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.adoc  |   1 -
 .../changetracking/JdoLifecycleListener.adoc       |   1 -
 .../jpa/applib/services/JpaSupportService.adoc     |   1 -
 .../shiro/authorization/AuthorizorShiro.adoc       |   1 -
 .../index/subdomains/base/applib/Chained.adoc      |   1 -
 .../applib/services/calendar/CalendarService.adoc  |   1 -
 .../subdomains/base/applib/utils/TitleBuilder.adoc |   1 -
 .../base/applib/valuetypes/AbstractInterval.adoc   |   1 -
 .../base/applib/valuetypes/LocalDateInterval.adoc  |   1 -
 .../subdomains/base/applib/valuetypes/VT.adoc      |   1 -
 .../subdomains/base/applib/with/WithInterval.adoc  |   1 -
 .../base/applib/with/WithIntervalContiguous.adoc   |   1 -
 .../subdomains/excel/applib/dom/ExcelService.adoc  |   1 -
 .../subdomains/excel/applib/dom/WorksheetSpec.adoc |   1 -
 .../excel/applib/dom/util/ExcelServiceImpl.adoc    |   1 -
 .../subdomains/excel/applib/dom/util/Mode.adoc     |   1 -
 .../excel/applib/dom/util/SheetPivoter.adoc        |   1 -
 .../subdomains/excel/testing/ExcelFixture2.adoc    |   1 -
 .../testing/fakedata/applib/services/Booleans.adoc |   1 -
 .../fakedata/applib/services/Collections.adoc      |   1 -
 .../fakedata/applib/services/FakeDataService.adoc  |   1 -
 .../integtestsupport/applib/ThrowableMatchers.adoc |   1 -
 .../applib/swagger/SwaggerExporter.adoc            |   6 +-
 .../applib/validate/DomainModelValidator.adoc      |   1 -
 .../core/comparable/ComparableContractTester.adoc  |   1 -
 .../unittestsupport/applib/core/files/Files.adoc   |   1 -
 .../applib/core/jaxb/JaxbMatchers.adoc             |   1 -
 .../applib/core/jmocking/Imposterisers.adoc        |   1 -
 .../core/jmocking/InjectIntoJMockAction.adoc       |   1 -
 .../applib/core/jmocking/JUnitRuleMockery2.adoc    |   1 -
 .../core/soap/SoapEndpointPublishingRule.adoc      |   1 -
 .../applib/core/soap/SoapEndpointSpec.adoc         |   1 -
 .../applib/core/utils/IndentPrinter.adoc           |   1 -
 .../markdown/applib/value/Converter.adoc           |   1 -
 .../restfulobjects/applib/JsonRepresentation.adoc  |   1 -
 .../restfulobjects/applib/LinkRepresentation.adoc  |   1 -
 .../index/viewer/restfulobjects/applib/Rel.adoc    |   1 -
 .../restfulobjects/applib/RelDefinition.adoc       |   1 -
 .../restfulobjects/applib/RepresentationType.adoc  |   1 -
 .../restfulobjects/applib/RestfulResponse.adoc     |   1 -
 .../DomainObjectMemberRepresentation.adoc          |   1 -
 .../domainobjects/DomainObjectRepresentation.adoc  |   1 -
 .../domainobjects/DomainServiceResource.adoc       |   1 -
 .../applib/homepage/HomePageResource.adoc          |   1 -
 .../applib/menubars/MenuBarsResource.adoc          |   1 -
 .../restfulobjects/applib/user/UserResource.adoc   |   1 -
 .../restfulobjects/applib/util/JsonMapper.adoc     |   1 -
 .../restfulobjects/applib/util/JsonNodeUtils.adoc  |   1 -
 .../restfulobjects/applib/util/MediaTypes.adoc     |   1 -
 .../RepresentationServiceContentNegotiator.adoc    |   1 -
 ...entNegotiationServiceForRestfulObjectsV1_0.adoc |   1 -
 .../ContentNegotiationServiceOrgApacheIsisV2.adoc  |   1 -
 .../ContentNegotiationServiceXRoDomainType.adoc    |   1 -
 .../service/swagger/SwaggerServiceMenu.adoc        |   6 +-
 .../modules/generated/pages/system-overview.adoc   |  31 +++---
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java |   4 +-
 .../org/apache/isis/tooling/j2adoc/J2AdocUnit.java |   5 +-
 .../isis/tooling/j2adoc/format/UnitFormatter.java  |  13 ++-
 .../j2adoc/format/UnitFormatterAbstract.java       |  28 +++++-
 .../isis/tooling/j2adoc/test/J2AdocTest.java       |   5 +-
 281 files changed, 873 insertions(+), 392 deletions(-)

diff --git a/antora/components/system/modules/generated/pages/index/applib/Identifier.adoc b/antora/components/system/modules/generated/pages/index/applib/Identifier.adoc
index 3b7ad12..75ed691 100644
--- a/antora/components/system/modules/generated/pages/index/applib/Identifier.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/Identifier.adoc
@@ -79,4 +79,3 @@ REVIEW: why not just compare the _#toString()_ representations?
 === fromIdentityString(String)
 
 Factory method.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/RecreatableDomainObject.adoc b/antora/components/system/modules/generated/pages/index/applib/RecreatableDomainObject.adoc
index a17bcb1..36a8bdb 100644
--- a/antora/components/system/modules/generated/pages/index/applib/RecreatableDomainObject.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/RecreatableDomainObject.adoc
@@ -41,4 +41,3 @@ This method is called by the framework in order that the view model may be recre
 === __isis_recreate(String)
 
 Used to recreate a recreatable object with a memento obtained from _#__isis_recreate(String)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/ViewModel.adoc b/antora/components/system/modules/generated/pages/index/applib/ViewModel.adoc
index 37f590d..c143231 100644
--- a/antora/components/system/modules/generated/pages/index/applib/ViewModel.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/ViewModel.adoc
@@ -41,4 +41,3 @@ This method is called by the framework in order that the view model may be recre
 === viewModelInit(String)
 
 Used to re-initialize a view model with a memento obtained from _#viewModelMemento()_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/adapters/DefaultsProvider.adoc b/antora/components/system/modules/generated/pages/index/applib/adapters/DefaultsProvider.adoc
index 8906639..34bafac 100644
--- a/antora/components/system/modules/generated/pages/index/applib/adapters/DefaultsProvider.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/adapters/DefaultsProvider.adoc
@@ -30,4 +30,3 @@ The default, if any (as a pojo).
 === getDefaultValue()
 
 The default, if any (as a pojo).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/adapters/EncoderDecoder.adoc b/antora/components/system/modules/generated/pages/index/applib/adapters/EncoderDecoder.adoc
index 2454123..7688223 100644
--- a/antora/components/system/modules/generated/pages/index/applib/adapters/EncoderDecoder.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/adapters/EncoderDecoder.adoc
@@ -45,4 +45,3 @@ Even if the class is self-encodeable, note that this method is always called on
 Converts an encoded string to an instance of the object.
 
 Note that here the implementing class is acting as a factory for itself.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/adapters/Parser.adoc b/antora/components/system/modules/generated/pages/index/applib/adapters/Parser.adoc
index 5ddb74a..81301ed 100644
--- a/antora/components/system/modules/generated/pages/index/applib/adapters/Parser.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/adapters/Parser.adoc
@@ -99,4 +99,3 @@ The idea here is that the viewer can display a parseable title for an existing o
 === maxLength()
 
 The max length of objects that can be parsed (if any). A return type of -1 corresponds to unlimited.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/adapters/ValueSemanticsProvider.adoc b/antora/components/system/modules/generated/pages/index/applib/adapters/ValueSemanticsProvider.adoc
index 5bd3232..bbbd564 100644
--- a/antora/components/system/modules/generated/pages/index/applib/adapters/ValueSemanticsProvider.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/adapters/ValueSemanticsProvider.adoc
@@ -52,4 +52,3 @@ The xref:system:generated:index/applib/adapters/EncoderDecoder.adoc[EncoderDecod
 The xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider] , if any.
 
 If not `null` , implies that the value has (or may have) a default.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
index 1959081..035cbe3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
@@ -173,4 +173,3 @@ The type-of the elements returned by the action.
 For downloading xref:system:generated:index/applib/value/Blob.adoc[Blob] or xref:system:generated:index/applib/value/Clob.adoc[Clob] , optionally restrict the files accepted (eg `.xslx` ).
 
 The value should be of the form "file_extension|audio/*|video/*|image/*|media_type".
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/ActionLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/ActionLayout.adoc
index 383e583..c856807 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/ActionLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/ActionLayout.adoc
@@ -129,4 +129,3 @@ How this parameters for this action are prompted, either _PromptStyle#DIALOG dia
 === redirectPolicy
 
 If the action returns its target, then determines whether to update the page or instead to redirect (forcing a re-rendering of a new page).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/BookmarkPolicy.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/BookmarkPolicy.adoc
index 6c91ebb..3d6ff38 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/BookmarkPolicy.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/BookmarkPolicy.adoc
@@ -55,4 +55,3 @@ An unimportant entity that should never be bookmarked.
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Collection.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Collection.adoc
index 54b0f69..9038cf3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Collection.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Collection.adoc
@@ -73,4 +73,3 @@ Indicates when the collection is not visible to the user.
 === typeOf
 
 The type-of the elements held within the collection.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/CollectionLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/CollectionLayout.adoc
index 11d7d8c..19ded48 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/CollectionLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/CollectionLayout.adoc
@@ -116,4 +116,3 @@ Whenever there is a collection of type _java.util.SortedSet_ , the domain entity
 However, in some circumstances the ordering of collection may be different to the entity's natural ordering. For example, the entity may represent an interval of time sorted by its _startDate_ ascending, but the collection may wish to sort by _startDate_ .
 
 The purpose of this annotation is to provide a _java.util.Comparator_ such that the collection may be sorted in an order more suitable to the context.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Defaulted.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Defaulted.adoc
index 6fc04f2..a483701 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Defaulted.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Defaulted.adoc
@@ -43,4 +43,3 @@ Implementation note: the default value provided here is simply an empty string b
 As per _#defaultsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
 
 Implementation note: the default value provided here is simply the xref:system:generated:index/applib/annotation/Defaulted.adoc[Defaulted] 's own class, because `null` is not a valid default.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObject.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObject.adoc
index 7161a5c..72415ed 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObject.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObject.adoc
@@ -291,4 +291,3 @@ public class Order {
 ----
 
 This subclass must provide a no-arg constructor; the fields are set reflectively. It must also use `Object` as its generic type. This is to allow mixins to also emit the same event.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObjectLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObjectLayout.adoc
index a13bb64..8339356 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObjectLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainObjectLayout.adoc
@@ -159,4 +159,3 @@ This subclass must provide a no-arg constructor; the fields are set reflectively
 Which subclass of xref:system:generated:index/applib/events/ui/TitleUiEvent.adoc[TitleUiEvent] should be used to obtain a title.
 
 This subclass must provide a no-arg constructor; the fields are set reflectively.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainService.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainService.adoc
index 90da4bb..6130fde 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainService.adoc
@@ -39,4 +39,3 @@ The nature of this service, eg for menus, contributed actions, repository.
 Provides the (first part of the) unique identifier (OID) for the service (the instanceId is always "1").
 
 If not specified then either the optional "getId()" is used, otherwise the class' name.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainServiceLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainServiceLayout.adoc
index 8797ee9..3a4f9bd 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/DomainServiceLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/DomainServiceLayout.adoc
@@ -37,4 +37,3 @@ The menubar in which the menu that holds this service's actions should reside.
 === named
 
 Name of this class (overriding the name derived from its name in code).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Editing.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Editing.adoc
index d8393e9..6d153d06 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Editing.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Editing.adoc
@@ -59,4 +59,3 @@ Do not allow the properties to be edited, or the collections to be added to/remo
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Facets.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Facets.adoc
index 300c0d1..3b132dc 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Facets.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Facets.adoc
@@ -41,4 +41,3 @@ Either the array provided by this method or by _#facetFactoryClasses()_ should b
 Array of _Class_ s, each indicating a class implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
 
 Either the array provided by this method or by _#facetFactoryNames()_ should be non-empty.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/InteractionScope.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/InteractionScope.adoc
index a90a50e..c459a4d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/InteractionScope.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/InteractionScope.adoc
@@ -1,6 +1,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 [...]
 
-_@InteractionScope_ is a specialization of _Scope @Scope_ for a component whose lifecycle is bound to the current top-level Interaction.
+_@InteractionScope_ is a specialization of _Scope @Scope_ for a component whose lifecycle is bound to the current top-level Interaction, in other words that it is private to the "current user".
 
 Specifically, _@InteractionScope_ is a *composed annotation* that acts as a shortcut for _@Scope("interaction")_ .
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/LabelPosition.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/LabelPosition.adoc
index 99870f7..84d6e80 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/LabelPosition.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/LabelPosition.adoc
@@ -39,4 +39,3 @@ Right position of the label for Boolean properties.Not supportedfor now for othe
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/MemberOrder.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/MemberOrder.adoc
index e0770bf..09e0091 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/MemberOrder.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/MemberOrder.adoc
@@ -41,4 +41,3 @@ Groups or associate members with each other.
 === sequence
 
 The order of this member relative to other members in the same group, in Dewey-decimal notation. For collections this is relative to each other (collections aren't grouped).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Nature.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Nature.adoc
index 76dcbb6..df919aa 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Nature.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Nature.adoc
@@ -77,4 +77,3 @@ An object that acts as a mix-in to some other object, contributing behavior and/
 === BEAN
 
 An object that is entirely managed by the underlying IoC container.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/NatureOfService.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/NatureOfService.adoc
index b7a2a0c..346f98b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/NatureOfService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/NatureOfService.adoc
@@ -57,4 +57,3 @@ Whether a service contributes its actions to viewers and to the REST API.
 === isRestOnly()
 
 Whether a service contributes its actions exclusively to the REST API.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Optionality.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Optionality.adoc
index 1b69aa2..a6ab3d3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Optionality.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Optionality.adoc
@@ -63,4 +63,3 @@ This annotation, therefore, is intended to override any objectstore-specific ann
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/OrderPrecedence.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/OrderPrecedence.adoc
index e975ddf..7d4ba51 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/OrderPrecedence.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/OrderPrecedence.adoc
@@ -66,4 +66,3 @@ For framework services that are expected to be overridden by application code, o
 === LAST
 
 For domain services that act as a fallback, and which will typically be overridden.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Parameter.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Parameter.adoc
index 753d8ea..ea0bd34 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Parameter.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Parameter.adoc
@@ -100,4 +100,3 @@ The default value, `0` , means that no flags have been specified.
 === regexPatternReplacement
 
 Replacement text for the pattern in generated error message.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/ParameterLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/ParameterLayout.adoc
index 8e086eb..3b65d14 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/ParameterLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/ParameterLayout.adoc
@@ -116,4 +116,3 @@ Here, the interval of the [1-may-2013,1-jun-2013) would be rendered as the dates
 === typicalLength
 
 The typical entry length of a field, use to determine the optimum width for display
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Projecting.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Projecting.adoc
index b50d6fc..ff1cdae 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Projecting.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Projecting.adoc
@@ -33,4 +33,3 @@ The property holds the underlying domain object of which this (view model) objec
 === NOT_SPECIFIED
 
 The property
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/PromptStyle.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/PromptStyle.adoc
index 0aec48f..87c53bd 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/PromptStyle.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/PromptStyle.adoc
@@ -104,4 +104,3 @@ Note that:
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
index 4c83996..4788668 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
@@ -221,4 +221,3 @@ The default value, `0` , means that no flags have been specified.
 === regexPatternReplacement
 
 Replacement text for the pattern in generated error message.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/PropertyLayout.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/PropertyLayout.adoc
index 731eb55..6f00b57 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/PropertyLayout.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/PropertyLayout.adoc
@@ -169,4 +169,3 @@ Design note: we considered implementing this an "immutable" flag on the xref:sys
 === typicalLength
 
 The typical entry length of a field, use to determine the optimum width for display
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
index 4e96a2e..5acda2a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
@@ -72,4 +72,3 @@ Do *not* publish data triggered by interaction with this object (even if otherwi
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Redirect.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Redirect.adoc
index 3874ef7..58563f8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Redirect.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Redirect.adoc
@@ -48,4 +48,3 @@ Redirect (meaning render a new page) even if the result of the action is the sam
 Don't redirect if the result is the same as the target, instead just update the existing page.
 
 Of course, a redirect is still performed if the result of the action is different from the target.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/RenderDay.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/RenderDay.adoc
index 7a1650e..d467953 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/RenderDay.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/RenderDay.adoc
@@ -36,4 +36,3 @@ Equivalent to `@PropertyLayout(renderAsDayBefore=true)` prior to Isis 2.x
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Repainting.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Repainting.adoc
index ad989bc..7c6f0a9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Repainting.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Repainting.adoc
@@ -36,4 +36,3 @@ Equivalent to `@PropertyLayout(unchanging=true)` prior to Isis 2.x
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/SemanticsOf.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/SemanticsOf.adoc
index ad0f80b..a0340f7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/SemanticsOf.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/SemanticsOf.adoc
@@ -165,4 +165,3 @@ Either of _#SAFE_ or _#SAFE_AND_REQUEST_CACHEABLE_ .
 
 - use _#isSafeInNature()_ instead (avoid any ambiguity).
 ====
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Snapshot.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Snapshot.adoc
index 1207f2f..a65d447 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Snapshot.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Snapshot.adoc
@@ -46,4 +46,3 @@ Property is excluded from any snapshots.
 === NOT_SPECIFIED
 
 Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Title.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Title.adoc
index db08e70..862f040 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Title.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Title.adoc
@@ -59,4 +59,3 @@ The string to append to this property if non-empty.
 === abbreviatedTo
 
 The length to abbreviate this title element to.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Value.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Value.adoc
index 612c80e..a97c2c9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Value.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Value.adoc
@@ -54,4 +54,3 @@ Implementation note: the default value provided here is simply an empty string b
 As per _#semanticsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
 
 Implementation note: the default value provided here is simply the xref:system:generated:index/applib/annotation/Value.adoc[Value] 's own class, because `null` is not a valid default.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Where.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Where.adoc
index d8eb08a..b598141 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Where.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Where.adoc
@@ -161,4 +161,3 @@ Acts as the default no-op value for _PropertyLayout#hidden()_ , _CollectionLayou
 Whether this `Where` is a superset of the context `Where` provided.
 
 For example, _#ALL_TABLES_ includes _#STANDALONE_TABLES_ ; _#ANYWHERE_ includes all others.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/client/RepresentationTypeSimplifiedV2.adoc b/antora/components/system/modules/generated/pages/index/applib/client/RepresentationTypeSimplifiedV2.adoc
index 07af996..58cacc4 100644
--- a/antora/components/system/modules/generated/pages/index/applib/client/RepresentationTypeSimplifiedV2.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/client/RepresentationTypeSimplifiedV2.adoc
@@ -88,4 +88,3 @@ The media type used as content-Type header when a list of values is rendered.
 === VOID
 
 The media type used as content-Type header when a void action result is rendered.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/client/SuppressionType.adoc b/antora/components/system/modules/generated/pages/index/applib/client/SuppressionType.adoc
index 5e04963..a72d822 100644
--- a/antora/components/system/modules/generated/pages/index/applib/client/SuppressionType.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/client/SuppressionType.adoc
@@ -78,4 +78,3 @@ suppress '$$title', title of the domain object
 === ALL
 
 suppress all '$$...' entries
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/clock/VirtualClock.adoc b/antora/components/system/modules/generated/pages/index/applib/clock/VirtualClock.adoc
index 8615094..ed57c07 100644
--- a/antora/components/system/modules/generated/pages/index/applib/clock/VirtualClock.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/clock/VirtualClock.adoc
@@ -165,4 +165,3 @@ please migrate to java.time.*
 ====
 
 Returns the time as a Joda _DateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc b/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc
index 61c9e08..6a75bec 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc
@@ -44,4 +44,3 @@ A one-shot function. Only allowed to be called if a source has not already been
 === toString()
 
 Returns a String representation of this EventObject.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/domain/AbstractDomainEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/domain/AbstractDomainEvent.adoc
index 45bc0b7..104d703 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/domain/AbstractDomainEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/domain/AbstractDomainEvent.adoc
@@ -145,4 +145,3 @@ Obtain user-data, as set by a previous _#getEventPhase() phase_ .
 === put(Object, Object)
 
 Set user-data, for the use of a subsequent _#getEventPhase() phase_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/domain/ActionDomainEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/domain/ActionDomainEvent.adoc
index d7f7e04..24bade5 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/domain/ActionDomainEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/domain/ActionDomainEvent.adoc
@@ -80,4 +80,3 @@ Not API - set by the framework.
 === setMixedIn(Object)
 
 Not API - set by the framework.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/domain/CollectionDomainEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/domain/CollectionDomainEvent.adoc
index a90bceb..f224f54 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/domain/CollectionDomainEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/domain/CollectionDomainEvent.adoc
@@ -47,4 +47,3 @@ Not API, set by the framework.
 === setOf(Of)
 
 Not API; updates from _Of#ACCESS_ to either _Of#ADD_TO_ or _Of#REMOVE_FROM_ when hits the _AbstractDomainEvent.Phase#VALIDATE validation phase_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/domain/PropertyDomainEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/domain/PropertyDomainEvent.adoc
index c0dcf7a..fe19332 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/domain/PropertyDomainEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/domain/PropertyDomainEvent.adoc
@@ -25,4 +25,3 @@ If used then the framework will set state via (non-API) setters.
 If used then the framework will set state via (non-API) setters.
 
 Recommended because it reduces the amount of boilerplate in the domain object classes.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/ui/AbstractUiEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/ui/AbstractUiEvent.adoc
index 0725599..96b50cc 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/ui/AbstractUiEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/ui/AbstractUiEvent.adoc
@@ -45,4 +45,3 @@ Obtain user-data, as set by any other subscribers.
 === put(Object, Object)
 
 Set user-data, for the use of other subscribers.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/ui/CssClassUiEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/ui/CssClassUiEvent.adoc
index cdb047a..5f2048f 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/ui/CssClassUiEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/ui/CssClassUiEvent.adoc
@@ -36,4 +36,3 @@ If used then the framework will set state via (non-API) setters.
 === setCssClass(String)
 
 For subscribers to call to provide a CSS class for this object.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/ui/IconUiEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/ui/IconUiEvent.adoc
index 6561c0b..0f22a1a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/ui/IconUiEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/ui/IconUiEvent.adoc
@@ -49,4 +49,3 @@ The icon name as provided by a subscriber using _#setIconName(String)_ .
 === setIconName(String)
 
 For subscribers to call to provide an icon name for this object.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/ui/LayoutUiEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/ui/LayoutUiEvent.adoc
index ba125d7..557d32b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/ui/LayoutUiEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/ui/LayoutUiEvent.adoc
@@ -38,4 +38,3 @@ Because the _EventObject_ superclass prohibits a null source, a dummy value is t
 === setLayout(String)
 
 For subscribers to call to provide a layout for this object.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/ui/TitleUiEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/events/ui/TitleUiEvent.adoc
index 256ab6f..c0c1ca4 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/ui/TitleUiEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/events/ui/TitleUiEvent.adoc
@@ -49,4 +49,3 @@ For subscribers to call to provide a (non-translated) title for this object.
 === setTranslatableTitle(TranslatableString)
 
 For subscribers to call to provide a translatable (i18n) title for this object.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
index 28f4f55..275165e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
@@ -39,4 +39,3 @@ If returns `null` , then _Exception#getMessage()_ will be used as a fallback. Th
 === getTranslationContext()
 
 The context to use when translating the _#getTranslatableMessage() translatable message_ , as ultimately passed through to _org.apache.isis.applib.services.i18n.TranslationService#translate(String, String)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeAdapter.adoc b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeAdapter.adoc
index 05c7f7b..d8838c8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeAdapter.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeAdapter.adoc
@@ -28,4 +28,3 @@ interface TreeAdapter<T> {
 
 [#childrenOf__T]
 === childrenOf(T)
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeNode.adoc b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeNode.adoc
index c79d517..8128da2 100644
--- a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeNode.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreeNode.adoc
@@ -73,4 +73,3 @@ Convenient shortcut.
 
 [#getTreeAdapterClass__]
 === getTreeAdapterClass()
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreePath.adoc b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreePath.adoc
index 558fd6b..f2ed0a3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreePath.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/graph/tree/TreePath.adoc
@@ -30,4 +30,3 @@ interface TreePath {
 
 [#getParentIfAny__]
 === getParentIfAny()
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/ActionLayoutData.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/ActionLayoutData.adoc
index 120b26b..4520db9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/ActionLayoutData.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/ActionLayoutData.adoc
@@ -92,4 +92,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 The link to access this resource from the REST API (Restful Objects viewer).
 
 Populated by the framework automatically.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/CollectionLayoutData.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/CollectionLayoutData.adoc
index 275aca2..70a8542 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/CollectionLayoutData.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/CollectionLayoutData.adoc
@@ -96,4 +96,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 The link to access this resource from the REST API (Restful Objects viewer).
 
 Populated by the framework automatically.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/DomainObjectLayoutData.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/DomainObjectLayoutData.adoc
index b7b174b..6fa0cb9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/DomainObjectLayoutData.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/DomainObjectLayoutData.adoc
@@ -70,4 +70,3 @@ Set programmatically by framework after reading in from XML.
 The link to access this resource from the REST API (Restful Objects viewer).
 
 Populated by the framework automatically.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/FieldSet.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/FieldSet.adoc
index ee6249e..66b67cd 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/FieldSet.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/FieldSet.adoc
@@ -98,4 +98,3 @@ Set programmatically by framework after reading in from XML.
 === getMetadataError()
 
 For diagnostics; populated by the framework if and only if a metadata error.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/PropertyLayoutData.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/PropertyLayoutData.adoc
index 7c5a8e7..5c9d5f1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/PropertyLayoutData.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/PropertyLayoutData.adoc
@@ -92,4 +92,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 The link to access this resource from the REST API (Restful Objects viewer).
 
 Populated by the framework automatically.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/component/ServiceActionLayoutData.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/component/ServiceActionLayoutData.adoc
index 86ee647..97643a1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/component/ServiceActionLayoutData.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/component/ServiceActionLayoutData.adoc
@@ -85,4 +85,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 The link to access this resource from the REST API (Restful Objects viewer).
 
 Populated by the framework automatically.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Col.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Col.adoc
index ea6f451..cd4efa6 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Col.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Col.adoc
@@ -97,4 +97,3 @@ Whether to show the object's icon and title.
 === getMetadataError()
 
 For diagnostics; populated by the framework if and only if a metadata error.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Element.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Element.adoc
index 8b658e3..38d9eb7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Element.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Element.adoc
@@ -23,4 +23,3 @@ Any additional CSS classes to render on the page element corresponding to this o
 === getCssClass()
 
 Any additional CSS classes to render on the page element corresponding to this object, eg as per theBootstrap mixinsor just for custom styling.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3ElementAbstract.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3ElementAbstract.adoc
index 71b864b..02be8c0 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3ElementAbstract.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3ElementAbstract.adoc
@@ -25,4 +25,3 @@ Any additional CSS classes to render on the page element corresponding to this o
 === getCssClass()
 
 Any additional CSS classes to render on the page element corresponding to this object, eg as per theBootstrap mixinsor just for custom styling.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Grid.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Grid.adoc
index 3c33063..6bd339f 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Grid.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Grid.adoc
@@ -35,4 +35,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 === getMetadataErrors()
 
 For diagnostics; populated by the framework if and only if a metadata error.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Row.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Row.adoc
index cdda33b..75b5968 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Row.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Row.adoc
@@ -57,4 +57,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 Owner.
 
 Set programmatically by framework after reading in from XML.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3RowContent.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3RowContent.adoc
index 39c890d..0af00ee 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3RowContent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3RowContent.adoc
@@ -42,4 +42,3 @@ Default if not specified is _Size#MD_ .
 Owner.
 
 Set programmatically by framework after reading in from XML.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Tab.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Tab.adoc
index a49e1c4..64901f4 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Tab.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3Tab.adoc
@@ -35,4 +35,3 @@ Owner.
 Owner.
 
 Set programmatically by framework after reading in from XML.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3TabGroup.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3TabGroup.adoc
index 196ed06..e11b17a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3TabGroup.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/BS3TabGroup.adoc
@@ -68,4 +68,3 @@ Set programmatically by framework after reading in from XML.
 === getMetadataError()
 
 For diagnostics; populated by the framework if and only if a metadata error.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/HasCssId.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/HasCssId.adoc
index ff24003..49bdb04 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/HasCssId.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/grid/bootstrap3/HasCssId.adoc
@@ -22,4 +22,3 @@ As per <div id="...">...</div> : must be unique across entire page.
 === getId()
 
 As per <div id="...">...</div> : must be unique across entire page.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3Menu.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3Menu.adoc
index 333dbc5..cf059fa 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3Menu.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3Menu.adoc
@@ -34,4 +34,3 @@ Whether this menu should be used to hold any unreferenced actions.
 Whether this menu should be used to hold any unreferenced actions.
 
 Any menubars layout must have precisely one menu that has this attribute set.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3MenuBars.adoc b/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3MenuBars.adoc
index c2da850..51d1187 100644
--- a/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3MenuBars.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/layout/menubars/bootstrap3/BS3MenuBars.adoc
@@ -34,4 +34,3 @@ For diagnostics; populated by the framework if and only if a metadata error.
 === getMetadataError()
 
 For diagnostics; populated by the framework if and only if a metadata error.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/query/Query.adoc b/antora/components/system/modules/generated/pages/index/applib/query/Query.adoc
index 71a575d..37e8603 100644
--- a/antora/components/system/modules/generated/pages/index/applib/query/Query.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/query/Query.adoc
@@ -58,4 +58,3 @@ A human-readable representation of this query and its values.
 === getRange()
 
 Returns a model with start index into the set table and maximal number of items to return.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/query/QueryRange.adoc b/antora/components/system/modules/generated/pages/index/applib/query/QueryRange.adoc
index f2d81ae..c5a38fc 100644
--- a/antora/components/system/modules/generated/pages/index/applib/query/QueryRange.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/query/QueryRange.adoc
@@ -120,4 +120,3 @@ The maximum number of items to return (as java int primitive) if _limit_ overflo
 === getEndAsInt()
 
 The end index into the set table. Overflow is ignored. (as java int primitive) if _end_ overflows an int, _Integer#MAX_VALUE_ is returned.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/DomainChangeRecord.adoc b/antora/components/system/modules/generated/pages/index/applib/services/DomainChangeRecord.adoc
index bee024e..11b2b7b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/DomainChangeRecord.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/DomainChangeRecord.adoc
@@ -118,4 +118,3 @@ Populated only for audit entries.
 The value of the property after it has changed.
 
 Populated only for audit entries.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/bookmark/Bookmark.adoc b/antora/components/system/modules/generated/pages/index/applib/services/bookmark/Bookmark.adoc
index be79eb8..a5b1849 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/bookmark/Bookmark.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/bookmark/Bookmark.adoc
@@ -44,4 +44,3 @@ Round-trip with _#toString()_ representation.
 The canonical form of the xref:system:generated:index/applib/services/bookmark/Bookmark.adoc[Bookmark] , that is " _#getObjectType() objectType_ _#SEPARATOR_ _#getIdentifier()_ ".
 
 This is parseable by the _#parse(String)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/bookmark/BookmarkService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/bookmark/BookmarkService.adoc
index 93b349a..5c0fb32 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/bookmark/BookmarkService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/bookmark/BookmarkService.adoc
@@ -75,4 +75,3 @@ Reciprocal of _#bookmarkFor(Object)_
 === lookup(Bookmark, Class)
 
 As _#lookup(Bookmark)_ , but down-casting to the specified type.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/bookmarkui/BookmarkUiService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/bookmarkui/BookmarkUiService.adoc
index e4bbf8a..d0a3dc8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/bookmarkui/BookmarkUiService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/bookmarkui/BookmarkUiService.adoc
@@ -24,4 +24,3 @@ Simply clears the current list of breadcrumbs and bookmarks.
 === clear()
 
 Simply clears the current list of breadcrumbs and bookmarks.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/command/Command.adoc b/antora/components/system/modules/generated/pages/index/applib/services/command/Command.adoc
index abf3bad..9580bf3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/command/Command.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/command/Command.adoc
@@ -80,4 +80,3 @@ Derived from _#getCommandDto()_ , holds a string representation of the invoked a
 === updater()
 
  *NOT API* : intended to be called only by the framework.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/command/CommandExecutorService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/command/CommandExecutorService.adoc
index 2461974..2854aa3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/command/CommandExecutorService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/command/CommandExecutorService.adoc
@@ -25,4 +25,3 @@ Executes the specified command.
 === executeCommand(SudoPolicy, Command)
 
 Executes the specified command.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/conmap/ContentMappingServiceForCommandsDto.adoc b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/conmap/ContentMappingServiceForCommandsDto.adoc
index 1439b62..c744984 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/conmap/ContentMappingServiceForCommandsDto.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/conmap/ContentMappingServiceForCommandsDto.adoc
@@ -25,4 +25,3 @@ Not part of the xref:system:generated:index/applib/services/conmap/ContentMappin
 === map(Object)
 
 Not part of the xref:system:generated:index/applib/services/conmap/ContentMappingService.adoc[ContentMappingService] API.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/CommandDtoProcessor.adoc b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/CommandDtoProcessor.adoc
index 15819fe..39a81ac 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/CommandDtoProcessor.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/CommandDtoProcessor.adoc
@@ -26,4 +26,3 @@ The implementation can if necessary refine or alter the _CommandDto_ to be repli
 The implementation can if necessary refine or alter the _CommandDto_ to be replicated from primary to secondary.
 
 That said, the most common use case is to return `null` , which results in the command effectively being ignore.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/spi/CommandDtoProcessorService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/spi/CommandDtoProcessorService.adoc
index 9333622..7c750a0 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/spi/CommandDtoProcessorService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/commanddto/processor/spi/CommandDtoProcessorService.adoc
@@ -28,4 +28,3 @@ Converts the domain object (acting as the source) into a _CommandDto_ .
 Converts the domain object (acting as the source) into a _CommandDto_ .
 
 The _CommandDto_ that is also passed into the method will be from a default implementation provided by the framework. Most implementations will typically refine this provided DTO and return, for example adding additional user metadata to _CommandDto#getUserData()_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/confview/ConfigurationViewService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/confview/ConfigurationViewService.adoc
index a115415..27b2718 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/confview/ConfigurationViewService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/confview/ConfigurationViewService.adoc
@@ -26,4 +26,3 @@ Returns all properties, each as an instance of xref:system:generated:index/appli
 === allProperties()
 
 Returns all properties, each as an instance of xref:system:generated:index/applib/services/confview/ConfigurationProperty.adoc[ConfigurationProperty] (a view model). Mask sensitive values if required.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/conmap/ContentMappingService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/conmap/ContentMappingService.adoc
index 19d0801..575535a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/conmap/ContentMappingService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/conmap/ContentMappingService.adoc
@@ -22,4 +22,3 @@ Typically for mapping from a domain object to a DTO.
 === map(Object, List)
 
 Typically for mapping from a domain object to a DTO.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/email/EmailService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/email/EmailService.adoc
index fd29853..91d5b44 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/email/EmailService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/email/EmailService.adoc
@@ -38,4 +38,3 @@ The main API to send the email (and optional attachments).
 === isConfigured()
 
 Whether this service has been configured and thus available for use.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/error/SimpleTicket.adoc b/antora/components/system/modules/generated/pages/index/applib/services/error/SimpleTicket.adoc
index f0e3ad5..55cb76d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/error/SimpleTicket.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/error/SimpleTicket.adoc
@@ -42,4 +42,3 @@ If specified, is the external URL of an image to display to the end user.
 If specified, is the external URL of an image to display to the end user.
 
 Not necessarily of a kitten, but something by way of an apology.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/error/Ticket.adoc b/antora/components/system/modules/generated/pages/index/applib/services/error/Ticket.adoc
index 48dd9a6..82431d2 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/error/Ticket.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/error/Ticket.adoc
@@ -83,4 +83,3 @@ The default is to hide it on the basis that the reporting service will have repo
 === getMarkup()
 
 Returns a Html representation of this ticket.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/eventbus/EventBusService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/eventbus/EventBusService.adoc
index 6453e83..327b22d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/eventbus/EventBusService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/eventbus/EventBusService.adoc
@@ -28,4 +28,3 @@ Post an event (of any class) to the in-memory event bus.
 Post an event (of any class) to the in-memory event bus.
 
 The event will be delivered synchronously (within the same transactional boundary) to all subscribers of that event type (with subscribers as domain services with public method annotated using Spring's _org.springframework.context.event.EventListener_ annotation.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc
index d1d92a8..649d74d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc
@@ -90,4 +90,3 @@ Recognized, but for some other reason... 40x error
 === OTHER
 
 Recognized, but uncategorized (typically: a recognizer of the original ExceptionRecognizer API).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
index f8b6e9e..b2265ee 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
@@ -34,4 +34,3 @@ interface ExceptionRecognizer {
 === recognize(Throwable)
 
 (Attempt to) recognize the exception and return a user-friendly message to render instead.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
index 64ea61b..b135c71 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
@@ -46,4 +46,3 @@ Takes into consideration ExceptionRecognizers as given by _#getExceptionRecogniz
 === recognizeFromSelected(Can, Throwable)
 
 Takes into consideration ExceptionRecognizers as given by _recognizers_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc
index f6ccd0d..e056721 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc
@@ -72,4 +72,3 @@ Translates the _#getReason() reason_ and prepends with a translation of _#getCat
 === toMessageNoCategory(TranslationService)
 
 Translates the _#getReason() reason_ alone (ignoring the _#getCategory() category_ , using the provided xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] ..
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
index e39e1c0..2b323e5 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
@@ -147,4 +147,3 @@ It is recommended that the object be initially instantiated using this method, t
 * the `created()` callback will not be called.
 
 The corollary is: if your code never uses `default _Xxx_ ()` supporting methods or the `created()` callback, then you can alternatively just _new()_ up the object rather than call this method.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
index 68a9d13..da643be 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
@@ -76,4 +76,3 @@ Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.
 Loads a specic alternative xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] layout for the specified domain class.
 
 The layout alternative will typically be specified through a `layout()` method on the domain object, the value of which is used for the suffix of the layout file (eg "Customer-layout.archived.xml" to use a different layout for customers that have been archived).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridService.adoc
index 1e1a75e..668a7f6 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridService.adoc
@@ -136,4 +136,3 @@ If a "completed" grid is persisted as the `layout.xml` , then there should be no
 Modifies the provided xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] , removing all metadata except the basic grid structure.
 
 If a "minimal" grid is persisted as the `layout.xml` , then the expectation is that most of the layout annotations ( xref:system:generated:index/applib/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:system:generated:index/applib/annotation/ActionLayout.adoc[ActionLayout] , xref:system:generated:index/applib/annotation/PropertyLayout.adoc[PropertyLayout] , xref:system:generated:index/applib/annotation/CollectionLayout.adoc[CollectionLayout] , but also xref:system:generated: [...]
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
index 9d564f6..5888271 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
@@ -106,4 +106,3 @@ Such a grid, if persisted as the layout XML file for the domain class, allows al
 Takes a normalized grid and strips out removes all members, leaving only the grid structure.
 
 Such a grid, if persisted as the layout XML file for the domain class, requires that the _org.apache.isis.applib.annotation.MemberOrder_ annotation is retained in the source code of said class in order to bind members to the regions of the grid.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
index 57f5a31..3b6761a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
@@ -72,4 +72,3 @@ Remotes all hints for the domain object.
 === findHintKeys(Bookmark)
 
 The keys of all available hints for the domain object.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/LocaleProvider.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/LocaleProvider.adoc
index e15f1f3..3b8a584 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/i18n/LocaleProvider.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/LocaleProvider.adoc
@@ -24,4 +24,3 @@ Returns the _Locale_ of the current user.
 === getLocale()
 
 Returns the _Locale_ of the current user.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/Mode.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/Mode.adoc
new file mode 100644
index 0000000..98e8e60
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/Mode.adoc
@@ -0,0 +1,52 @@
+: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 [...]
+
+Controls whether the xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] is enabled or disabled, and if enabled whether it is in write (learn) mode or read mode.
+
+== API
+
+[source,java]
+.Mode.java
+----
+enum Mode {
+  DISABLED     // <.>
+  READ     // <.>
+  WRITE     // <.>
+  boolean matches(String configValue)
+  boolean isRead()
+  boolean isWrite()
+  boolean isDisabled()
+}
+----
+
+<.> xref:#DISABLED[DISABLED]
++
+--
+Translations are disabled.
+--
+<.> xref:#READ[READ]
++
+--
+Messages are being translated
+--
+<.> xref:#WRITE[WRITE]
++
+--
+Messages are _not_ being translated, but they are being recorded (such that a file of messages to be translated can be downloaded).
+--
+
+== Members
+
+[#DISABLED]
+=== DISABLED
+
+Translations are disabled.
+
+[#READ]
+=== READ
+
+Messages are being translated
+
+[#WRITE]
+=== WRITE
+
+Messages are _not_ being translated, but they are being recorded (such that a file of messages to be translated can be downloaded).
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
index eb2810c..2944f8b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
@@ -98,4 +98,3 @@ The text to be translated; depends on whether _#isPluralForm()_ and whether to b
 Any placeholders will _not_ have been replaced.
 
 NB: this method is exposed only so that implementations of _org.apache.isis.applib.exceptions.TranslatableException_ can return a non-null _Exception#getMessage() message_ when only a translatable message has been provided.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationService.adoc
index c6f7c77..67ffb5c 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationService.adoc
@@ -1,5 +1,9 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provides translated versions of the various elements within the framework's metamodel: service and object classes, properties, collections, actions, action parameters; and also to translate business rule (disable/valid) messages, and exceptions. These translations provide for both singular and plural forms.
+
+As such, this domain service is the cornerstone of the framework's i18n support.
+
 == API
 
 [source,java]
@@ -52,4 +56,3 @@ Whether this implementation is operating in read or in write mode.
 If in read mode, then the translations are expected to be present. In such cases, the _#translate(String, String) translate_ _#translate(String, String, String, int) method_ s should be _lazily_ called, if only because there will (most likely) need to be a session in progress (such that the locale of the current user can be determined).
 
 If in write mode, then the implementation is saving translation keys, and will always return the untranslated translation. In such cases, the _#translate(String, String) translate_ _#translate(String, String, String, int) method_ s should be _eagerly_ called such that all pathways are exercised..
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationsResolver.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationsResolver.adoc
index 601abcf..4dcbe11 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationsResolver.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslationsResolver.adoc
@@ -1,12 +1,30 @@
 :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 [...]
 
+Locates and return translations.
+
+This is one of the supporting services that work together to implement the framework's support for i18n, being used by the default implementation xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] .
+
 == API
 
 [source,java]
 .TranslationsResolver.java
 ----
 interface TranslationsResolver {
-  List<String> readLines(final String file)
+  List<String> readLines(final String file)     // <.>
 }
 ----
 
+<.> xref:#readLines__String[readLines(String)]
++
+--
+Reads the lines from the specified "logical" file name.
+--
+
+== Members
+
+[#readLines__String]
+=== readLines(String)
+
+Reads the lines from the specified "logical" file name.
+
+It is the responsibility of xref:system:generated:index/applib/services/i18n/TranslationsResolver.adoc[TranslationsResolver] to determine where the file actually resides (the data could be read from a database, for example, rather than an actual file.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc
index 08bdb42..f5cf71f 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc
@@ -93,4 +93,3 @@ The actions/property edits made in turn via the xref:system:generated:index/appl
 === setDto(T)
 
  *NOT API* : Set by framework (implementation of _org.apache.isis.core.metamodel.execution.InternalInteraction.MemberExecutor_ )
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
index 3853002..7db2412 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
@@ -64,4 +64,3 @@ The (programmatically) simulated (or actual) clock.
 === ofUserWithSystemDefaults(UserMemento)
 
 Creates a new xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] with the specified user and system defaults for clock, locale and time-zone.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
index 55a42b3..94bdb3d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
@@ -76,4 +76,3 @@ The execution that preceded the current one.
 === next(String)
 
 Generates numbers in a named sequence. The name of the sequence can be arbitrary, though note that the framework also uses this capability to generate sequence numbers corresponding to the sequences enumerated by the xref:system:generated:index/applib/services/iactn/Sequence.adoc[Sequence] enum.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
index 2e5d3fc..beabdb8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
@@ -27,4 +27,3 @@ Optionally, the currently active xref:system:generated:index/applib/services/iac
 === currentInteraction()
 
 Optionally, the currently active xref:system:generated:index/applib/services/iactn/Interaction.adoc[Interaction] for the calling thread.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc
index 6f59479..42ecee2 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc
@@ -47,4 +47,3 @@ For objects: multiple such could be dirtied and thus published as separate event
 === TRANSACTION
 
 There may be multiple transactions within a given interaction.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/inject/ServiceInjector.adoc b/antora/components/system/modules/generated/pages/index/applib/services/inject/ServiceInjector.adoc
index 161af19..0558660 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/inject/ServiceInjector.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/inject/ServiceInjector.adoc
@@ -1,8 +1,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 [...]
 
-Resolves injection points using the ServiceRegistry.
-
-Implementation must be thread-safe.
+Resolves injection points using the _org.apache.isis.applib.services.registry.ServiceRegistry_ (in other words provides a domain service instance to all fields and setters that are annotated with _javax.inject.Inject_ ).
 
 == API
 
@@ -10,8 +8,30 @@ Implementation must be thread-safe.
 .ServiceInjector.java
 ----
 interface ServiceInjector {
-  T injectServicesInto(final T domainObject, Consumer<InjectionPoint> onNotResolvable)
-  T injectServicesInto(final T domainObject)
+  T injectServicesInto(final T domainObject, Consumer<InjectionPoint> onNotResolvable)     // <.>
+  T injectServicesInto(final T domainObject)     // <.>
 }
 ----
 
+<.> xref:#injectServicesInto__T_Consumer[injectServicesInto(T, Consumer)]
++
+--
+Injects domain services into the object, and calls the provided _Consumer_ for any non-resolvable injection points.
+--
+<.> xref:#injectServicesInto__T[injectServicesInto(T)]
++
+--
+Injecs domain services into the object, and throws a _NoSuchElementException_ for any injection points that cannot be resolved.
+--
+
+== Members
+
+[#injectServicesInto__T_Consumer]
+=== injectServicesInto(T, Consumer)
+
+Injects domain services into the object, and calls the provided _Consumer_ for any non-resolvable injection points.
+
+[#injectServicesInto__T]
+=== injectServicesInto(T)
+
+Injecs domain services into the object, and throws a _NoSuchElementException_ for any injection points that cannot be resolved.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/jaxb/JaxbService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/jaxb/JaxbService.adoc
index c256f21..59a54bf 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/jaxb/JaxbService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/jaxb/JaxbService.adoc
@@ -94,4 +94,3 @@ Marshalls the object into XML specifying additional properties (passed to the _J
 Generates a map of each of the schemas referenced; the key is the schema namespace, the value is the XML of the schema itself.
 
 A JAXB-annotated domain object will live in its own XSD namespace and may reference multiple other XSD schemas. In particular, many JAXB domain objects will reference the common isis schemas. The _IsisSchemas_ paramter indicates whether these schemas should be included or excluded from the map.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/layout/LayoutService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/layout/LayoutService.adoc
index c6465bf..5b3db5a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/layout/LayoutService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/layout/LayoutService.adoc
@@ -46,4 +46,3 @@ Obtains a zip file of the serialized XML of the layouts (grids) of all domain en
 === toMenuBarsXml(MenuBarsService.Type)
 
 Obtains the serialized XML form of the menu bars layout ( xref:system:generated:index/applib/services/menu/MenuBarsService.adoc[MenuBarsService] ).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/layout/Style.adoc b/antora/components/system/modules/generated/pages/index/applib/services/layout/Style.adoc
index 38043c6..acb14d8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/layout/Style.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/layout/Style.adoc
@@ -77,4 +77,3 @@ The intention here is for layout annotations that "bind" the properties/collecti
 * _@MemberGroupLayout_ : *serialized as XML*
 * _@MemberOrder_ : *ignored*
 * _@ActionLayout, @PropertyLayout, @CollectionLayout_ : *ignored*
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/linking/DeepLinkService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/linking/DeepLinkService.adoc
index 184171a..a4f7d5a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/linking/DeepLinkService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/linking/DeepLinkService.adoc
@@ -28,4 +28,3 @@ Creates a URI that can be used to obtain a representation of the provided domain
 === deepLinkFor(Object)
 
 Creates a URI that can be used to obtain a representation of the provided domain object in one of the Isis viewers.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsLoaderService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsLoaderService.adoc
index ce2ef40..e6b2687 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsLoaderService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsLoaderService.adoc
@@ -41,4 +41,3 @@ If not, then the calling xref:system:generated:index/applib/services/menu/MenuBa
 === menuBars()
 
 Returns a new instance of a xref:system:generated:index/applib/layout/menubars/bootstrap3/BS3MenuBars.adoc[BS3MenuBars] if possible, else `null` .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsService.adoc
index ebd3adb..f5e62dc 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/menu/MenuBarsService.adoc
@@ -37,4 +37,3 @@ Returns _#menuBars()_ with a type of _Type#DEFAULT_ .
 === menuBars(Type)
 
 Returns the menu bars with the requested _Type_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/message/MessageService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/message/MessageService.adoc
index 2147083..0d37672 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/message/MessageService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/message/MessageService.adoc
@@ -130,4 +130,3 @@ More precisely, the locale is as provided by the configured _org.apache.isis.app
 === raiseError(TranslatableString, String)
 
 Override of _MessageService#raiseError(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/BeanSort.adoc b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/BeanSort.adoc
index d4f21c1..9b8338d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/BeanSort.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/BeanSort.adoc
@@ -112,4 +112,3 @@ Immutable, serializable object.
 === COLLECTION
 
 Container of objects.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/Config.adoc b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/Config.adoc
index 39dc8c3..a8d9cd1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/Config.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/Config.adoc
@@ -38,4 +38,3 @@ Returns a new _Config_ with given _packagePrefix_ added to the set of this _Conf
 === withPackagePrefix(String)
 
 Returns a new _Config_ with given _packagePrefix_ added to the set of this _Config_ 's packagePrefixes.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/MetaModelService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/MetaModelService.adoc
index 615b733..894f13c 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/metamodel/MetaModelService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/metamodel/MetaModelService.adoc
@@ -109,4 +109,3 @@ This is used by framework-provided implementations of _org.apache.isis.applib.se
 Exports the entire metamodel as a DTO, serializable into XML using JAXB.
 
 The xref:system:generated:index/applib/services/metamodel/Config.adoc[Config] parameter can be used to restrict/filter the export to some subset of the metamodel; in particular to specific _Config#getPackagePrefixes() package prefixes_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/metrics/MetricsService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/metrics/MetricsService.adoc
index 46b0778..1e52e2c 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/metrics/MetricsService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/metrics/MetricsService.adoc
@@ -45,4 +45,3 @@ The number of objects that have, so far in this request, been dirtied/will need
 Corresponds to the number of times that `javax.jdo.listener.DirtyLifecycleListener#preDirty(InstanceLifecycleEvent)` (or equivalent) callback is fired.
 
 Is captured within _MemberExecutionDto#getMetrics()_ (accessible from _InteractionContext#currentInteraction()_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/CommandSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/CommandSubscriber.adoc
index e688b25..3ca93e6 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/CommandSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/CommandSubscriber.adoc
@@ -26,4 +26,3 @@ Notifies that the command has completed.
 Notifies that the command has completed.
 
 This is an opportunity for implementations to process the command, for example to persist a representation of it.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
index 0df4034..42d4491 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
@@ -116,4 +116,3 @@ Number of domain objects properties that were changed in this interaction
 Same details, but as an an instance of _ChangesDto_ .
 
 This can be converted into a serializable XML representation using the _org.apache.isis.applib.util.schema.ChangesDtoUtils_ utility class.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
index 6c4a893..6733ab4 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
@@ -30,4 +30,3 @@ Receives all changing entities (with publishing enabled using _DomainObject#enti
 Receives all changing entities (with publishing enabled using _DomainObject#entityChangePublishing()_ ) as an instance of xref:system:generated:index/applib/services/publishing/spi/EntityChanges.adoc[EntityChanges] .
 
 The callback is called at the end of the transaction, during the pre-commit phase.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityPropertyChangeSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityPropertyChangeSubscriber.adoc
index c92626e..9117d74 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityPropertyChangeSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityPropertyChangeSubscriber.adoc
@@ -28,4 +28,3 @@ Receives a single property change event for changing entities (with publishing e
 Receives a single property change event for changing entities (with publishing enabled using _DomainObject#entityChangePublishing()_ ) as an instance of xref:system:generated:index/applib/services/publishing/spi/EntityPropertyChange.adoc[EntityPropertyChange] .
 
 The callback is called (multiple times) at the end of the transaction, during the pre-commit phase.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
index 895f77d..830c8a9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
@@ -32,4 +32,3 @@ Callback to notify that an interaction (an action invocation or property edit, a
 This callback method is called by the framework immediately after the interaction (not at the end of the transaction, unlike some of the other subscribers).
 
 Most implementations are expected to use _Execution#getDto()_ to create a serializable XML representation of the execution. The easiest way to do this is using _InteractionDtoUtils#newInteractionDto(Execution)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCache.adoc b/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCache.adoc
index a4431ea..083c5e6 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCache.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCache.adoc
@@ -43,4 +43,3 @@ Executes the callable if not already cached for the supplied calling class, meth
 === onTransactionEnded()
 
 Not API, for framework use only.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCacheControl.adoc b/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCacheControl.adoc
index 4fd8576..2828ae3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCacheControl.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/queryresultscache/QueryResultsCacheControl.adoc
@@ -26,4 +26,3 @@ Whether the xref:system:generated:index/applib/services/queryresultscache/QueryR
 === isIgnoreCache()
 
 Whether the xref:system:generated:index/applib/services/queryresultscache/QueryResultsCache.adoc[QueryResultsCache] should be disabled, in other words to stop using any cached results.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc b/antora/components/system/modules/generated/pages/index/applib/services/registry/InstanceByPriorityComparator.adoc
similarity index 77%
copy from antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc
copy to antora/components/system/modules/generated/pages/index/applib/services/registry/InstanceByPriorityComparator.adoc
index a06fb84..2dfd27e 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/registry/InstanceByPriorityComparator.adoc
@@ -1,19 +1,15 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+A comparator that orders objects according to their _Priority_ annotation.
+
 == API
 
 [source,java]
-.Imposterisers.java
+.InstanceByPriorityComparator.java
 ----
-class Imposterisers {
-  Imposteriser getDefault()     // <.>
+class InstanceByPriorityComparator {
+  InstanceByPriorityComparator instance()
+  int compare(Object o1, Object o2)
 }
 ----
 
-<.> xref:#getDefault__[getDefault()]
-
-== Members
-
-[#getDefault__]
-=== getDefault()
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/registry/ServiceRegistry.adoc b/antora/components/system/modules/generated/pages/index/applib/services/registry/ServiceRegistry.adoc
index 8de6726..9f9adbe 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/registry/ServiceRegistry.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/registry/ServiceRegistry.adoc
@@ -1,5 +1,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Collects together methods for injecting or looking up domain services (either provided by the framework or application-specific) currently known to the runtime.
+
 == API
 
 [source,java]
@@ -14,7 +16,8 @@ interface ServiceRegistry {
   _ManagedBeanAdapter lookupRegisteredBeanByIdElseFail(String id)     // <.>
   Optional<?> lookupBeanById(final String id)
   Optional<T> lookupService(final Class<T> serviceClass)     // <.>
-  T lookupServiceElseFail(final Class<T> serviceClass)
+  Optional<T> lookupService(Class<T> serviceClass, Comparator<Object> comparator)     // <.>
+  T lookupServiceElseFail(final Class<T> serviceClass)     // <.>
 }
 ----
 
@@ -53,6 +56,16 @@ Returns a registered bean of given _name_ , or throws when no such bean.
 --
 Returns a domain service implementing the requested type.
 --
+<.> xref:#lookupService__Class_Comparator[lookupService(Class, Comparator)]
++
+--
+Returns a domain service implementing the requested type.
+--
+<.> xref:#lookupServiceElseFail__Class[lookupServiceElseFail(Class)]
++
+--
+Looks up a domain service of the requested type (same as _#lookupService(Class)_ ) but throws a _NoSuchElementException_ if there are no such instances.
+--
 
 == Members
 
@@ -93,3 +106,14 @@ Returns a domain service implementing the requested type.
 
 If this lookup is ambiguous, the service annotated with highest priority is returned. see _Priority_
 
+[#lookupService__Class_Comparator]
+=== lookupService(Class, Comparator)
+
+Returns a domain service implementing the requested type.
+
+If this lookup is ambiguous, then the provided comparator is used.
+
+[#lookupServiceElseFail__Class]
+=== lookupServiceElseFail(Class)
+
+Looks up a domain service of the requested type (same as _#lookupService(Class)_ ) but throws a _NoSuchElementException_ if there are no such instances.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/repository/EntityState.adoc b/antora/components/system/modules/generated/pages/index/applib/services/repository/EntityState.adoc
index 894f46e..d307af3 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/repository/EntityState.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/repository/EntityState.adoc
@@ -101,4 +101,3 @@ Object with this state is an entity but that is detached from a persistence sess
 === isDestroyed()
 
 Object with this state is an entity that has been removed from the database. Objects in this state may no longer be interacted with.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/repository/RepositoryService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/repository/RepositoryService.adoc
index c0945c3..7091fc7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/repository/RepositoryService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/repository/RepositoryService.adoc
@@ -365,4 +365,3 @@ due to ambiguous semantic, use _#getEntityState(Object)_ instead
 ====
 
 Determines if the specified object has been deleted from the object store.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/routing/RoutingService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/routing/RoutingService.adoc
index 52c4f64..f1e8270 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/routing/RoutingService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/routing/RoutingService.adoc
@@ -2,14 +2,53 @@
 
 Provides the ability to return (and therefore have rendered) an alternative object from an action invocation.
 
+There are two primary use cases:
+
+* if an action returns an aggregate leaf (that is, a child object which has an owning parent), then the parent object can be * returned instead.
++
+--
+For example, an action returning `OrderItem` might instead render the owning `Order` object. It is the responsibility of the implementation to figure out what the "owning" object might be.
+--
+* if an action returns `null` or is `void`, then return some other "useful" object.
++
+--
+For example, return the home page (eg as defined by the _org.apache.isis.applib.annotation.HomePage_ annotation).
+--
+
+Currently this service is used only by the Wicket viewer; it is ignored by the Restful Objects viewer.
+
 == API
 
 [source,java]
 .RoutingService.java
 ----
 interface RoutingService {
-  boolean canRoute(Object original)
-  Object route(Object original)
+  boolean canRoute(Object original)     // <.>
+  Object route(Object original)     // <.>
 }
 ----
 
+<.> xref:#canRoute__Object[canRoute(Object)]
++
+--
+whether this implementation recognizes and can "route" the object.
+--
+<.> xref:#route__Object[route(Object)]
++
+--
+The object to route to instead; this may be the same as the original object, some other object, or (indeed) `null`.
+--
+
+== Members
+
+[#canRoute__Object]
+=== canRoute(Object)
+
+whether this implementation recognizes and can "route" the object.
+
+The _#route(Object)_ method is only called if this method returns `true` .
+
+[#route__Object]
+=== route(Object)
+
+The object to route to instead; this may be the same as the original object, some other object, or (indeed) `null`.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/scratchpad/Scratchpad.adoc b/antora/components/system/modules/generated/pages/index/applib/services/scratchpad/Scratchpad.adoc
index a427005..f57f4b9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/scratchpad/Scratchpad.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/scratchpad/Scratchpad.adoc
@@ -1,8 +1,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 [...]
 
-This service (API and implementation) provides a mechanism to interchange information between multiple objects invoked in the same interaction. Most commonly this will be as the result of invoking a bulk action.
-
-This implementation has only one implementation (this class) in applib, so it is annotated with _org.apache.isis.applib.annotation.DomainService_ . This means that it is automatically registered and available for use; no further configuration is required.
+This service (API and implementation) provides a mechanism to interchange information between multiple objects invoked in the same interaction.
 
 == API
 
@@ -33,8 +31,11 @@ Set user-data, for the use of a subsequent object being acted upon.
 
 Obtain user-data, as set by a previous object being acted upon.
 
+The key value should obey the general contract for hash maps.
+
 [#put__Object_Object]
 === put(Object, Object)
 
 Set user-data, for the use of a subsequent object being acted upon.
 
+The key value should obey the general contract for hash maps.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/session/SessionLoggingService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/session/SessionLoggingService.adoc
index 535eb12..9437391 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/session/SessionLoggingService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/session/SessionLoggingService.adoc
@@ -1,6 +1,8 @@
 :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 [...]
 
-Similar to the _org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber_ , this defines an API to track the status of the current sessions ("users logged on") on the system.
+Defines an API to track the status of the current sessions ("users logged on") on the system.
+
+Multiple implementations can be registered; all will be called.
 
 == API
 
@@ -8,7 +10,21 @@ Similar to the _org.apache.isis.applib.services.publishing.spi.EntityPropertyCha
 .SessionLoggingService.java
 ----
 interface SessionLoggingService {
-  void log(Type type, String username, Date date, CausedBy causedBy, String sessionId)
+  void log(Type type, String username, Date date, CausedBy causedBy, String sessionId)     // <.>
 }
 ----
 
+<.> xref:#log__Type_String_Date_CausedBy_String[log(Type, String, Date, CausedBy, String)]
++
+--
+Callback to log the session.
+--
+
+== Members
+
+[#log__Type_String_Date_CausedBy_String]
+=== log(Type, String, Date, CausedBy, String)
+
+Callback to log the session.
+
+The `sessionId` is an internal identifier (for the Wicket viewer, its the JVM hashCode of the Wicket session).
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/sudo/SudoService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/sudo/SudoService.adoc
index e3b0f15..96939bf 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/sudo/SudoService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/sudo/SudoService.adoc
@@ -1,6 +1,10 @@
 :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 [...]
 
-Intended only for use by fixture scripts and integration tests, allows a block of code to execute while the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] 's _UserService#currentUser() getUser()_ method returns the specified user/role as the effective user.
+Allows a block of code to be executed within an arbitrary xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] , allowing the who, when and where to be temporarily switched.
+
+Most typically this service is used to temporarily change the &qout;who", that is the user reported by the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] 's _UserService#currentUser() getUser()_ - hence the name SudoService. But the user's locale and timezome can also be changed, as well as the time reported by _org.apache.isis.applib.services.clock.ClockService_ .
+
+The primary use case for this service is for fixture scripts and integration tests.
 
 == API
 
@@ -9,7 +13,7 @@ Intended only for use by fixture scripts and integration tests, allows a block o
 ----
 interface SudoService {
   RoleMemento ACCESS_ALL_ROLE;     // <.>
-  T call(UnaryOperator<ExecutionContext> sudoMapper, Callable<T> supplier)     // <.>
+  T call(final UnaryOperator<ExecutionContext> sudoMapper, final Callable<T> supplier)     // <.>
   void run(final UnaryOperator<ExecutionContext> sudoMapper, final ThrowingRunnable runnable)     // <.>
 }
 ----
@@ -22,12 +26,12 @@ If included in the list of roles, then will disable security checks (can view an
 <.> xref:#call__UnaryOperator_Callable[call(UnaryOperator, Callable)]
 +
 --
-Executes the supplied block, with the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] returning the specified user.
+Executes the supplied _Callable_ block, within the provided xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] .
 --
 <.> xref:#run__UnaryOperator_ThrowingRunnable[run(UnaryOperator, ThrowingRunnable)]
 +
 --
-Executes the supplied block, with the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] returning the specified user.
+Executes the supplied _Callable_ block, within the provided xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] .
 --
 
 == Members
@@ -40,10 +44,9 @@ If included in the list of roles, then will disable security checks (can view an
 [#call__UnaryOperator_Callable]
 === call(UnaryOperator, Callable)
 
-Executes the supplied block, with the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] returning the specified user.
+Executes the supplied _Callable_ block, within the provided xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] .
 
 [#run__UnaryOperator_ThrowingRunnable]
 === run(UnaryOperator, ThrowingRunnable)
 
-Executes the supplied block, with the xref:system:generated:index/applib/services/user/UserService.adoc[UserService] returning the specified user.
-
+Executes the supplied _Callable_ block, within the provided xref:system:generated:index/applib/services/iactn/ExecutionContext.adoc[ExecutionContext] .
diff --git a/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc b/antora/components/system/modules/generated/pages/index/applib/services/swagger/Format.adoc
similarity index 52%
copy from antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc
copy to antora/components/system/modules/generated/pages/index/applib/services/swagger/Format.adoc
index 61c9e08..48eec77 100644
--- a/antora/components/system/modules/generated/pages/index/applib/events/EventObjectBase.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/swagger/Format.adoc
@@ -1,47 +1,50 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+The format to generate the representation of the swagger spec.
+
 == API
 
 [source,java]
-.EventObjectBase.java
+.Format.java
 ----
-class EventObjectBase<T> {
-  T getSource()     // <.>
-  void initSource(T source)     // <.>
-  String toString()     // <.>
+enum Format {
+  JSON     // <.>
+  YAML     // <.>
+  String mediaType()     // <.>
 }
 ----
 
-<.> xref:#getSource__[getSource()]
+<.> xref:#JSON[JSON]
 +
 --
-The object on which the Event initially occurred.
+Generate a format in JSON ( `text/json` media type).
 --
-<.> xref:#initSource__T[initSource(T)]
+<.> xref:#YAML[YAML]
 +
 --
-A one-shot function. Only allowed to be called if a source has not already been set.
+Generate a format in YAML ( `application/yaml` media type).
 --
-<.> xref:#toString__[toString()]
+<.> xref:#mediaType__[mediaType()]
 +
 --
-Returns a String representation of this EventObject.
+Returns the associated media type for each of the formats.
 --
 
 == Members
 
-[#getSource__]
-=== getSource()
+[#JSON]
+=== JSON
 
-The object on which the Event initially occurred.
+Generate a format in JSON ( `text/json` media type).
 
-[#initSource__T]
-=== initSource(T)
+[#YAML]
+=== YAML
 
-A one-shot function. Only allowed to be called if a source has not already been set.
+Generate a format in YAML ( `application/yaml` media type).
 
-[#toString__]
-=== toString()
+[#mediaType__]
+=== mediaType()
 
-Returns a String representation of this EventObject.
+Returns the associated media type for each of the formats.
 
+Implementation note: not using subclasses of this enum, otherwise the key in `translations.po` becomes more complex.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/swagger/SwaggerService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/swagger/SwaggerService.adoc
index 06099fc..c8ee714 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/swagger/SwaggerService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/swagger/SwaggerService.adoc
@@ -1,6 +1,8 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-The xref:system:generated:index/applib/services/swagger/SwaggerService.adoc[SwaggerService] generates Swagger schema definition files to describe the public and/or private RESTful APIs exposed by the RestfulObjects viewer.
+Generates Swagger schema definition files to describe the public and/or private RESTful APIs exposed by the RestfulObjects viewer.
+
+These spec files can then be used with the link:http://swagger.io/swagger-ui/[Swagger UI] page to explore the REST API, or used to generate client-side stubs using the link:http://swagger.io/swagger-codegen/[Swagger codegen] tool, eg for use in a custom REST client app.
 
 == API
 
@@ -8,7 +10,19 @@ The xref:system:generated:index/applib/services/swagger/SwaggerService.adoc[Swag
 .SwaggerService.java
 ----
 interface SwaggerService {
-  String generateSwaggerSpec(final Visibility visibility, final Format format)
+  String generateSwaggerSpec(final Visibility visibility, final Format format)     // <.>
 }
 ----
 
+<.> xref:#generateSwaggerSpec__Visibility_Format[generateSwaggerSpec(Visibility, Format)]
++
+--
+Generate a Swagger spec with the specified visibility and format.
+--
+
+== Members
+
+[#generateSwaggerSpec__Visibility_Format]
+=== generateSwaggerSpec(Visibility, Format)
+
+Generate a Swagger spec with the specified visibility and format.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/swagger/Visibility.adoc b/antora/components/system/modules/generated/pages/index/applib/services/swagger/Visibility.adoc
new file mode 100644
index 0000000..4bb07a6
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/swagger/Visibility.adoc
@@ -0,0 +1,55 @@
+: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 [...]
+
+Specifies which elements of the metamodel are included within the generated swagger spec.
+
+== API
+
+[source,java]
+.Visibility.java
+----
+enum Visibility {
+  PUBLIC     // <.>
+  PRIVATE     // <.>
+  PRIVATE_WITH_PROTOTYPING     // <.>
+  boolean isPublic()
+  boolean isPrivate()
+  boolean isPrivateWithPrototyping()
+}
+----
+
+<.> xref:#PUBLIC[PUBLIC]
++
+--
+Specification for use by third-party clients, ie public use and not under the control of the authors of the backend Apache Isis application.
+--
+<.> xref:#PRIVATE[PRIVATE]
++
+--
+Specification for use only by internally-managed clients, ie private internal use.
+--
+<.> xref:#PRIVATE_WITH_PROTOTYPING[PRIVATE_WITH_PROTOTYPING]
++
+--
+As _#PRIVATE_ , also including any prototype actions (where _Action#restrictTo()_ set to _RestrictTo#PROTOTYPING_ ).
+--
+
+== Members
+
+[#PUBLIC]
+=== PUBLIC
+
+Specification for use by third-party clients, ie public use and not under the control of the authors of the backend Apache Isis application.
+
+The generated swagger spec is therefore restricted only to include only view models ( _DomainObject#nature()_ of _org.apache.isis.applib.annotation.Nature#VIEW_MODEL_ ) and to REST domain services ( _DomainService#nature()_ of _NatureOfService#REST_ ). Exposing entities also would couple the REST client too deeply to the backend implementation.
+
+[#PRIVATE]
+=== PRIVATE
+
+Specification for use only by internally-managed clients, ie private internal use.
+
+This visibility level removes all constraints and so includes the specifications of domain entities as well as view models. This is perfectly acceptable where the team developing the REST client is the same as the team developing the backend service ... the use of the REST API between the client and server is a private implementation detail of the application.
+
+[#PRIVATE_WITH_PROTOTYPING]
+=== PRIVATE_WITH_PROTOTYPING
+
+As _#PRIVATE_ , also including any prototype actions (where _Action#restrictTo()_ set to _RestrictTo#PROTOTYPING_ ).
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/tablecol/TableColumnOrderService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/tablecol/TableColumnOrderService.adoc
index c713c72..467a221 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/tablecol/TableColumnOrderService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/tablecol/TableColumnOrderService.adoc
@@ -1,13 +1,45 @@
 :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 [...]
 
+Provides the ability to reorder (or suppress) columns in both parented- and standalone tables.
+
+There can be multiple implementations of this service registered, ordered as per the Spring _org.springframework.core.annotation.Order_ annotation (or equivalent). The result of the first service implementation to return a non- `null` value will be used.
+
+If all provided implementations return `null` , then the framework will fallback to a default implementation.
+
 == API
 
 [source,java]
 .TableColumnOrderService.java
 ----
 interface TableColumnOrderService {
-  List<String> orderParented(final Object parent, final String collectionId, final Class<?> collectionType, final List<String> propertyIds)
-  List<String> orderStandalone(final Class<?> collectionType, final List<String> propertyIds)
+  List<String> orderParented(final Object parent, final String collectionId, final Class<?> collectionType, final List<String> propertyIds)     // <.>
+  List<String> orderStandalone(final Class<?> collectionType, final List<String> propertyIds)     // <.>
 }
 ----
 
+<.> xref:#orderParented__Object_String_Class_List[orderParented(Object, String, Class, List)]
++
+--
+For the parent collection owned by the specified parent and collection Id, return the set of property ids in the same or other order.
+--
+<.> xref:#orderStandalone__Class_List[orderStandalone(Class, List)]
++
+--
+For the standalone collection of the specified type, return the set of property ids in the same or other order.
+--
+
+== Members
+
+[#orderParented__Object_String_Class_List]
+=== orderParented(Object, String, Class, List)
+
+For the parent collection owned by the specified parent and collection Id, return the set of property ids in the same or other order.
+
+Return `null` if has no opinion/provides no reordering for this parent and collection.
+
+[#orderStandalone__Class_List]
+=== orderStandalone(Class, List)
+
+For the standalone collection of the specified type, return the set of property ids in the same or other order.
+
+Return `null` if has no opinion/provides no reordering for this type.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/title/TitleService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/title/TitleService.adoc
index 7a8ca2c..c9f910b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/title/TitleService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/title/TitleService.adoc
@@ -1,25 +1,27 @@
 :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 [...]
 
+Provides methods to programmatically obtain the title and icon of a domain object.
+
 == API
 
 [source,java]
 .TitleService.java
 ----
 interface TitleService {
-  String titleOf(Object domainObject)     // <.>
-  String iconNameOf(Object domainObject)     // <.>
+  String titleOf(final Object domainObject)     // <.>
+  String iconNameOf(final Object domainObject)     // <.>
 }
 ----
 
 <.> xref:#titleOf__Object[titleOf(Object)]
 +
 --
-Return the title of the object, as rendered in the UI by the Isis viewers.
+Returns the title of the object (as rendered in the UI by the framework's viewers).
 --
 <.> xref:#iconNameOf__Object[iconNameOf(Object)]
 +
 --
-Return the icon name of the object, as rendered in the UI by the Isis viewers.
+Returns the icon name of the object (as rendered in the UI by the framework's viewers).
 --
 
 == Members
@@ -27,10 +29,9 @@ Return the icon name of the object, as rendered in the UI by the Isis viewers.
 [#titleOf__Object]
 === titleOf(Object)
 
-Return the title of the object, as rendered in the UI by the Isis viewers.
+Returns the title of the object (as rendered in the UI by the framework's viewers).
 
 [#iconNameOf__Object]
 === iconNameOf(Object)
 
-Return the icon name of the object, as rendered in the UI by the Isis viewers.
-
+Returns the icon name of the object (as rendered in the UI by the framework's viewers).
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingService.adoc
index 2eb9e35..337b3e9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingService.adoc
@@ -1,15 +1,43 @@
 :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 [...]
 
+Defines a consistent way to convert strings to/from a form safe for use within a URL.
+
+The service is used by the framework to map mementos (derived from the state of the view model itself) into a form that can be used as a view model. When the framework needs to recreate the view model (for example to invoke an action on it), this URL is converted back into a view model memento, from which the view model can be hydrated.
+
 == API
 
 [source,java]
 .UrlEncodingService.java
 ----
 interface UrlEncodingService {
-  String encode(final byte[] bytes)
-  byte[] decode(String str)
+  String encode(final byte[] bytes)     // <.>
+  byte[] decode(String str)     // <.>
   String encodeString(final String str)
   String decodeToString(final String str)
 }
 ----
 
+<.> xref:#encode__byte[][encode(byte[])]
++
+--
+Converts the string (eg view model memento) into a string safe for use within an URL
+--
+<.> xref:#decode__String[decode(String)]
++
+--
+Unconverts the string from its URL form into its original form URL.
+--
+
+== Members
+
+[#encode__byte[]]
+=== encode(byte[])
+
+Converts the string (eg view model memento) into a string safe for use within an URL
+
+[#decode__String]
+=== decode(String)
+
+Unconverts the string from its URL form into its original form URL.
+
+Reciprocal of _#encode(byte[])_ .
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.adoc b/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.adoc
index 93a40a1..ed5a310 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/urlencoding/UrlEncodingServiceUsingBaseEncodingAbstract.adoc
@@ -1,5 +1,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provided as a convenient base class for providing alternative implementations of xref:system:generated:index/applib/services/urlencoding/UrlEncodingService.adoc[UrlEncodingService] .
+
 == API
 
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/user/RoleMemento.adoc b/antora/components/system/modules/generated/pages/index/applib/services/user/RoleMemento.adoc
index b401f51..acbdf40 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/user/RoleMemento.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/user/RoleMemento.adoc
@@ -8,6 +8,12 @@ Immutable serializable value held by xref:system:generated:index/applib/services
 .RoleMemento.java
 ----
 class RoleMemento {
+  @MemberOrder(sequence = "1.1")
+@Getter
+String name;
+  @MemberOrder(sequence = "1.2")
+@Getter
+String description;
   RoleMemento(final String name)     // <.>
   RoleMemento(final String name, final String description)     // <.>
   String title()
@@ -36,4 +42,3 @@ Creates a new role with the specified name. Description is left blank.
 === RoleMemento
 
 Creates a new role with the specified name and description.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/user/UserService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/user/UserService.adoc
index 30e1514..4a74381 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/user/UserService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/user/UserService.adoc
@@ -1,6 +1,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 [...]
 
-The xref:system:generated:index/applib/services/user/UserService.adoc[UserService] allows the domain object to obtain the identity of the user interacting with said object.
+Allows the domain object to obtain the identity of the user interacting with said object.
 
 If xref:system:generated:index/applib/services/sudo/SudoService.adoc[SudoService] has been used to temporarily override the user and/or roles, then this service will report the overridden values instead.
 
@@ -70,4 +70,3 @@ Optionally gets the the current user's name, based on whether an xref:system:gen
 === currentUserNameElseNobody()
 
 Returns either the current user's name or else _Nobody_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/userprof/UserProfileService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/userprof/UserProfileService.adoc
index 5323b68..7911c89 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/userprof/UserProfileService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/userprof/UserProfileService.adoc
@@ -1,8 +1,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 [...]
 
-Optional API providing details about the user.
-
-Used by the Wicket viewer in its _org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar#TERTIARY tertiary_ "Me" menu bar.
+Provides the ability to return supplementary metadata about the current user.
 
 == API
 
@@ -17,7 +15,7 @@ interface UserProfileService {
 <.> xref:#userProfileName__[userProfileName()]
 +
 --
-Used as the menu name of the _org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar#TERTIARY tertiary_ "Me" menu bar.
+Returns an alternate name for the current user.
 --
 
 == Members
@@ -25,7 +23,8 @@ Used as the menu name of the _org.apache.isis.applib.annotation.DomainServiceLay
 [#userProfileName__]
 === userProfileName()
 
-Used as the menu name of the _org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar#TERTIARY tertiary_ "Me" menu bar.
+Returns an alternate name for the current user.
 
-If returns `null` , then the current user name is used instead.
+In the Wicket viewer, used as the menu name of the _org.apache.isis.applib.annotation.DomainServiceLayout.MenuBar#TERTIARY tertiary_ "Me" menu bar.
 
+If returns `null` , then the current user name is used instead.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/userreg/EmailNotificationService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/userreg/EmailNotificationService.adoc
index 4164a9f..b8a76ac 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/userreg/EmailNotificationService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/userreg/EmailNotificationService.adoc
@@ -50,4 +50,3 @@ Sends an email to reset a password for an already-registered user
 Whether this service has been configured and thus available for use.
 
 If this returns false then it is _not_ valid to call _#send(EmailRegistrationEvent)_ (and doing so will result in an _IllegalStateException_ being thrown).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/userreg/UserRegistrationService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/userreg/UserRegistrationService.adoc
index 5572314..b35bca2 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/userreg/UserRegistrationService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/userreg/UserRegistrationService.adoc
@@ -1,8 +1,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 [...]
 
-Required API to enable users to register an account on the system (aka "sign up").
-
-User registration also requires that the xref:system:generated:index/applib/services/userreg/EmailNotificationService.adoc[EmailNotificationService] and _org.apache.isis.applib.services.email.EmailService_ to be configured. The framework provides default implementations of both of these services. The notification service requires no further configuration. The email service ( `EmailServiceDefault` ) _does_ require a couple of configuration properties to be set (specifying the SMTP mail se [...]
+Provides the ability for users to sign-up to access an application by providing a valid email address. Also provides the capability for users to reset their password if forgotten.
 
 == API
 
@@ -10,10 +8,54 @@ User registration also requires that the xref:system:generated:index/applib/serv
 .UserRegistrationService.java
 ----
 interface UserRegistrationService {
-  boolean usernameExists(String username)
-  boolean emailExists(String emailAddress)
-  void registerUser(UserDetails userDetails)
-  boolean updatePasswordByEmail(String emailAddress, String password)
+  boolean usernameExists(String username)     // <.>
+  boolean emailExists(String emailAddress)     // <.>
+  void registerUser(UserDetails userDetails)     // <.>
+  boolean updatePasswordByEmail(String emailAddress, String password)     // <.>
 }
 ----
 
+<.> xref:#usernameExists__String[usernameExists(String)]
++
+--
+Checks if there is already a user with the specified username
+--
+<.> xref:#emailExists__String[emailExists(String)]
++
+--
+Checks if there is already a user with the specified email address.
+--
+<.> xref:#registerUser__UserDetails[registerUser(UserDetails)]
++
+--
+Creates the user, with specified password and email address.
+--
+<.> xref:#updatePasswordByEmail__String_String[updatePasswordByEmail(String, String)]
++
+--
+Allows the user to reset their password.
+--
+
+== Members
+
+[#usernameExists__String]
+=== usernameExists(String)
+
+Checks if there is already a user with the specified username
+
+[#emailExists__String]
+=== emailExists(String)
+
+Checks if there is already a user with the specified email address.
+
+[#registerUser__UserDetails]
+=== registerUser(UserDetails)
+
+Creates the user, with specified password and email address.
+
+The username and email address must both be unique (not being used by an existing user).
+
+[#updatePasswordByEmail__String_String]
+=== updatePasswordByEmail(String, String)
+
+Allows the user to reset their password.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrapperFactory.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrapperFactory.adoc
index 7046738..4056380 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrapperFactory.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrapperFactory.adoc
@@ -2,7 +2,9 @@
 
 Provides the ability to 'wrap' a domain object such that it can be interacted with while enforcing the hide/disable/validate rules implied by the Apache Isis programming model.
 
-The wrapper can alternatively also be used to execute the action asynchronously, through an _java.util.concurrent.ExecutorService_ . Any business rules will be invoked synchronously beforehand, however. hand
+This capability goes beyond enforcing the (imperative) constraints within the `hideXxx()`, `disableXxx()` and `validateXxx()` supporting methods; it also enforces (declarative) constraints such as those represented by annotations, eg `@Parameter(maxLength=...)` or `@Property(mustSatisfy=...)`.
+
+The wrapper can alternatively also be used to execute the action asynchronously, through an _java.util.concurrent.ExecutorService_ . Any business rules will be invoked synchronously beforehand, however.
 
 The 'wrap' is a runtime-code-generated proxy that wraps the underlying domain object. The wrapper can then be interacted with as follows:
 
@@ -73,12 +75,12 @@ Whether the supplied object is a wrapper around a domain object.
 <.> xref:#asyncWrap__T_AsyncControl[asyncWrap(T, AsyncControl)]
 +
 --
-Returns a proxy object for the provided _domainObject_ , through which can execute the action asynchronously.
+Returns a proxy object for the provided _domainObject_ , through which can execute the action asynchronously (in another thread).
 --
 <.> xref:#asyncWrapMixin__Class_Object_AsyncControl[asyncWrapMixin(Class, Object, AsyncControl)]
 +
 --
-Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously.
+Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
 --
 <.> xref:#getListeners__[getListeners()]
 +
@@ -145,12 +147,12 @@ Whether the supplied object is a wrapper around a domain object.
 [#asyncWrap__T_AsyncControl]
 === asyncWrap(T, AsyncControl)
 
-Returns a proxy object for the provided _domainObject_ , through which can execute the action asynchronously.
+Returns a proxy object for the provided _domainObject_ , through which can execute the action asynchronously (in another thread).
 
 [#asyncWrapMixin__Class_Object_AsyncControl]
 === asyncWrapMixin(Class, Object, AsyncControl)
 
-Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously.
+Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
 
 [#getListeners__]
 === getListeners()
@@ -170,4 +172,3 @@ This is retrospective: the listener will be notified of interactions even on wra
 Remove an xref:system:generated:index/applib/services/wrapper/listeners/InteractionListener.adoc[InteractionListener] , to no longer be notified of interactions on wrappers.
 
 This is retrospective: the listener will no longer be notified of any interactions created on any wrappers, not just on those wrappers created subsequently. (From an implementation perspective this is because the wrappers delegate back to the container to fire the events).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrappingObject.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrappingObject.adoc
index d8c2e1f..e09ec7d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrappingObject.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/WrappingObject.adoc
@@ -54,4 +54,3 @@ NOTE: domain classes may not have a method with this name. The `__isis_` prefix
 === __isis_executionModes()
 
 The _EnumSetexecution modes_ inferred from the xref:system:generated:index/applib/services/wrapper/control/SyncControl.adoc[SyncControl] with which this wrapper was _WrapperFactory#wrap(Object, SyncControl) created_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/AsyncControl.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/AsyncControl.adoc
index 43d37b6..c369b5b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/AsyncControl.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/AsyncControl.adoc
@@ -1,18 +1,103 @@
 :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 [...]
 
+Modifies the way in which an asynchronous action initiated through the _org.apache.isis.applib.services.wrapper.WrapperFactory_ is actually executed.
+
+Executing in a separate thread means that the target and arguments are used in a new _org.apache.isis.applib.services.iactn.Interaction_ (and transaction). If any of these are entities, they are retrieved from the database afresh; it isn't possible to pass domain entity references from the foreground calling thread to the background threads.
+
 == API
 
 [source,java]
 .AsyncControl.java
 ----
 class AsyncControl<R> {
-  AsyncControl<Void> returningVoid()
-  AsyncControl<X> returning(final Class<X> cls)
-  AsyncControl<R> with(ExecutorService executorService)
+  AsyncControl<Void> returningVoid()     // <.>
+  AsyncControl<X> returning(final Class<X> cls)     // <.>
+  AsyncControl<R> withSkipRules()     // <.>
+  AsyncControl with(ExceptionHandler exceptionHandler)     // <.>
+  AsyncControl<R> with(ExecutorService executorService)     // <.>
   AsyncControl<R> withClock(final VirtualClock clock)
   AsyncControl<R> withLocale(final Locale locale)
   AsyncControl<R> withTimeZone(final TimeZone timeZone)
-  AsyncControl<R> withUser(final UserMemento user)
+  AsyncControl<R> withUser(final UserMemento user)     // <.>
+  void setFuture(Future<R> future)     // <.>
 }
 ----
 
+<.> xref:#returningVoid__[returningVoid()]
++
+--
+Factory method to instantiate a control instance for a void action or a property edit (where there is no need or intention to provide a return value through the `Future`).
+--
+<.> xref:#returning__Class[returning(Class)]
++
+--
+Factory method to instantiate for a control instance for an action returning a value of `` (where this value will be returned through the `Future`).
+--
+<.> xref:#withSkipRules__[withSkipRules()]
++
+--
+Skip checking business rules (hide/disable/validate) before executing the underlying property or action
+--
+<.> xref:#with__ExceptionHandler[with(ExceptionHandler)]
++
+--
+How to handle exceptions if they occur, using the provided xref:system:generated:index/applib/services/wrapper/control/ExceptionHandler.adoc[ExceptionHandler] .
+--
+<.> xref:#with__ExecutorService[with(ExecutorService)]
++
+--
+Specifies the _ExecutorService_ to use to obtain the thread to invoke the action.
+--
+<.> xref:#withUser__UserMemento[withUser(UserMemento)]
++
+--
+Specifies the user for the session used to execute the command asynchronously, in the background.
+--
+<.> xref:#setFuture__Future[setFuture(Future)]
++
+--
+For framework use only.
+--
+
+== Members
+
+[#returningVoid__]
+=== returningVoid()
+
+Factory method to instantiate a control instance for a void action or a property edit (where there is no need or intention to provide a return value through the `Future`).
+
+[#returning__Class]
+=== returning(Class)
+
+Factory method to instantiate for a control instance for an action returning a value of `` (where this value will be returned through the `Future`).
+
+[#withSkipRules__]
+=== withSkipRules()
+
+Skip checking business rules (hide/disable/validate) before executing the underlying property or action
+
+[#with__ExceptionHandler]
+=== with(ExceptionHandler)
+
+How to handle exceptions if they occur, using the provided xref:system:generated:index/applib/services/wrapper/control/ExceptionHandler.adoc[ExceptionHandler] .
+
+The default behaviour is to rethrow the exception.
+
+[#with__ExecutorService]
+=== with(ExecutorService)
+
+Specifies the _ExecutorService_ to use to obtain the thread to invoke the action.
+
+The default executor service is the common pool.
+
+[#withUser__UserMemento]
+=== withUser(UserMemento)
+
+Specifies the user for the session used to execute the command asynchronously, in the background.
+
+If not specified, then the user of the current foreground session is used.
+
+[#setFuture__Future]
+=== setFuture(Future)
+
+For framework use only.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ControlAbstract.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ControlAbstract.adoc
index a601277..bfce6ea 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ControlAbstract.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ControlAbstract.adoc
@@ -26,4 +26,3 @@ Not API.
 === getExecutionModes()
 
 Not API.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExceptionHandler.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExceptionHandler.adoc
index 7cc877d..cbe9a25 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExceptionHandler.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExceptionHandler.adoc
@@ -22,4 +22,3 @@ Handle the exception in some way. Typically this will log and rethrow the except
 === handle(Exception)
 
 Handle the exception in some way. Typically this will log and rethrow the exception. If necessary though it can return some other value instead (must be compatible with the expected return value of the interaction, that is, the action invocation or property edit).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExecutionMode.adoc
index 65181de..51a0486 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/ExecutionMode.adoc
@@ -37,4 +37,3 @@ Skip all business rules.
 Skip actual execution.
 
 This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, SyncControl)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/SyncControl.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/SyncControl.adoc
index 38b3523..0b418f4 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/SyncControl.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/control/SyncControl.adoc
@@ -1,5 +1,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Controls the way that a (synchronous) wrapper works.
+
 == API
 
 [source,java]
@@ -7,12 +9,34 @@
 ----
 class SyncControl {
   SyncControl control()
-  SyncControl withExecute()
-  SyncControl withNoExecute()
+  SyncControl withSkipRules()     // <.>
+  SyncControl with(ExceptionHandler exceptionHandler)     // <.>
+  SyncControl withExecute()     // <.>
+  SyncControl withNoExecute()     // <.>
   ImmutableEnumSet<ExecutionMode> getExecutionModes()     // <.>
 }
 ----
 
+<.> xref:#withSkipRules__[withSkipRules()]
++
+--
+Skip checking business rules (hide/disable/validate) before executing the underlying property or action
+--
+<.> xref:#with__ExceptionHandler[with(ExceptionHandler)]
++
+--
+How to handle exceptions if they occur, using the provided xref:system:generated:index/applib/services/wrapper/control/ExceptionHandler.adoc[ExceptionHandler] .
+--
+<.> xref:#withExecute__[withExecute()]
++
+--
+Explicitly set the action to be executed.
+--
+<.> xref:#withNoExecute__[withNoExecute()]
++
+--
+Explicitly set the action to _not_ be executed, in other words a "dry run".
+--
 <.> xref:#getExecutionModes__[getExecutionModes()]
 +
 --
@@ -21,8 +45,29 @@ Not API.
 
 == Members
 
+[#withSkipRules__]
+=== withSkipRules()
+
+Skip checking business rules (hide/disable/validate) before executing the underlying property or action
+
+[#with__ExceptionHandler]
+=== with(ExceptionHandler)
+
+How to handle exceptions if they occur, using the provided xref:system:generated:index/applib/services/wrapper/control/ExceptionHandler.adoc[ExceptionHandler] .
+
+The default behaviour is to rethrow the exception.
+
+[#withExecute__]
+=== withExecute()
+
+Explicitly set the action to be executed.
+
+[#withNoExecute__]
+=== withNoExecute()
+
+Explicitly set the action to _not_ be executed, in other words a "dry run".
+
 [#getExecutionModes__]
 === getExecutionModes()
 
 Not API.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionArgumentEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionArgumentEvent.adoc
index b542f7e..3dc0665 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionArgumentEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionArgumentEvent.adoc
@@ -32,4 +32,3 @@ The position (0-based) of the invalid argument.
 === getPosition()
 
 The position (0-based) of the invalid argument.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionInvocationEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionInvocationEvent.adoc
index 6fef969..574199b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionInvocationEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ActionInvocationEvent.adoc
@@ -31,4 +31,3 @@ Does not apply
 === getProposed()
 
 Does not apply
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionAddToEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionAddToEvent.adoc
index 122973a..ee172a8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionAddToEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionAddToEvent.adoc
@@ -27,4 +27,3 @@ The object that is being added.
 === getProposed()
 
 The object that is being added.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionMethodEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionMethodEvent.adoc
index 578ee76..bf91bb7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionMethodEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/CollectionMethodEvent.adoc
@@ -71,4 +71,3 @@ The arguments with which the collection's _#getMethodName() method_ was invoked.
 === getReturnValue()
 
 The return value from the _#getMethodName() method_ invocation.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/InteractionEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/InteractionEvent.adoc
index dd87cdc..5917733 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/InteractionEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/InteractionEvent.adoc
@@ -171,4 +171,3 @@ The interpretation of this depends on the subclass:
 * for xref:system:generated:index/applib/services/wrapper/events/VisibilityEvent.adoc[VisibilityEvent] , a veto means that the feature (property, collection, action) is hidden
 * for xref:system:generated:index/applib/services/wrapper/events/UsabilityEvent.adoc[UsabilityEvent] , a veto means that the feature is disabled
 * for xref:system:generated:index/applib/services/wrapper/events/ValidityEvent.adoc[ValidityEvent] , a veto means that the proposed modification (property value, object added/removed, action argument) is invalid
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ParseValueEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ParseValueEvent.adoc
index e0f2281..3322d91 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ParseValueEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/ParseValueEvent.adoc
@@ -28,4 +28,3 @@ Will be the source provided in the _#ParseValueEvent(Object, Identifier, String)
 === getSource()
 
 Will be the source provided in the _#ParseValueEvent(Object, Identifier, String) constructor_ if not null, otherwise will fallback to the proposed value.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/PropertyModifyEvent.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/PropertyModifyEvent.adoc
index 16f0b0b..6926a5e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/PropertyModifyEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/events/PropertyModifyEvent.adoc
@@ -27,4 +27,3 @@ If `null` , then the property was cleared.
 === getProposed()
 
 If `null` , then the property was cleared.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/listeners/InteractionListener.adoc b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/listeners/InteractionListener.adoc
index 7fe351e..0d7d52e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/wrapper/listeners/InteractionListener.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/wrapper/listeners/InteractionListener.adoc
@@ -1,5 +1,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Allows the interactions between the wrapper and the underlying domain object to be observed.
+
 == API
 
 [source,java]
@@ -205,4 +207,3 @@ Will be fired prior to _#actionInvoked(ActionInvocationEvent)_ .
 === actionInvoked(ActionInvocationEvent)
 
 An action was invoked (or an attempt to invoke it was made).
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionId.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionId.adoc
index bae0c7a..daa771b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionId.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionId.adoc
@@ -1,12 +1,65 @@
 :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 [...]
 
+Value type used to identify a transaction within the context of an outer _org.apache.isis.applib.services.iactn.Interaction_ .
+
+The transaction and _org.apache.isis.applib.services.iactn.Interaction_ are associated by the _#getUniqueId() uniqueId_ .
+
+Obtainable from _TransactionService#currentTransactionId()_ .
+
 == API
 
 [source,java]
 .TransactionId.java
 ----
 class TransactionId {
-  TransactionId empty()
+  UUID uniqueId;     // <.>
+  int sequence;     // <.>
+  String context;     // <.>
+  TransactionId empty()     // <.>
 }
 ----
 
+<.> xref:#uniqueId[uniqueId]
++
+--
+The unique identifier of the outer _org.apache.isis.applib.services.iactn.Interaction_ .
+--
+<.> xref:#sequence[sequence]
++
+--
+Identifies the transaction (there could be multiple) within the _org.apache.isis.applib.services.iactn.Interaction_ .
+--
+<.> xref:#context[context]
++
+--
+Identifies the persistence context that this xref:system:generated:index/applib/services/xactn/TransactionId.adoc[TransactionId] was created for.
+--
+<.> xref:#empty__[empty()]
++
+--
+Factory method that returns a nominally "empty" transaction identifier, used as a placeholder.
+--
+
+== Members
+
+[#uniqueId]
+=== uniqueId
+
+The unique identifier of the outer _org.apache.isis.applib.services.iactn.Interaction_ .
+
+[#sequence]
+=== sequence
+
+Identifies the transaction (there could be multiple) within the _org.apache.isis.applib.services.iactn.Interaction_ .
+
+[#context]
+=== context
+
+Identifies the persistence context that this xref:system:generated:index/applib/services/xactn/TransactionId.adoc[TransactionId] was created for.
+
+Useful when there are multiple persistence contexts configured. There are no constraints to format of this String, it is left for the implementation to ensure that the string is a uniqie identifier to the context.
+
+[#empty__]
+=== empty()
+
+Factory method that returns a nominally "empty" transaction identifier, used as a placeholder.
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionService.adoc
index 8af9fde..a3b5328 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionService.adoc
@@ -2,6 +2,8 @@
 
 Provides utilities to access active transactions associated with the current thread.
 
+This is a low-level service that domain objects will typically have little need to leverage; there will normally be a transaction started already by the framework at the beginning of an _org.apache.isis.applib.services.iactn.Interaction_ and committed at the end. On occasion though it can on occasion be useful to take explicit control over transaction boundaries, which is where the methods provided by this domain service an be useful.
+
 == API
 
 [source,java]
@@ -61,4 +63,3 @@ If there is no active transaction associated with the current thread, then does
 === nextTransaction()
 
 Commits the current thread's transaction (if there is one), and in any case begins a new one.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionState.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionState.adoc
index 2d88294..8c3f5db 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionState.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionState.adoc
@@ -1,5 +1,9 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Represents the state of the current transaction.
+
+Obtainable from _TransactionService#currentTransactionState()_ .
+
 == API
 
 [source,java]
@@ -15,8 +19,8 @@ enum TransactionState {
   boolean canCommit()     // <.>
   boolean canAbort()     // <.>
   boolean isComplete()     // <.>
-  boolean isInProgress()
-  boolean mustAbort()
+  boolean isInProgress()     // <.>
+  boolean mustAbort()     // <.>
 }
 ----
 
@@ -28,42 +32,52 @@ No transaction exists.
 <.> xref:#IN_PROGRESS[IN_PROGRESS]
 +
 --
-Started, still in progress.May flush, commit or abort.
+Started, still in progress.
 --
 <.> xref:#MUST_ABORT[MUST_ABORT]
 +
 --
-Started, but has hit an exception.May not flush or commit (will throw an _IllegalStateException_ ), can only abort.Similar to `setRollbackOnly` in EJBs.
+Started, but has hit an exception.
 --
 <.> xref:#COMMITTED[COMMITTED]
 +
 --
-Completed, having successfully committed.May not flush or abort or commit (will throw _IllegalStateException_ ).
+Completed, having successfully committed.
 --
 <.> xref:#ABORTED[ABORTED]
 +
 --
-Completed, having aborted.May not flush, commit or abort (will throw _IllegalStateException_ ).
+Completed, having aborted.
 --
 <.> xref:#canFlush__[canFlush()]
 +
 --
-Whether it is valid to flush the transaction.
+Whether it is valid to flush the transaction (specifically if the transaction is _#IN_PROGRESS in progress_ .
 --
 <.> xref:#canCommit__[canCommit()]
 +
 --
-Whether it is valid to commit the transaction.
+Whether it is valid to commit the transaction (specifically if the transaction is _#IN_PROGRESS in progress_ .
 --
 <.> xref:#canAbort__[canAbort()]
 +
 --
-Whether it is valid to mark as aborted this transaction}.
+Whether it is valid to mark as aborted this transaction.
 --
 <.> xref:#isComplete__[isComplete()]
 +
 --
-Whether the transaction is complete (and so a new one can be started).
+Whether the transaction is complete (that is, is either _#COMMITTED committed_ or _#ABORTED aborted_ ), and so a new transaction can be started.
+--
+<.> xref:#isInProgress__[isInProgress()]
++
+--
+Whether the transaction is _#IN_PROGRESS in progress_ .
+--
+<.> xref:#mustAbort__[mustAbort()]
++
+--
+Whether the transaction _#MUST_ABORT must abort_ .
 --
 
 == Members
@@ -76,40 +90,59 @@ No transaction exists.
 [#IN_PROGRESS]
 === IN_PROGRESS
 
-Started, still in progress.May flush, commit or abort.
+Started, still in progress.
+
+May flush, commit or abort.
 
 [#MUST_ABORT]
 === MUST_ABORT
 
-Started, but has hit an exception.May not flush or commit (will throw an _IllegalStateException_ ), can only abort.Similar to `setRollbackOnly` in EJBs.
+Started, but has hit an exception.
+
+May not flush or commit (will throw an _IllegalStateException_ ), can only abort.
 
 [#COMMITTED]
 === COMMITTED
 
-Completed, having successfully committed.May not flush or abort or commit (will throw _IllegalStateException_ ).
+Completed, having successfully committed.
+
+May not flush or abort or commit (will throw _IllegalStateException_ ).
 
 [#ABORTED]
 === ABORTED
 
-Completed, having aborted.May not flush, commit or abort (will throw _IllegalStateException_ ).
+Completed, having aborted.
+
+May not flush, commit or abort (will throw _IllegalStateException_ ).
 
 [#canFlush__]
 === canFlush()
 
-Whether it is valid to flush the transaction.
+Whether it is valid to flush the transaction (specifically if the transaction is _#IN_PROGRESS in progress_ .
 
 [#canCommit__]
 === canCommit()
 
-Whether it is valid to commit the transaction.
+Whether it is valid to commit the transaction (specifically if the transaction is _#IN_PROGRESS in progress_ .
 
 [#canAbort__]
 === canAbort()
 
-Whether it is valid to mark as aborted this transaction}.
+Whether it is valid to mark as aborted this transaction.
+
+This is the case if the transaction is either currently _#IN_PROGRESS in progress_ or has already been marked as _#MUST_ABORT must abort_ .
 
 [#isComplete__]
 === isComplete()
 
-Whether the transaction is complete (and so a new one can be started).
+Whether the transaction is complete (that is, is either _#COMMITTED committed_ or _#ABORTED aborted_ ), and so a new transaction can be started.
+
+[#isInProgress__]
+=== isInProgress()
+
+Whether the transaction is _#IN_PROGRESS in progress_ .
+
+[#mustAbort__]
+=== mustAbort()
 
+Whether the transaction _#MUST_ABORT must abort_ .
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionalProcessor.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionalProcessor.adoc
index 2326c77..4b56cd5 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionalProcessor.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xactn/TransactionalProcessor.adoc
@@ -1,5 +1,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provides the mechanism to run a block of code within a transaction boundary, using Spring Framework's transaction primitives (such as _TransactionDefinition_ and its annotation equivalent, _Propagation_ ).
+
 == API
 
 [source,java]
@@ -83,4 +85,3 @@ In other words, support a current transaction, create a new one if none exists.
 === runWithinCurrentTransactionElseCreateNew(ThrowingRunnable)
 
 Runs given _runnable_ within an existing transactional boundary, or in the absence of such a boundary creates a new one.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xml/XmlService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xml/XmlService.adoc
index f18460b..5345a83 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xml/XmlService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xml/XmlService.adoc
@@ -1,6 +1,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 [...]
 
-This service provides a number of utility services for interacting with XML _Document_ s
+This service provides a number of utility services for interacting with w3c DOM (XML) _Document_ s
 
 == API
 
@@ -57,4 +57,3 @@ Convenience method to walk XML document.
 === getChildTextValue(Element)
 
 Convenience method to obtain value of child text node.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService.adoc
index a51ffd6..eb69f17 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService.adoc
@@ -1,8 +1,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 [...]
 
-This service allows an XML document to be generated capturing the data of a root entity and specified related entities. This XML can be used for various purposes, such as mail merge/reporting, or adhoc auditing.
+Allows an XML document to be generated capturing the data of a root entity and specified related entities.
 
-The framework provides an implementation of this service ( `XmlSnapshotServiceDefault` ) which is automatically registered and available for use; no further configuration is required.
+An XSD schema (to which the XML will be compatible) can also be generated.
+
+This XML/XSD can be used for various purposes, such as mail merge/reporting, or adhoc auditing.
+
+The service offers a basic API to create a snapshot of a single object, and a more flexible API that allows the size of the graph to be customized.
 
 == API
 
@@ -48,4 +52,3 @@ Creates a Snapshot.Builder that allows the contents of the snapshot to include o
 === getChildElementValue(Element, String, Class)
 
 Convenience method to extract value of an XML element, based on its type.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot.adoc
index eca7b76..9fe22c7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot.adoc
@@ -33,4 +33,3 @@ Converts the snapshotted state into an XML document.
 === getXsdDocument()
 
 Creates a corresponding XSD that describes the structure of the exported XML.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot~Builder.adoc b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot~Builder.adoc
index 1d58022..8578da8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot~Builder.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/xmlsnapshot/XmlSnapshotService~Snapshot~Builder.adoc
@@ -44,4 +44,3 @@ Ditto, but add an XML annotation attribute to the included element(s).
 === build()
 
 Builds the Snapshot.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/snapshot/SnapshottableWithInclusions.adoc b/antora/components/system/modules/generated/pages/index/applib/snapshot/SnapshottableWithInclusions.adoc
index 5eb1b9a..3417c09 100644
--- a/antora/components/system/modules/generated/pages/index/applib/snapshot/SnapshottableWithInclusions.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/snapshot/SnapshottableWithInclusions.adoc
@@ -24,4 +24,3 @@ Paths to include in the snapshot.
 === snapshotInclusions()
 
 Paths to include in the snapshot.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification.adoc b/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification.adoc
index cc3d2d1..641f130 100644
--- a/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification.adoc
@@ -31,4 +31,3 @@ Checks not null and is correct type, and delegates to _#satisfiesSafely(Object)_
 === satisfies(Object)
 
 Checks not null and is correct type, and delegates to _#satisfiesSafely(Object)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification2.adoc b/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification2.adoc
index 72c5ece..a8a58be 100644
--- a/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification2.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/spec/AbstractSpecification2.adoc
@@ -32,4 +32,3 @@ Checks not null and is correct type, and delegates to _#satisfiesTranslatableSaf
 === satisfiesTranslatable(Object)
 
 Checks not null and is correct type, and delegates to _#satisfiesTranslatableSafely(Object)_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/spec/Specification.adoc b/antora/components/system/modules/generated/pages/index/applib/spec/Specification.adoc
index 1c49daa..da153b1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/spec/Specification.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/spec/Specification.adoc
@@ -24,4 +24,3 @@ If `null` then satisfied, otherwise is reason why the specification is not satis
 === satisfies(Object)
 
 If `null` then satisfied, otherwise is reason why the specification is not satisfied.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/spec/Specification2.adoc b/antora/components/system/modules/generated/pages/index/applib/spec/Specification2.adoc
index 5a8242a..e1addc7 100644
--- a/antora/components/system/modules/generated/pages/index/applib/spec/Specification2.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/spec/Specification2.adoc
@@ -26,4 +26,3 @@ If `null` then satisfied, otherwise is the reason (as a xref:system:generated:in
 === satisfiesTranslatable(Object)
 
 If `null` then satisfied, otherwise is the reason (as a xref:system:generated:index/applib/services/i18n/TranslatableString.adoc[TranslatableString] translatable string) as to why the specification is not satisfied.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer.adoc b/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer.adoc
index 5fcdba8..73bc6fb 100644
--- a/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer.adoc
@@ -51,4 +51,3 @@ Append a reason to the list of existing reasons if the condition flag is true.
 === getReason()
 
 Return the combined set of reasons, or `null` if there are none.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer2.adoc b/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer2.adoc
index 66ff46c..ab114f9 100644
--- a/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer2.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/util/ReasonBuffer2.adoc
@@ -86,4 +86,3 @@ Appends reasons.
 === plus(ReasonBuffer2)
 
 Combines sets of reasons from another.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/util/TitleBuffer.adoc b/antora/components/system/modules/generated/pages/index/applib/util/TitleBuffer.adoc
index 54680cc..4d59dec 100644
--- a/antora/components/system/modules/generated/pages/index/applib/util/TitleBuffer.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/util/TitleBuffer.adoc
@@ -273,4 +273,3 @@ Returns a String that represents the value of this object.
 === truncate(int)
 
 Truncates this title so it has a maximum number of words. Spaces are used to determine words, thus two spaces in a title will cause two words to be mistakenly identified.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc b/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
index 2bf3482..2bfb6a8 100644
--- a/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
@@ -60,4 +60,3 @@ Creates a _InteractionDto_ (serializable to XML) for the provided xref:system:ge
 
 [#addReturn__ActionInvocationDto_Class_Object_BookmarkService]
 === addReturn(ActionInvocationDto, Class, Object, BookmarkService)
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/value/Blob.adoc b/antora/components/system/modules/generated/pages/index/applib/value/Blob.adoc
index 31e5a36..231724e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/value/Blob.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/value/Blob.adoc
@@ -51,4 +51,3 @@ Does not close the OutputStream.
 
 [#asImage__]
 === asImage()
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/value/Clob.adoc b/antora/components/system/modules/generated/pages/index/applib/value/Clob.adoc
index 02312ee..6552c82 100644
--- a/antora/components/system/modules/generated/pages/index/applib/value/Clob.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/value/Clob.adoc
@@ -39,4 +39,3 @@ Returns a new xref:system:generated:index/applib/value/Clob.adoc[Clob] of given
 _name_ may or may not include the desired filename extension, it is guaranteed, that the resulting xref:system:generated:index/applib/value/Clob.adoc[Clob] has the appropriate extension as constraint by the given _mimeType_ .
 
 For more fine-grained control use one of the xref:system:generated:index/applib/value/Clob.adoc[Clob] constructors directly.
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/value/Markup.adoc b/antora/components/system/modules/generated/pages/index/applib/value/Markup.adoc
index c3d35b8..7591caa 100644
--- a/antora/components/system/modules/generated/pages/index/applib/value/Markup.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/value/Markup.adoc
@@ -32,4 +32,3 @@ syntactic sugar
 === valueOfHtml(String)
 
 syntactic sugar
-
diff --git a/antora/components/system/modules/generated/pages/index/commons/collections/Can.adoc b/antora/components/system/modules/generated/pages/index/commons/collections/Can.adoc
index 22eef46..fd72d49 100644
--- a/antora/components/system/modules/generated/pages/index/commons/collections/Can.adoc
+++ b/antora/components/system/modules/generated/pages/index/commons/collections/Can.adoc
@@ -337,4 +337,3 @@ Let _n_ be the number of elements in _other_ . Returns whether the last _n_ elem
 
 [#toArray__Class]
 === toArray(Class)
-
diff --git a/antora/components/system/modules/generated/pages/index/commons/collections/Cardinality.adoc b/antora/components/system/modules/generated/pages/index/commons/collections/Cardinality.adoc
index 4c1273d..5c0fb81 100644
--- a/antora/components/system/modules/generated/pages/index/commons/collections/Cardinality.adoc
+++ b/antora/components/system/modules/generated/pages/index/commons/collections/Cardinality.adoc
@@ -47,4 +47,3 @@ The container has exactly one element.
 === MULTIPLE
 
 The container has at least two elements.
-
diff --git a/antora/components/system/modules/generated/pages/index/commons/having/HasUniqueId.adoc b/antora/components/system/modules/generated/pages/index/commons/having/HasUniqueId.adoc
index fea71f2..52934e4 100644
--- a/antora/components/system/modules/generated/pages/index/commons/having/HasUniqueId.adoc
+++ b/antora/components/system/modules/generated/pages/index/commons/having/HasUniqueId.adoc
@@ -22,4 +22,3 @@ A unique identifier (a GUID).
 === getUniqueId()
 
 A unique identifier (a GUID).
-
diff --git a/antora/components/system/modules/generated/pages/index/commons/having/HasUsername.adoc b/antora/components/system/modules/generated/pages/index/commons/having/HasUsername.adoc
index fe79bd8..f8206d3 100644
--- a/antora/components/system/modules/generated/pages/index/commons/having/HasUsername.adoc
+++ b/antora/components/system/modules/generated/pages/index/commons/having/HasUsername.adoc
@@ -26,4 +26,3 @@ The user that created this object.
 === getUsername()
 
 The user that created this object.
-
diff --git a/antora/components/system/modules/generated/pages/index/core/interaction/session/InteractionFactory.adoc b/antora/components/system/modules/generated/pages/index/core/interaction/session/InteractionFactory.adoc
new file mode 100644
index 0000000..deeb9e6
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/core/interaction/session/InteractionFactory.adoc
@@ -0,0 +1,109 @@
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+The factory of _InteractionSession_ (s) and _AuthenticationLayer_ (s), also holding a reference to the current authentication layer stack using a thread-local.
+
+The implementation is a singleton service.
+
+== API
+
+[source,java]
+.InteractionFactory.java
+----
+interface InteractionFactory {
+  AuthenticationLayer openInteraction()     // <.>
+  AuthenticationLayer openInteraction(Authentication authentication)     // <.>
+  boolean isInInteractionSession()     // <.>
+  R callAuthenticated(Authentication authentication, Callable<R> callable)     // <.>
+  void runAuthenticated(Authentication authentication, ThrowingRunnable runnable)     // <.>
+  R callAnonymous(Callable<R> callable)     // <.>
+  void runAnonymous(ThrowingRunnable runnable)     // <.>
+  void closeSessionStack()     // <.>
+}
+----
+
+<.> xref:#openInteraction__[openInteraction()]
++
+--
+If present, reuses the current top level _AuthenticationLayer_ , otherwise creates a new anonymous one.
+--
+<.> xref:#openInteraction__Authentication[openInteraction(Authentication)]
++
+--
+Returns a new or reused _AuthenticationLayer_ that is a holder of _Authentication_ on top of the current thread's authentication layer stack.
+--
+<.> xref:#isInInteractionSession__[isInInteractionSession()]
+<.> xref:#callAuthenticated__Authentication_Callable[callAuthenticated(Authentication, Callable)]
++
+--
+Executes a block of code with a new or reused _InteractionSession_ using a new or reused _AuthenticationLayer_ .
+--
+<.> xref:#runAuthenticated__Authentication_ThrowingRunnable[runAuthenticated(Authentication, ThrowingRunnable)]
++
+--
+Variant of _#callAuthenticated(Authentication, Callable)_ that takes a runnable.
+--
+<.> xref:#callAnonymous__Callable[callAnonymous(Callable)]
++
+--
+Executes a block of code with a new or reused _InteractionSession_ using a new or reused _AuthenticationLayer_ .
+--
+<.> xref:#runAnonymous__ThrowingRunnable[runAnonymous(ThrowingRunnable)]
++
+--
+Variant of _#callAnonymous(Callable)_ that takes a runnable.
+--
+<.> xref:#closeSessionStack__[closeSessionStack()]
++
+--
+closes all open _AuthenticationLayer_ (s) as stacked on the current thread
+--
+
+== Members
+
+[#openInteraction__]
+=== openInteraction()
+
+If present, reuses the current top level _AuthenticationLayer_ , otherwise creates a new anonymous one.
+
+[#openInteraction__Authentication]
+=== openInteraction(Authentication)
+
+Returns a new or reused _AuthenticationLayer_ that is a holder of _Authentication_ on top of the current thread's authentication layer stack.
+
+If available reuses an existing _InteractionSession_ , otherwise creates a new one.
+
+The _InteractionSession_ represents a user's span of activities interacting with the application. The session's stack is later closed using _#closeSessionStack()_ .
+
+[#isInInteractionSession__]
+=== isInInteractionSession()
+
+[#callAuthenticated__Authentication_Callable]
+=== callAuthenticated(Authentication, Callable)
+
+Executes a block of code with a new or reused _InteractionSession_ using a new or reused _AuthenticationLayer_ .
+
+If there is currently no _InteractionSession_ a new one is created.
+
+If there is currently an _AuthenticationLayer_ that has an equal _Authentication_ to the given one, it is reused, otherwise a new one is created.
+
+[#runAuthenticated__Authentication_ThrowingRunnable]
+=== runAuthenticated(Authentication, ThrowingRunnable)
+
+Variant of _#callAuthenticated(Authentication, Callable)_ that takes a runnable.
+
+[#callAnonymous__Callable]
+=== callAnonymous(Callable)
+
+Executes a block of code with a new or reused _InteractionSession_ using a new or reused _AuthenticationLayer_ .
+
+If there is currently no _InteractionSession_ a new one is created and a new anonymous _AuthenticationLayer_ is returned. Otherwise both, session and layer are reused.
+
+[#runAnonymous__ThrowingRunnable]
+=== runAnonymous(ThrowingRunnable)
+
+Variant of _#callAnonymous(Callable)_ that takes a runnable.
+
+[#closeSessionStack__]
+=== closeSessionStack()
+
+closes all open _AuthenticationLayer_ (s) as stacked on the current thread
diff --git a/antora/components/system/modules/generated/pages/index/core/runtimeservices/transaction/TransactionServiceSpring.adoc b/antora/components/system/modules/generated/pages/index/core/runtimeservices/transaction/TransactionServiceSpring.adoc
index d8ba97f..4397cb5 100644
--- a/antora/components/system/modules/generated/pages/index/core/runtimeservices/transaction/TransactionServiceSpring.adoc
+++ b/antora/components/system/modules/generated/pages/index/core/runtimeservices/transaction/TransactionServiceSpring.adoc
@@ -50,4 +50,3 @@ TRANSACTION END BOUNDARY
 === afterLeavingTransactionalBoundary(InteractionSession)
 
 INTERACTION END BOUNDARY
-
diff --git a/antora/components/system/modules/generated/pages/index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc b/antora/components/system/modules/generated/pages/index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc
index 1bb9121..aed8c42 100644
--- a/antora/components/system/modules/generated/pages/index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc
+++ b/antora/components/system/modules/generated/pages/index/core/transaction/changetracking/EntityChangeTrackerDefault.adoc
@@ -35,4 +35,3 @@ TRANSACTION END BOUNDARY
 === onPreCommit(TransactionBeforeCompletionEvent)
 
 TRANSACTION END BOUNDARY
-
diff --git a/antora/components/system/modules/generated/pages/index/core/transaction/events/TransactionAfterCompletionEvent.adoc b/antora/components/system/modules/generated/pages/index/core/transaction/events/TransactionAfterCompletionEvent.adoc
index 6e8e803..391c3af 100644
--- a/antora/components/system/modules/generated/pages/index/core/transaction/events/TransactionAfterCompletionEvent.adoc
+++ b/antora/components/system/modules/generated/pages/index/core/transaction/events/TransactionAfterCompletionEvent.adoc
@@ -48,4 +48,3 @@ Completion status in case of proper rollback.
 === UNKNOWN
 
 Completion status in case of heuristic mixed completion or system errors.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.adoc
index 063e603..8b8533c 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/IsisModuleExtCommandLogImpl.adoc
@@ -23,4 +23,3 @@ For tests that need to delete the command table first. Should be run in the @Bef
 === getTeardownFixtureWillDelete()
 
 For tests that need to delete the command table first. Should be run in the @Before of the test.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/mixins/HasUniqueId_command.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/mixins/HasUniqueId_command.adoc
index dc779ee..d888388 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/mixins/HasUniqueId_command.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandlog/impl/mixins/HasUniqueId_command.adoc
@@ -29,4 +29,3 @@ Hide if the contributee is a xref:system:generated:index/applib/services/command
 === hideAct()
 
 Hide if the contributee is a xref:system:generated:index/applib/services/command/Command.adoc[Command] , because xref:system:generated:index/applib/services/command/Command.adoc[Command] s already have a _Command#getParent() parent_ property.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/restapi/CommandRetrievalService.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/restapi/CommandRetrievalService.adoc
index 5393acf..5be902e 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/restapi/CommandRetrievalService.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/restapi/CommandRetrievalService.adoc
@@ -25,4 +25,3 @@ These actions should be called with HTTP Accept Header set to: `application/xml;
 === findCommandsOnPrimaryFrom(UUID, Integer)
 
 These actions should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandsDto"` 
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
index 3681d80..ac99681 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
@@ -58,4 +58,3 @@ These actions should be called with HTTP Accept Header set to: `application/xml;
 === downloadCommandById(UUID, String)
 
 This action should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandDto"` 
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.adoc
index 65dde4c..baf18d2 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analyser/CommandReplayAnalyser.adoc
@@ -16,4 +16,3 @@ interface CommandReplayAnalyser {
 
 [#analyzeReplay__CommandJdo]
 === analyzeReplay(CommandJdo)
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.adoc
index d6d8a11..03bb159 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/analysis/CommandReplayAnalysisService.adoc
@@ -24,4 +24,3 @@ if hit an issue with the command having been replayed, then mark this as in erro
 === analyse(CommandJdo)
 
 if hit an issue with the command having been replayed, then mark this as in error. This will effectively block the running of any further commands until the adminstrator fixes the issue.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/clock/TickingClockService.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/clock/TickingClockService.adoc
index fc24488..56c871e 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/clock/TickingClockService.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/clock/TickingClockService.adoc
@@ -46,4 +46,3 @@ IMPORTANT: this method is not thread-safe, because the clock is a globally-scope
 Executes the callable, setting the clock to be the specified time beforehand (and reinstating it to its original time afterwards).
 
 IMPORTANT: this method is not thread-safe, because the clock is a globally-scoped singleton rather than a thread-local. This method should therefore only be used in single-user systems, eg a replay secondary.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/fetch/CommandFetcher.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/fetch/CommandFetcher.adoc
index f714279..bd3c262 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/fetch/CommandFetcher.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/fetch/CommandFetcher.adoc
@@ -25,4 +25,3 @@ Replicates a single command.
 === fetchCommand(CommandJdo)
 
 Replicates a single command.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.adoc b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.adoc
index 0dd1562..bff458c 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/commandreplay/secondary/spi/ReplayCommandExecutionController.adoc
@@ -26,4 +26,3 @@ The current state, or `null` if the service implementing this SPI has not yet be
 === getState()
 
 The current state, or `null` if the service implementing this SPI has not yet been initialized.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/CalendarEventable.adoc b/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/CalendarEventable.adoc
index 5a02815..4f8f410 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/CalendarEventable.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/CalendarEventable.adoc
@@ -27,4 +27,3 @@ The name of the calendar to which this event belongs.
 For example, an `Employee` might provide have a `employedOn` , so the calendar name would be "employedOn"
 
 If there is possibly more than one date associated with the entity, then use xref:system:generated:index/extensions/fullcalendar/applib/Calendarable.adoc[Calendarable] instead.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/Calendarable.adoc b/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/Calendarable.adoc
index a2ff31e..b983e25 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/Calendarable.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/fullcalendar/applib/Calendarable.adoc
@@ -37,4 +37,3 @@ For example, an event of a lease's `FixedBreakOption` has three dates: the _brea
 === getCalendarEvents()
 
 The events associated with this object, keyed by their corresponding _#getCalendarNames() calendar name_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/quartz/context/JobExecutionData.adoc b/antora/components/system/modules/generated/pages/index/extensions/quartz/context/JobExecutionData.adoc
index 8a17511..06292e4 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/quartz/context/JobExecutionData.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/quartz/context/JobExecutionData.adoc
@@ -35,4 +35,3 @@ Lookup property from the job detail.
 === setString(String, String)
 
 Save key into the job detail obtained from context.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/restclient/ResponseDigest.adoc b/antora/components/system/modules/generated/pages/index/extensions/restclient/ResponseDigest.adoc
index cd00867..02db74a 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/restclient/ResponseDigest.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/restclient/ResponseDigest.adoc
@@ -79,4 +79,3 @@ a-synchronous response failure processing
 
 [#multipleOrElseMapFailure__Function]
 === multipleOrElseMapFailure(Function)
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/SecmanConfiguration.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/SecmanConfiguration.adoc
index 70d5790..ceb497d 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/SecmanConfiguration.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/SecmanConfiguration.adoc
@@ -67,4 +67,3 @@ Delegated users, on first successful logon, are auto-created but disabled (by de
 This option allows to override this behavior, such that authenticated users are also auto-enabled.
 
 default: false
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermission.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermission.adoc
index 66944fe..57a494f 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermission.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermission.adoc
@@ -42,4 +42,3 @@ having a title() method (rather than using @Title annotation) is necessary as a
 === title()
 
 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
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionMode.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionMode.adoc
index 8bef7d3..18bb298 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionMode.adoc
@@ -44,4 +44,3 @@ In other words, whether they can execute (if an action, modify/clear (if a prope
 The xref:system:generated:index/extensions/secman/api/permission/ApplicationPermissionRule.adoc[ApplicationPermissionRule] of the xref:system:generated:index/extensions/secman/api/permission/ApplicationPermission.adoc[ApplicationPermission] indicates whether access is being granted or denied.
 
 Note that the Wicket viewer does not at the time of writing (Isis 1.6.0) support the notion of mutable collections. The RO viewer does, however.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRepository.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRepository.adoc
index 14a1ef8..a988397 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRepository.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRepository.adoc
@@ -24,4 +24,3 @@ interface ApplicationPermissionRepository<P> {
 
 [#newApplicationPermission__]
 === newApplicationPermission()
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRule.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRule.adoc
index 16802f6..0719429 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRule.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/ApplicationPermissionRule.adoc
@@ -40,4 +40,3 @@ The xref:system:generated:index/extensions/secman/api/permission/ApplicationPerm
 The permission prevents the ability to view/use the _ApplicationFeature_ .
 
 The xref:system:generated:index/extensions/secman/api/permission/ApplicationPermissionMode.adoc[ApplicationPermissionMode] determines whether the permission is to only view or also to use the _ApplicationFeature_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/PermissionsEvaluationService.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/PermissionsEvaluationService.adoc
index 13e1f5d..eb440f2 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/PermissionsEvaluationService.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/permission/PermissionsEvaluationService.adoc
@@ -20,4 +20,3 @@ interface PermissionsEvaluationService {
 
 [#evaluate__ApplicationFeatureId_ApplicationPermissionMode_Collection]
 === evaluate(ApplicationFeatureId, ApplicationPermissionMode, Collection)
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRole.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRole.adoc
index 8d9bc42..6fbab75 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRole.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRole.adoc
@@ -29,4 +29,3 @@ having a title() method (rather than using @Title annotation) is necessary as a
 === title()
 
 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
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRoleRepository.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRoleRepository.adoc
index 22d3f1c..a4a0b65 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRoleRepository.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/role/ApplicationRoleRepository.adoc
@@ -37,4 +37,3 @@ auto-complete support
 === findMatching(String)
 
 auto-complete support
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.adoc
index e5f803c..1563a2f 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyEvaluator.adoc
@@ -28,4 +28,3 @@ Whether this evaluator can determine the tenancy of the specified domain entity
 Whether this evaluator can determine the tenancy of the specified domain entity (such as `ToDoItem` ) being interacted with (the "what").
 
 This method is also called to determine if the evaluator is also able to determine the tenancy of the security module's own xref:system:generated:index/extensions/secman/api/user/ApplicationUser.adoc[ApplicationUser] , ie the "who" is doing the interacting. If the evaluator does not handle the class, then the fallback behaviour is to invoke _ApplicationUser#getAtPath()_ } on the xref:system:generated:index/extensions/secman/api/user/ApplicationUser.adoc[ApplicationUser] and use the path  [...]
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyRepository.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyRepository.adoc
index 84fa645..3151ddc 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyRepository.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/tenancy/ApplicationTenancyRepository.adoc
@@ -35,4 +35,3 @@ auto-complete support
 === findMatching(String)
 
 auto-complete support
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUser.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUser.adoc
index bd7652d..d67e4a3 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUser.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUser.adoc
@@ -55,4 +55,3 @@ having a title() method (rather than using @Title annotation) is necessary as a
 === title()
 
 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
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUserRepository.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUserRepository.adoc
index 8e3249c..f99e283 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUserRepository.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/api/user/ApplicationUserRepository.adoc
@@ -42,4 +42,3 @@ auto-complete support
 === findMatching(String)
 
 auto-complete support
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.adoc b/antora/components/system/modules/generated/pages/index/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.adoc
index 0ff6972..485af14 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/secman/shiro/IsisModuleExtSecmanShiroRealm.adoc
@@ -25,4 +25,3 @@ Configures a _org.apache.shiro.authz.permission.PermissionResolver_ that knows h
 === IsisModuleExtSecmanShiroRealm
 
 Configures a _org.apache.shiro.authz.permission.PermissionResolver_ that knows how to process the permission strings that are provided by Isis' _Authorizor_ for Shiro.
-
diff --git a/antora/components/system/modules/generated/pages/index/extensions/shirorealmldap/realm/impl/IsisLdapRealm.adoc b/antora/components/system/modules/generated/pages/index/extensions/shirorealmldap/realm/impl/IsisLdapRealm.adoc
index a4bf5e7..afd833a 100644
--- a/antora/components/system/modules/generated/pages/index/extensions/shirorealmldap/realm/impl/IsisLdapRealm.adoc
+++ b/antora/components/system/modules/generated/pages/index/extensions/shirorealmldap/realm/impl/IsisLdapRealm.adoc
@@ -141,4 +141,3 @@ ldapRealm.permissionsByRole=\
    self-install_role = *:ToDoItemsFixturesService:install:* ; \
    admin_role = *
 ----
-
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/applib/services/JdoSupportService.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/applib/services/JdoSupportService.adoc
index c00e8f3..d0c5da8 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/applib/services/JdoSupportService.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/applib/services/JdoSupportService.adoc
@@ -135,4 +135,3 @@ For RDBMS any single-valued member will be fetched in the original SQL query, bu
 === disableMultivaluedFetch(Query)
 
 Fetch Optimization
-
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
index c487a5d..fa72be9 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
@@ -36,4 +36,3 @@ Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _
 === getTransactionInterceptorFactory()
 
 AOP PATCH
-
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
index 66dbb31..5468465 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
@@ -52,4 +52,3 @@ Does nothing, not important event for Isis to track.
 === postClear(InstanceLifecycleEvent)
 
 Does nothing, not important event for Isis to track.
-
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jpa/applib/services/JpaSupportService.adoc b/antora/components/system/modules/generated/pages/index/persistence/jpa/applib/services/JpaSupportService.adoc
index 69e4402..fa96454 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jpa/applib/services/JpaSupportService.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jpa/applib/services/JpaSupportService.adoc
@@ -35,4 +35,3 @@ Optionally returns the current interaction's _EntityManager_ , that is bound to
 === getEntityManagerElseFail(Class)
 
 Returns the current interaction's _EntityManager_ that is managing the given domain type _entityType_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/security/shiro/authorization/AuthorizorShiro.adoc b/antora/components/system/modules/generated/pages/index/security/shiro/authorization/AuthorizorShiro.adoc
index cd25d4c..e2e8a95 100644
--- a/antora/components/system/modules/generated/pages/index/security/shiro/authorization/AuthorizorShiro.adoc
+++ b/antora/components/system/modules/generated/pages/index/security/shiro/authorization/AuthorizorShiro.adoc
@@ -39,4 +39,3 @@ Returns `false` because the checking across all roles is done in _#isVisibleInAn
 === isUsableInRole(String, Identifier)
 
 Returns `false` because the checking across all roles is done in _#isUsableInAnyRole(Identifier)_ , which is always called prior to this.
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/Chained.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/Chained.adoc
index 537f0eb..c0cabae 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/Chained.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/Chained.adoc
@@ -37,4 +37,3 @@ Implementations where successive intervals are contiguous should instead impleme
 The object (usually an xref:system:generated:index/subdomains/base/applib/with/WithInterval.adoc[WithInterval] , but not necessarily) that succeeds this one, if any (not necessarily contiguously).
 
 Implementations where successive intervals are contiguous should instead implement xref:system:generated:index/subdomains/base/applib/with/WithIntervalContiguous.adoc[WithIntervalContiguous] .
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/services/calendar/CalendarService.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/services/calendar/CalendarService.adoc
index 8c40d939..afa634e 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/services/calendar/CalendarService.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/services/calendar/CalendarService.adoc
@@ -38,4 +38,3 @@ class CalendarService {
 
 - use _ClockService#getClock()_ .getEpochMillis()
 ====
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/utils/TitleBuilder.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/utils/TitleBuilder.adoc
index ad49f19..b7b2f0b 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/utils/TitleBuilder.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/utils/TitleBuilder.adoc
@@ -40,4 +40,3 @@ class TitleBuilder {
 
 - this method does nothing...
 ====
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/AbstractInterval.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/AbstractInterval.adoc
index 80019be..56277cb 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/AbstractInterval.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/AbstractInterval.adoc
@@ -90,4 +90,3 @@ Does this time interval contain the specified time interval.
 === within(T)
 
 Does this interval is within the specified interval
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/LocalDateInterval.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/LocalDateInterval.adoc
index 020554d..8439e5b 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/LocalDateInterval.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/LocalDateInterval.adoc
@@ -43,4 +43,3 @@ Parse a string representation of a LocalDateInterval Since this method is only u
 === endDateFromStartDate(LocalDate)
 
 Returns an end date given the start date of the next adjoining interval
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/VT.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/VT.adoc
index ddbbe5a..cab9d96 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/VT.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/valuetypes/VT.adoc
@@ -47,4 +47,3 @@ class VT {
 
 [#ld__String]
 === ld(String)
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithInterval.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithInterval.adoc
index a3c3edc..e3e965f 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithInterval.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithInterval.adoc
@@ -42,4 +42,3 @@ A value of `null` implies that the parent's start date should be used. If that i
 The end date of the interval.
 
 A value of `null` implies that the parent's end date should be used. If that is `null` , then implies 'the end of time'.
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithIntervalContiguous.adoc b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithIntervalContiguous.adoc
index 5b36649..9efedca 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithIntervalContiguous.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/base/applib/with/WithIntervalContiguous.adoc
@@ -54,4 +54,3 @@ Implementations where successive intervals are NOT contiguous should instead imp
 Show this xref:system:generated:index/subdomains/base/applib/with/WithIntervalContiguous.adoc[WithIntervalContiguous] in context with its predecessors and successors.
 
 This will typically (always) be a derived collection obtained by filtering a collection of the "parent".
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/ExcelService.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/ExcelService.adoc
index fe3d8fb..88ab621 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/ExcelService.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/ExcelService.adoc
@@ -54,4 +54,3 @@ There are no specific restrictions on the domain objects; they can be either per
 Returns a list of objects for each line in the spreadsheet, of the specified type.
 
 If the class is a view model then the objects will be properly instantiated, with the correct view model memento); otherwise the objects will be simple transient objects.
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/WorksheetSpec.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/WorksheetSpec.adoc
index e992ae2..572e9a3 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/WorksheetSpec.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/WorksheetSpec.adoc
@@ -25,4 +25,3 @@ class WorksheetSpec {
 
 [#WorksheetSpec]
 === WorksheetSpec
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/ExcelServiceImpl.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/ExcelServiceImpl.adoc
index 273783b..4e5196f 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/ExcelServiceImpl.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/ExcelServiceImpl.adoc
@@ -142,4 +142,3 @@ As _#fromExcel(Blob, Class, String)_ , but specifying the class name and sheet n
 === fromExcel(Blob, List)
 
 As _#fromExcel(Blob, WorksheetSpec)_ , but reading multiple sheets (and returning a list of lists of domain objects).
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/Mode.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/Mode.adoc
index ded7bd9..9676673 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/Mode.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/Mode.adoc
@@ -33,4 +33,3 @@ All cells must be well formed and with valid data
 === RELAXED
 
 Ignore any cells that cannot be interpreted.
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/SheetPivoter.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/SheetPivoter.adoc
index 5103678..4fc1400 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/SheetPivoter.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/applib/dom/util/SheetPivoter.adoc
@@ -39,4 +39,3 @@ The source sheet has to honour the following conventions for pivot to be success
 * All other _Row_ 's, if present, contain the data for the pivot. Only numeric values in the column(s) annoted "value" will be summed.
 
 The pivot will use the distinct values of the first column marked "row" (left-to-right) as row labels. The distinct values of the columns marked as "column" as column labels (in the order of the specified order - if present. Otherwise in the order in which they appear in _Row_ (0) left-to-right.) The values of the pivot are taken from the column(s) marked "value" (in the order of the specified order - if present. Otherwise in the order in which they appear in _Row_ (0) left-to-right.) Th [...]
-
diff --git a/antora/components/system/modules/generated/pages/index/subdomains/excel/testing/ExcelFixture2.adoc b/antora/components/system/modules/generated/pages/index/subdomains/excel/testing/ExcelFixture2.adoc
index 369f98a..a278d98 100644
--- a/antora/components/system/modules/generated/pages/index/subdomains/excel/testing/ExcelFixture2.adoc
+++ b/antora/components/system/modules/generated/pages/index/subdomains/excel/testing/ExcelFixture2.adoc
@@ -32,4 +32,3 @@ Input, mandatory ... how to process each sheet of the workbook.
 === matcher
 
 Input, mandatory ... how to process each sheet of the workbook.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Booleans.adoc b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Booleans.adoc
index bf97581..d2e629a 100644
--- a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Booleans.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Booleans.adoc
@@ -36,4 +36,3 @@ Same as _#any()_ .
 === either()
 
 Same as _#any()_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Collections.adoc b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Collections.adoc
index 2aeb67a..eaaec80 100644
--- a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Collections.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/Collections.adoc
@@ -81,4 +81,3 @@ class Collections {
 
 - renamed to _#anyBounded(Class)_ .
 ====
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/FakeDataService.adoc b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/FakeDataService.adoc
index 6b10189..96c5485 100644
--- a/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/FakeDataService.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/fakedata/applib/services/FakeDataService.adoc
@@ -67,4 +67,3 @@ Access to the full API of the underlying javafaker library.
 === javaFaker()
 
 Access to the full API of the underlying javafaker library.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/ThrowableMatchers.adoc b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/ThrowableMatchers.adoc
index 826f280..1f98cca 100644
--- a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/ThrowableMatchers.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/ThrowableMatchers.adoc
@@ -23,4 +23,3 @@ Matches when the exception's causal chain contains the given _type_
 === causedBy(Class)
 
 Matches when the exception's causal chain contains the given _type_
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/swagger/SwaggerExporter.adoc b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/swagger/SwaggerExporter.adoc
index 8f67a20..4b231bc 100644
--- a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/swagger/SwaggerExporter.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/swagger/SwaggerExporter.adoc
@@ -8,9 +8,9 @@
 class SwaggerExporter {
   SwaggerExporter(final ServiceRegistry registry)
   SwaggerExporter(final SwaggerService swaggerService)
-  void export(SwaggerService.Visibility visibility, SwaggerService.Format format)
-  void export(SwaggerService.Visibility visibility, SwaggerService.Format format, File outputDir)
-  void export(SwaggerService.Visibility visibility, SwaggerService.Format format, File outputDir, String fileNamePrefix)
+  void export(Visibility visibility, Format format)
+  void export(Visibility visibility, Format format, File outputDir)
+  void export(Visibility visibility, Format format, File outputDir, String fileNamePrefix)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/validate/DomainModelValidator.adoc b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/validate/DomainModelValidator.adoc
index 7768954..4bbbcb5 100644
--- a/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/validate/DomainModelValidator.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/integtestsupport/applib/validate/DomainModelValidator.adoc
@@ -49,4 +49,3 @@ Alternative way of checking
 === anyMatchesContaining(Class, String)
 
 primarily used for testing
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/comparable/ComparableContractTester.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/comparable/ComparableContractTester.adoc
index ab7afb8..1b542ee 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/comparable/ComparableContractTester.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/comparable/ComparableContractTester.adoc
@@ -34,4 +34,3 @@ Provide an array of tuples; each tuple should consist of 4 elements, whereby ite
 === listOf(E)
 
 Syntax sugar to remove boilerplate from subclasses.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/files/Files.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/files/Files.adoc
index 19b6159..eaf766b 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/files/Files.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/files/Files.adoc
@@ -25,4 +25,3 @@ class Files {
 
 [#deleteFilesWithPrefix__String_String_Recursion]
 === deleteFilesWithPrefix(String, String, Recursion)
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jaxb/JaxbMatchers.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jaxb/JaxbMatchers.adoc
index d715b44..d686fa5 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jaxb/JaxbMatchers.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jaxb/JaxbMatchers.adoc
@@ -22,4 +22,3 @@ Performs an equality comparison of a _javax.xml.bind.annotation.XmlRootElement_
 === isEquivalentTo(T)
 
 Performs an equality comparison of a _javax.xml.bind.annotation.XmlRootElement_ -annotated class to another by converting into XML first.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc
index a06fb84..67b1ab2 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/Imposterisers.adoc
@@ -16,4 +16,3 @@ class Imposterisers {
 
 [#getDefault__]
 === getDefault()
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/InjectIntoJMockAction.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/InjectIntoJMockAction.adoc
index 5a207e6..dea5340 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/InjectIntoJMockAction.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/InjectIntoJMockAction.adoc
@@ -24,4 +24,3 @@ Factory
 === injectInto()
 
 Factory
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/JUnitRuleMockery2.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/JUnitRuleMockery2.adoc
index c54a7e7..0b610c5 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/JUnitRuleMockery2.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/jmocking/JUnitRuleMockery2.adoc
@@ -95,4 +95,3 @@ Ignore a set of mocks.
 === oneOf(Object)
 
 Require one interaction
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointPublishingRule.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointPublishingRule.adoc
index 6722247..4a6ef28 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointPublishingRule.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointPublishingRule.adoc
@@ -30,4 +30,3 @@ For any endpoints where the address is not specified, ports are assigned startin
 === INITIAL_PORT
 
 For any endpoints where the address is not specified, ports are assigned starting from this.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointSpec.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointSpec.adoc
index f945f33..69cfaee 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointSpec.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/soap/SoapEndpointSpec.adoc
@@ -30,4 +30,3 @@ Populated when published if not otherwise.
 === setEndpointAddress(String)
 
 Populated when published if not otherwise.
-
diff --git a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/utils/IndentPrinter.adoc b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/utils/IndentPrinter.adoc
index 88e1dcb..91f0912 100644
--- a/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/utils/IndentPrinter.adoc
+++ b/antora/components/system/modules/generated/pages/index/testing/unittestsupport/applib/core/utils/IndentPrinter.adoc
@@ -117,4 +117,3 @@ Prints the current indent level.
 === println()
 
 Prints an end-of-line character (if enabled via addNewLines property). Defaults to outputting a single '\n' character but by using a custom Writer, e.g. PlatformLineWriter, you can get platform-specific end-of-line characters.
-
diff --git a/antora/components/system/modules/generated/pages/index/valuetypes/markdown/applib/value/Converter.adoc b/antora/components/system/modules/generated/pages/index/valuetypes/markdown/applib/value/Converter.adoc
index 0438649..0c75a4a 100644
--- a/antora/components/system/modules/generated/pages/index/valuetypes/markdown/applib/value/Converter.adoc
+++ b/antora/components/system/modules/generated/pages/index/valuetypes/markdown/applib/value/Converter.adoc
@@ -43,4 +43,3 @@ includeJs("/scripts/prism1.14.js");
 
  _@import "prism.css"_ .
 ----
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/JsonRepresentation.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/JsonRepresentation.adoc
index 5729dfe..c709906 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/JsonRepresentation.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/JsonRepresentation.adoc
@@ -550,4 +550,3 @@ In fact, the method creates a new instance of the specified type, which shares t
 === ensureArray()
 
 A reciprocal of the behaviour of the automatic dereferencing of arrays that occurs when there is only a single instance.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/LinkRepresentation.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/LinkRepresentation.adoc
index f1fcd94..ec983da 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/LinkRepresentation.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/LinkRepresentation.adoc
@@ -40,4 +40,3 @@ Returns the "arguments" json-property of the link (a map).
 Returns the "arguments" json-property of the link (a map).
 
 If there is no "arguments" node, then as a convenience will return an empty map.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/Rel.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/Rel.adoc
index b3b2eae..1ac309c 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/Rel.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/Rel.adoc
@@ -65,4 +65,3 @@ For those xref:system:generated:index/viewer/restfulobjects/applib/Rel.adoc[Rel]
 === andParam(String, String)
 
 For those xref:system:generated:index/viewer/restfulobjects/applib/Rel.adoc[Rel] s that also take a param
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RelDefinition.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RelDefinition.adoc
index 071f385..8b2d992 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RelDefinition.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RelDefinition.adoc
@@ -48,4 +48,3 @@ xref:system:generated:index/viewer/restfulobjects/applib/Rel.adoc[Rel] defined b
 === IMPL
 
 Proprietary rel defined by implementation.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RepresentationType.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RepresentationType.adoc
index 1326847..4952af5 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RepresentationType.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RepresentationType.adoc
@@ -102,4 +102,3 @@ whether any of the xref:system:generated:index/viewer/restfulobjects/applib/Repr
 === matchesJsonProfileWithParameter(List, String)
 
 whether any of the xref:system:generated:index/viewer/restfulobjects/applib/RepresentationType.adoc[RepresentationType] s matches any (accept header) JSON _MediaType_ with specified parameter.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RestfulResponse.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RestfulResponse.adoc
index afa97b8..3be49de 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RestfulResponse.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/RestfulResponse.adoc
@@ -30,4 +30,3 @@ Convenience that recasts this response as wrapping some other representation.
 Convenience that recasts this response as wrapping some other representation.
 
 This would typically be as the results of a content type being an error rather than a representation returned on success.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.adoc
index 1e24b4f..703ead5 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.adoc
@@ -52,4 +52,3 @@ If null, then is not disabled.
 === getXIsisFormat()
 
 Isis-specific extension; not part of the RO API;
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.adoc
index 063d67c..4bb1918 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.adoc
@@ -75,4 +75,3 @@ Only for transient, persistable, objects
 === getOid()
 
 Isis extension.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.adoc
index 00c7310..84ff3f3 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.adoc
@@ -39,4 +39,3 @@ Because it isn't possible with the RestEasy client-side framework to specify a q
 Because it isn't possible with the RestEasy client-side framework to specify a query string nor to pass arbitrary query params; instead we provide an additional syntax of passing an Isis-defined query param `x-isis-querystring` .
 
 The content of this is taken to be the URL encoded map of arguments.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/homepage/HomePageResource.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/homepage/HomePageResource.adoc
index 892d0e0..47bfe90 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/homepage/HomePageResource.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/homepage/HomePageResource.adoc
@@ -26,4 +26,3 @@ Not part of the RO spec; this resource always returns 401, and is intended to be
 === notAuthenticated()
 
 Not part of the RO spec; this resource always returns 401, and is intended to be redirected to if credentials cannot be obtained.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/menubars/MenuBarsResource.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/menubars/MenuBarsResource.adoc
index aa64361..603ec38 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/menubars/MenuBarsResource.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/menubars/MenuBarsResource.adoc
@@ -57,4 +57,3 @@ Not part of the Restful Objects spec.
 === postMenuBarsNotAllowed()
 
 Not part of the Restful Objects spec.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/user/UserResource.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/user/UserResource.adoc
index bdbe8ca..4c4edfb 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/user/UserResource.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/user/UserResource.adoc
@@ -26,4 +26,3 @@ Not part of the Restful Objects spec.
 === logout()
 
 Not part of the Restful Objects spec.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonMapper.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonMapper.adoc
index b9078f5..7a7f7cf 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonMapper.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonMapper.adoc
@@ -28,4 +28,3 @@ Returns a _org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper.PrettyPr
 === instance()
 
 Returns a _org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper.PrettyPrinting#ENABLE pretty-printing enabled_ JSON mapper.
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonNodeUtils.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonNodeUtils.adoc
index 536536f..2208354 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonNodeUtils.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/JsonNodeUtils.adoc
@@ -38,4 +38,3 @@ For example, if given a list ("a", "b", "c") and starting with an empty map, the
   }
 }
 ----
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/MediaTypes.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/MediaTypes.adoc
index 61af169..a034489 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/MediaTypes.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/applib/util/MediaTypes.adoc
@@ -24,4 +24,3 @@ Same as _MediaType.valueOf(type)_ , but with fallback in case _MediaType.valueOf
 Same as _MediaType.valueOf(type)_ , but with fallback in case _MediaType.valueOf(type)_ throws an IllegalArgumentException.
 
 The fallback is to retry with some special characters replaces in String _type_ .
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.adoc
index d815388..4fbeeff 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.adoc
@@ -30,4 +30,3 @@ Iterates over all _#contentNegotiationServices injected_ xref:system:generated:i
 Iterates over all _#contentNegotiationServices injected_ xref:system:generated:index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationService.adoc[ContentNegotiationService] s to find one that returns a _ResponseBuilder_ using the provided function.
 
 There will always be at least one such service, namely the xref:system:generated:index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.adoc[ContentNegotiationServiceForRestfulObjectsV1_0] .
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.adoc
index 3f22150..f381227 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.adoc
@@ -50,4 +50,3 @@ Not API
 === buildResponseTo(IResourceContext, ObjectAndActionInvocation, JsonRepresentation, JsonRepresentation)
 
 Not API
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV2.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV2.adoc
index 88c7d2d..ac4db2a 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV2.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV2.adoc
@@ -81,4 +81,3 @@ Action prompt is not supported.
 === buildResponse(IResourceContext, ObjectAndActionInvocation)
 
 Action invocation is supported provided it returns a single domain object or a list of domain objects (ie invocations returning void or scalar value are not supported). Action invocations returning a domain object will be rendered as a map with the RO v1.0 representation as a '$$ro' property within (same as _#buildResponse(IResourceContext, ManagedObject)_ ), while action invocations returning a list will be rendered as a list with the RO v1.0 representation as a map object with a single [...]
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.adoc
index 7fc974c..9bd6698 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.adoc
@@ -40,4 +40,3 @@ search for an accept header in form `application/xml;profile=urn:org.restfulobje
 === buildResponse(IResourceContext, ObjectAndActionInvocation)
 
 search for an accept header in form `application/xml;profile=urn:org.restfulobjects:repr-types/action-result;x-ro-domain-type=todoapp.dto.module.todoitem.ToDoItemDto` 
-
diff --git a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
index 109c661..083fbe6 100644
--- a/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
+++ b/antora/components/system/modules/generated/pages/index/viewer/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
@@ -11,10 +11,10 @@ class SwaggerServiceMenu {
   String disableOpenSwaggerUi()
   LocalResourcePath openRestApi()
   String disableOpenRestApi()
-  Clob downloadSwaggerSchemaDefinition(final String fileNamePrefix, final SwaggerService.Visibility visibility, final SwaggerService.Format format)
+  Clob downloadSwaggerSchemaDefinition(final String fileNamePrefix, final Visibility visibility, final Format format)
   String default0DownloadSwaggerSchemaDefinition()
-  SwaggerService.Visibility default1DownloadSwaggerSchemaDefinition()
-  SwaggerService.Format default2DownloadSwaggerSchemaDefinition()
+  Visibility default1DownloadSwaggerSchemaDefinition()
+  Format default2DownloadSwaggerSchemaDefinition()
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 4ce0abe..246fb7c 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -180,7 +180,7 @@ default (Java) programming model.
 [%collapsible]
 .Document Index Entries
 ====
-xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/IsisModuleApplib.adoc[IsisModuleApplib], 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:syst [...]
+xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/IsisModuleApplib.adoc[IsisModuleApplib], 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:syst [...]
 ====
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -268,6 +268,11 @@ That typically corresponds to a http request/response cycle or a JUnit test meth
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 ====
+[%collapsible]
+.Document Index Entries
+====
+xref:system:generated:index/core/interaction/session/InteractionFactory.adoc[InteractionFactory]
+====
 
 |Apache Isis Core - Unit Test Support
 [source,yaml]
@@ -641,32 +646,32 @@ skinparam rectangle<<116>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<117>> {
+skinparam rectangle<<90>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<90>> {
+skinparam rectangle<<117>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<91>> {
+skinparam rectangle<<118>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<118>> {
+skinparam rectangle<<91>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<92>> {
+skinparam rectangle<<119>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<119>> {
+skinparam rectangle<<92>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -781,12 +786,12 @@ skinparam rectangle<<123>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<124>> {
+skinparam rectangle<<3>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<3>> {
+skinparam rectangle<<124>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -1381,22 +1386,22 @@ skinparam rectangle<<106>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<107>> {
+skinparam rectangle<<80>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<80>> {
+skinparam rectangle<<107>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<108>> {
+skinparam rectangle<<81>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<81>> {
+skinparam rectangle<<108>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
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 ef324f3..3ef42f4 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
@@ -76,7 +76,9 @@ final class ProjectDocWriter {
                 // delete all generated documents in the index
                 _Files.searchFiles(pagesFolder, dir->true, file-> {
                     val fileName = file.getName();
+                    final String parentFile = file.getParentFile().getName();
                     return fileName.endsWith(".adoc") &&
+                           !parentFile.equals("hooks") &&
                            !fileName.equals(overview.getSystemOverviewFilename());
                 })
                 .stream()
@@ -94,7 +96,7 @@ final class ProjectDocWriter {
 
                     log.info("writing file: {}", adocIndexFile.getName());
 
-                    final Document asciiDoc = unit.toAsciiDoc(j2aContext);
+                    final Document asciiDoc = unit.toAsciiDoc(j2aContext, adocIndexFile);
                     docWriter.accept(
                             asciiDoc,
                             adocIndexFile);
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
index 857a108..a4bfb9d 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
@@ -177,8 +177,9 @@ public final class J2AdocUnit {
     }
 
     public Document toAsciiDoc(
-            final @NonNull J2AdocContext j2aContext) {
-        return j2aContext.getFormatter().apply(this);
+            final @NonNull J2AdocContext j2aContext,
+            final @NonNull File file) {
+        return j2aContext.getFormatter().apply(this, file);
     }
 
     @Override
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
index 5793594..87626d7 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.tooling.j2adoc.format;
 
+import java.io.File;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 
 import org.asciidoctor.ast.Document;
@@ -25,6 +27,15 @@ import org.asciidoctor.ast.Document;
 import org.apache.isis.tooling.j2adoc.J2AdocUnit;
 
 public interface UnitFormatter
-extends Function<J2AdocUnit, Document> {
+extends BiFunction<J2AdocUnit, File, Document> {
 
+    /**
+     *
+     * @param j2AdocUnit - the java AST to convert to asciidoc
+     * @param file - the file that will be written to.  The intent is not for the formatter to write to this file, but it can be used to determine if include's of hook files are required.
+     *
+     * @return - the asciidoc representation of the java AST.
+     */
+    @Override
+    Document apply(J2AdocUnit j2AdocUnit, File file);
 }
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
index b47390c..0d003e0 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
@@ -18,13 +18,20 @@
  */
 package org.apache.isis.tooling.j2adoc.format;
 
+import java.io.File;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Optional;
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import com.github.javaparser.ast.nodeTypes.NodeWithJavadoc;
 import com.github.javaparser.javadoc.Javadoc;
 
+import org.asciidoctor.ast.Block;
 import org.asciidoctor.ast.Document;
 import org.asciidoctor.ast.List;
 import org.asciidoctor.ast.StructuralNode;
@@ -57,7 +64,7 @@ implements UnitFormatter {
      * @param unit - the containing java unit (java source code model)
      */
     @Override
-    public Document apply(final J2AdocUnit unit) {
+    public Document apply(final J2AdocUnit unit, final File file) {
 
         val doc = AsciiDocFactory.doc();
 
@@ -92,8 +99,13 @@ implements UnitFormatter {
 
         // -- outro
 
-        outro(unit)
-        .ifPresent(block(doc)::setSource);
+        inclusions(unit, file)
+                .stream()
+                .map(inclusion -> String.format("include::%s[]", inclusion))
+                .forEach(inclusion -> {
+                    final Block block = block(doc);
+                    block.setSource(inclusion);
+                });
 
         return doc;
     }
@@ -185,9 +197,15 @@ implements UnitFormatter {
     /**
      * Hook method (with empty default implementation)
      * @param unit - the containing java unit (java source code model)
+     * @param file - not to write to, but to determine if any include's of optional hook files are required.
      */
-    protected Optional<String> outro(final J2AdocUnit unit) {
-        return Optional.empty();
+    protected java.util.List<String> inclusions(final J2AdocUnit unit, final File file) {
+        return Arrays.asList(
+                "hooks/implementation.adoc",
+                "hooks/examples_and_usage.adoc"
+        ).stream()
+                .filter(fileName -> file.toPath().getParent().resolve(fileName).toFile().exists())
+                .collect(Collectors.toList());
     }
 
 }
diff --git a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
index 27096ad..00cfcd2 100644
--- a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
+++ b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
@@ -44,7 +44,7 @@ import static guru.nidi.codeassert.config.Language.JAVA;
 class J2AdocTest {
 
     @Test @Disabled
-    void testJavaDoc2AsciiDoc() {
+    void testJavaDoc2AsciiDoc() throws IOException {
 
         val analyzerConfig = AnalyzerConfigFactory
                 .maven(ProjectSampler.apacheIsisApplib(), Language.JAVA)
@@ -67,9 +67,10 @@ class J2AdocTest {
         //.peek(source->System.out.println("parsing source: " + source))
         .forEach(j2aContext::add);
 
+        final File tempFile = File.createTempFile("tmp", "adoc");
         j2aContext.streamUnits()
         //.peek(unit->System.err.println("namespace "+unit.getNamespace()))
-        .map(unit->unit.toAsciiDoc(j2aContext))
+        .map(unit->unit.toAsciiDoc(j2aContext, tempFile))
         .forEach(adoc->{
 
             //System.out.println(adoc);