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 2020/01/29 14:43:41 UTC

[isis] branch ISIS-2062 updated (d58e24a -> 7810df1)

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

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


 discard d58e24a  more wip on the simpleapp
 discard c8d1a36  more wip - simplifies home page resolver, also working on the simpleapp docs.
 discard 478afcd  wip on home page (plus simpleapp docs)
     add e152453  ISIS-2062: removes stale javadoc for HealthCheckService
     add 6b27e76  ISIS-2272: simplifies @HomePage support, only for type.
     add 58c6969  ISIS-2062: more tidy up of javadoc stale a href=...
     add b3a9845  ISIS-2062: adds a tiny bit of docs for keycloak
     add 38307bc  ISIS-2062: more tidy up of javadoc stale a href=...
     add b89eb6e  ISIS-2062: no longer support isis.integTest.module system property.
     add 672e3cf  ISIS-2062: updates to helloworld about.adoc
     add 7e8012a  ISIS-2062: updates to simpleapp about.adoc
     add 838d228  ISIS-2158: cosmetic - adds @Inject for constructor-based injection of IsisIntegrationTestAbstract
     add 38ecdbd  ISIS-2062: updates javadoc for IsisIntegrationTestAbstract.CommandSupport service
     add d535ceb  ISIS-2272: removes irrelevant unit test
     add b7c3ce7  ISIS-2062: sync adoc examples
     add 8a89e3b  ISIS-2062: tweaks
     add 667e8a4  Merge branch 'ide'
     add e89bdf6  ISIS-2272: fixes home page support if there is no home page
     add 2a9d290  ISIS-2158: java-doc fix
     add 4a611ff  ISIS-2158: tiny simplification
     add 5151e71  ISIS-2158: minor simplifications on HomePageResolverServiceDefault
     add f7f9cb2  ISIS-2158: remove unused code line
     add 28deeee  ISIS-2158: RepositoryService: deprecate ambiguous API
     add 9bee5dd  ISIS-2158: adds some java-doc
     add 5e238b2  ISIS-2158: microprofile support: bring in Spring Batch
     add dd56a70  ISIS-2158: UserServiceDefault: cleanup thread-local on end-of-life
     add c952483  ISIS-2158: UserServiceDefault: simplify
     add 34c50f5  ISIS-2158: IsisPermission: clean-up thread-local
     add 2680f78  ISIS-2158: make the generated swagger-spec context-path aware
     add 47a76dd  ISIS-2158: RO: allows the authentication strategy to be configured
     add 09d54c2  ISIS-2158: fixes REST debug logging (RestfulLoggingFilter)
     add 51d2ca5  ISIS-2158: REST-client: also support actions, that return collections
     add a06109b  ISIS-2158: let 'commons' be a transitive dependency of rest-client-api
     add d583686  ISIS-2158: RepositoryServiceDefault.persist: don't fail on attached
     add f76db2b  ISIS-2158: more rest tests
     add 0ef3369  ISIS-2158: adding comments for future extension
     new 14bbef3  ISIS-2062: fixes up module-nav's
     new a06c413  ISIS-2062: docs
     new 2e2d19b  ISIS-2062: docs
     new 6b5accd  ISIS-2062: docs
     new c9264e9  ISIS-2062: aligns toc nav
     new 46bb1f4  ISIS-2062: docs
     new 6acf019  ISIS-2062: docs
     new 7a9c81a  ISIS-2062: docs
     new 5aa1aa3  ISIS-2062: docs
     new 256b31c  ISIS-2062: docs
     new 2c989f5  ISIS-2062: docs
     new c40b4f4  ISIS-2062: docs
     new a93787b  ISIS-2062: docs
     new e9ae459  ISIS-2062: docs
     new 0dd7911  ISIS-2062: docs
     new d656836  ISIS-2062: docs
     new d774fc5  ISIS-2062: docs
     new 5b509d1  ISIS-2062: docs
     new 7810df1  ISIS-2062: docs

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

 * -- * -- B -- O -- O -- O   (d58e24a)
            \
             N -- N -- N   refs/heads/ISIS-2062 (7810df1)

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

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

The 19 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:
 .gitignore                                         |   2 +
 .../core/modules/ROOT/partials/module-nav.adoc     |   2 +-
 .../isis-configurations-and-modules.pptx           | Bin 49903 -> 0 bytes
 .../attachments/modules-dependencies.pptx          | Bin 0 -> 48379 bytes
 .../archdesign/attachments/pom-hierarchy.pptx      | Bin 51849 -> 0 bytes
 .../archdesign/images/modules-dependencies.png     | Bin 0 -> 59588 bytes
 .../modules/ROOT/partials/module-nav.adoc          |   2 +-
 .../modules/ROOT/partials/module-nav.adoc          |   4 +-
 .../legacy/modules/ROOT/partials/module-nav.adoc   |   3 +
 .../mappings/modules/ROOT/partials/module-nav.adoc |   1 +
 .../refguide/modules/ROOT/partials/module-nav.adoc |   3 +-
 .../modules/ROOT/partials/component-nav.adoc       |   4 +-
 .../{module-nav2.adoc => module-nav-end.adoc}      |   0
 .../security/modules/ROOT/partials/module-nav.adoc |   5 +-
 .../modules/ROOT/partials/module-nav.adoc          |   1 +
 .../testing/modules/ROOT/partials/module-nav.adoc  |   2 +
 .../components/toc/modules/ROOT/pages/about.adoc   |  17 +-
 .../modules/ROOT/pages/landing-page/guides.adoc    |   2 +-
 .../ROOT/pages/landing-page/quick-start.adoc       |  47 --
 .../modules/ROOT/pages/landing-page/releases.adoc  |   2 +-
 .../modules/ROOT/pages/landing-page/support.adoc   |   2 +-
 .../what-is-apache-isis/isis-in-pictures.adoc      |   1 +
 .../toc/modules/ROOT/partials/module-nav.adoc      |  17 +-
 .../modules/comguide/pages/cutting-a-release.adoc  | 431 +--------------
 .../modules/mignotes/pages/migrating-to-2.0.0.adoc |   2 +-
 .../toc/modules/relnotes/pages/rn-1.12.0.adoc      |   2 +-
 antora/components/userguide/antora.yml             |   2 -
 .../modules/ROOT/partials/module-nav.adoc          |   4 +
 .../deployment/externalized-configuration.adoc     |   2 +-
 .../userguide/modules/btb/pages/i18n.adoc          |   2 +-
 .../userguide/modules/btb/pages/web-xml.adoc       |   2 +-
 .../userguide/modules/btb/partials/module-nav.adoc |  14 +-
 .../core-concepts/philosophy/build-vs-buy.png      | Bin 34337 -> 37061 bytes
 .../core-concepts/philosophy/build-vs-buy.pptx     | Bin 63121 -> 38332 bytes
 .../modules/fun/pages/crud/instantiating.adoc      |   4 +-
 .../modules/fun/pages/crud/persisting.adoc         |   2 +-
 .../domain-services/event-subscribers.adoc         |   2 +-
 .../domain-services/initialization.adoc            |   2 +-
 .../domain-services/registering.adoc               |   2 +-
 .../domain-services/scoped-services.adoc           |   2 +-
 .../pages/programming-model/inject-services.adoc   |   6 +-
 .../fun/pages/programming-model/mixins.adoc        |   2 +-
 .../programming-model/view-models/non-jaxb.adoc    |   2 +-
 .../fun/pages/ui-hints/eager-rendering.adoc        |   4 +-
 .../pages/ui-hints/object-titles-and-icons.adoc    |  14 +-
 .../userguide/modules/fun/partials/module-nav.adoc |  17 +-
 .../modules/ROOT/partials/module-nav.adoc          |   4 +
 .../playbooks/{site-toc.yml => site-starters.yml}  |   4 +-
 antora/playbooks/site-toc.yml                      |   9 -
 antora/playbooks/site.yml                          |   2 +-
 antora/supplemental-ui/css/site-custom.css         |   1 +
 antora/supplemental-ui/index.html                  |  16 +-
 .../applib-ant/examples/annotation/HomePage.java   |  15 +-
 .../applib-ant/pages/Action/domainEvent.adoc       |   4 +-
 .../applib-ant/pages/Collection/domainEvent.adoc   |   2 +-
 .../pages/DomainObject/createdLifecycleEvent.adoc  |   8 +-
 .../pages/DomainObject/loadedLifecycleEvent.adoc   |   4 +-
 .../DomainObject/persistedLifecycleEvent.adoc      |   4 +-
 .../DomainObject/persistingLifecycleEvent.adoc     |   4 +-
 .../pages/DomainObject/removingLifecycleEvent.adoc |   4 +-
 .../pages/DomainObject/updatedLifecycleEvent.adoc  |   4 +-
 .../pages/DomainObject/updatingLifecycleEvent.adoc |   4 +-
 .../pages/DomainObjectLayout/cssClassUiEvent.adoc  |   4 +-
 .../pages/DomainObjectLayout/iconUiEvent.adoc      |   4 +-
 .../pages/DomainObjectLayout/layoutUiEvent.adoc    |   4 +-
 .../pages/DomainObjectLayout/titleUiEvent.adoc     |   4 +-
 .../applib-ant/pages/Property/domainEvent.adoc     |   2 +-
 .../mixins/metamodel/Object_objectIdentifier.java  |  16 +-
 .../pages/classes/AppManifest2-bootstrapping.adoc  |   1 +
 .../pages/classes/super/FixtureScript.adoc         |   1 +
 .../applib-cm/pages/methods/prefixes/disable.adoc  |   6 +-
 .../applib-cm/pages/methods/prefixes/hide.adoc     |   4 +-
 .../applib-cm/pages/methods/reserved/disable.adoc  |   4 +-
 .../examples/services/factory/FactoryService.java  |  61 ++-
 .../services/health/HealthCheckService.java        |   3 -
 .../pages/core-domain-api/EventBusService.adoc     |  26 +-
 .../persistence-layer-api/IsisJdoSupport.adoc      |   4 +-
 .../apache/isis/applib/annotation/HomePage.java    |   2 -
 .../applib/services/factory/FactoryService.java    |   6 +-
 .../applib/services/repository}/EntityState.java   |   6 +-
 .../services/repository/RepositoryService.java     |  83 ++-
 .../isis/core/commons/internal/base/_Bytes.java    |  44 +-
 .../isis/core/config/RestEasyConfiguration.java    |  12 +
 .../config/presets/IntrospectLazily.properties     |  18 +
 .../isis/core/config/presets/IsisPresets.java      |   1 +
 ...ectServiceMethodMustBeFinalContractTestAll.java |  28 -
 .../unittestsupport/inject/SomeDomainObject.java   |  28 -
 .../core/unittestsupport/inject/SomeService.java   |  23 -
 .../facets/object/entity/EntityFacet.java          |   2 +-
 .../services/user/UserServiceDefault.java          | 105 ++--
 .../isis/core/metamodel/spec/ManagedObject.java    |   7 +-
 .../HomePageAnnotationFacetFactoryTest.java        |  69 ---
 .../persistence/session/PersistenceSession.java    |   2 +-
 .../adoc/modules/runtime-services/pages/about.adoc |  17 +-
 .../runtime-services/partials/module-nav.adoc      |   2 +-
 .../homepage/HomePageResolverServiceDefault.java   |  23 +-
 .../repository/RepositoryServiceDefault.java       |  75 +--
 .../adoc/modules/unittestsupport/pages/about.adoc  | 347 +++++++++++-
 .../unittestsupport/pages/contract-tests.adoc      | 169 ------
 .../unittestsupport/pages/jmock-extensions.adoc    |  57 --
 .../unittestsupport/pages/maven-configuration.adoc |  55 --
 .../pages/soap-fake-server-junit-rule.adoc         | 111 ----
 ...rviceMethodMustBeFinalContractTestAbstract.java |  78 ---
 .../adoc/modules/webapp/partials/module-nav.adoc   |   2 +-
 core/webspringboot/src/main/adoc/antora.yml        |   2 -
 .../main/adoc/modules/webboot-springboot/nav.adoc  |   1 -
 .../modules/webboot-springboot/pages/about.adoc    |   3 -
 .../webboot-springboot/partials/module-nav.adoc    |   1 -
 .../isis/testdomain/jdo/InventoryResource.java     |  48 ++
 .../isis/testdomain/rest/RestEndpointService.java  |  55 +-
 .../isis/testdomain/rest/RestServiceTest.java      |  81 ++-
 .../shiro/ShiroSecmanLdap_restfulStressTest.java   |   2 +-
 .../flyway/adoc/modules/flyway/pages/about.adoc    |   4 +-
 incubator/mappings/microprofile/pom.xml            |  30 +
 mappings/restclient/api/pom.xml                    |   1 -
 .../restclient/ActionParameterListBuilder.java     |  12 +
 .../isis/extensions/restclient/ResponseDigest.java | 118 ++--
 .../isis/extensions/restclient/RestfulClient.java  |  33 +-
 .../restclient/log/RestfulLoggingFilter.java       |  17 +-
 mavendeps/adoc/antora.yml                          |   2 +-
 mavendeps/adoc/modules/mavendeps/nav.adoc          |   2 +-
 mavendeps/adoc/modules/mavendeps/pages/about.adoc  |   1 +
 .../modules/mavendeps/partials/module-nav.adoc     |   1 +
 mavendeps/testing/pom.xml                          |   5 +
 .../JdoPersistenceCapableFacetImpl.java            |   2 +-
 .../ObjectAdapterContext_DependencyInjection.java  |  67 ---
 ...ctAdapterContext_ObjectAdapterByIdProvider.java | 211 -------
 .../persistence/PersistenceSession5.java           |   2 +-
 .../adoc/modules/ROOT/partials/module-nav.adoc     |   8 +-
 .../shiro/authorization/IsisPermission.java        |   8 +-
 starters/adoc/antora.yml                           |   2 -
 starters/adoc/modules/ROOT/nav.adoc                |   4 +-
 starters/adoc/modules/ROOT/pages/about.adoc        |  44 +-
 .../adoc/modules/ROOT/partials/component-nav.adoc  |  14 +
 .../adoc/modules/ROOT/partials/module-nav.adoc     |   4 +
 starters/adoc/modules/helloworld/nav.adoc          |   3 +-
 starters/adoc/modules/helloworld/pages/about.adoc  |   4 +-
 .../modules/helloworld/partials/module-nav.adoc    |   2 +
 .../adoc/modules/parent-pom}/attachments/.gitkeep  |   0
 .../modules/parent-pom/attachments/parent-pom.pptx | Bin 0 -> 51613 bytes
 .../adoc/modules/parent-pom/images/parent-pom.png  | Bin 0 -> 68900 bytes
 starters/adoc/modules/parent-pom/nav.adoc          |   4 +
 starters/adoc/modules/parent-pom/pages/about.adoc  |  64 +++
 .../modules/parent-pom/partials/module-nav.adoc    |   4 +
 .../partials/surefire-configuration-caution.adoc   |  13 +
 .../images => simpleapp/attachments}/.gitkeep      |   0
 .../simpleapp-modules-dependencies.pptx            | Bin 0 -> 47706 bytes
 .../images/simpleapp-modules-dependencies.png      | Bin 0 -> 64551 bytes
 starters/adoc/modules/simpleapp/nav.adoc           |   3 +-
 starters/adoc/modules/simpleapp/pages/about.adoc   |  28 +-
 .../modules/simpleapp/partials/module-nav.adoc     |   2 +
 .../fixturescripts/ExcelDemoToDoItem_tearDown.java |   3 +-
 .../FakeDataDemoObjectWithAll_tearDown.java        |   4 +-
 .../IsisIntegrationTestAbstractWithFixtures.java   |   4 +-
 .../applib/IsisModuleTestingFixturesApplib.java    |   2 +-
 .../applib/{legacy => clock}/FixtureClock.java     |   2 +-
 .../{legacy => clock}/TickingFixtureClock.java     |   2 +-
 .../clock => clock/fixture}/ClockFixture.java      |   4 +-
 .../fixture}/TickingClockFixture.java              |   6 +-
 .../fixtures/applib/legacy/package-info.java       |  45 --
 .../legacy/teardown/TeardownFixtureAbstract2.java  |  23 -
 .../applib/modules/ModuleWithFixtures.java         |  12 +-
 .../QueryResultsCacheControlDefault.java           |   2 +-
 .../applib/services/FixturesLifecycleService.java  |   2 +-
 .../{legacy => }/setup/PersonaEnumPersistAll.java  |   2 +-
 .../teardown/TeardownFixtureAbstract.java          |   7 +-
 .../legacy/FixtureClockInstantiationTest.java      |   1 +
 .../images/pin-enhance-run-configuration.png       | Bin 0 -> 22582 bytes
 .../adoc/modules/integtestsupport/pages/about.adoc | 609 ++++++++++++++++++++-
 .../integtestsupport/pages/abstract-class.adoc     |  81 ---
 .../integtestsupport/pages/bootstrapping.adoc      |  46 --
 .../pages/configuration-properties.adoc            |  90 ---
 .../pages/maven-configuration.adoc                 |  55 --
 .../integtestsupport/pages/typical-usage.adoc      | 124 -----
 .../integtestsupport/pages/wrapper-factory.adoc    | 172 ------
 .../adoc/modules/specsupport/pages/about.adoc      | 237 +++++++-
 .../modules/specsupport/pages/how-it-works.adoc    |  18 -
 .../specsupport/pages/maven-configuration.adoc     |  73 ---
 .../specsupport/pages/writing-a-bdd-spec.adoc      | 157 ------
 testing/specsupport/applib/pom.xml                 |   5 -
 .../webmodule/WebModuleJaxrsResteasy4.java         |  58 +-
 .../service/swagger/SwaggerServiceDefault.java     |  16 +-
 .../src/main/resources/swagger-ui/index.thtml      |   1 +
 .../ROOT/pages/customisation/auto-refresh.adoc     |   4 +-
 .../pages/extending/custom-bootstrap-theme.adoc    |   2 +-
 .../ROOT/pages/features/titles-in-tables.adoc      |   2 +-
 .../ROOT/pages/layout/annotation-based.adoc        |   6 +-
 .../wicket/model/models/EntityCollectionModel.java |   3 -
 .../isis/viewer/wicket/ui/pages/home/HomePage.java |  22 +-
 189 files changed, 2251 insertions(+), 2805 deletions(-)
 delete mode 100644 antora/components/core/modules/archdesign/attachments/isis-configurations-and-modules.pptx
 create mode 100644 antora/components/core/modules/archdesign/attachments/modules-dependencies.pptx
 delete mode 100644 antora/components/core/modules/archdesign/attachments/pom-hierarchy.pptx
 create mode 100644 antora/components/core/modules/archdesign/images/modules-dependencies.png
 rename antora/components/security/modules/ROOT/partials/{module-nav2.adoc => module-nav-end.adoc} (100%)
 delete mode 100644 antora/components/toc/modules/ROOT/pages/landing-page/quick-start.adoc
 copy antora/playbooks/{site-toc.yml => site-starters.yml} (91%)
 rename {core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec => api/applib/src/main/java/org/apache/isis/applib/services/repository}/EntityState.java (86%)
 create mode 100644 core/config/src/main/java/org/apache/isis/core/config/presets/IntrospectLazily.properties
 delete mode 100644 core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAll.java
 delete mode 100644 core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeDomainObject.java
 delete mode 100644 core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeService.java
 delete mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/homepage/HomePageAnnotationFacetFactoryTest.java
 delete mode 100644 core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/contract-tests.adoc
 delete mode 100644 core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/jmock-extensions.adoc
 delete mode 100644 core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/maven-configuration.adoc
 delete mode 100644 core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/soap-fake-server-junit-rule.adoc
 delete mode 100644 core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAbstract.java
 delete mode 100644 core/webspringboot/src/main/adoc/antora.yml
 delete mode 100644 core/webspringboot/src/main/adoc/modules/webboot-springboot/nav.adoc
 delete mode 100644 core/webspringboot/src/main/adoc/modules/webboot-springboot/pages/about.adoc
 delete mode 100644 core/webspringboot/src/main/adoc/modules/webboot-springboot/partials/module-nav.adoc
 create mode 100644 mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
 delete mode 100644 persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_DependencyInjection.java
 delete mode 100644 persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
 create mode 100644 starters/adoc/modules/ROOT/partials/component-nav.adoc
 create mode 100644 starters/adoc/modules/ROOT/partials/module-nav.adoc
 create mode 100644 starters/adoc/modules/helloworld/partials/module-nav.adoc
 rename {antora/components/core/modules/archdesign => starters/adoc/modules/parent-pom}/attachments/.gitkeep (100%)
 create mode 100644 starters/adoc/modules/parent-pom/attachments/parent-pom.pptx
 create mode 100644 starters/adoc/modules/parent-pom/images/parent-pom.png
 create mode 100644 starters/adoc/modules/parent-pom/nav.adoc
 create mode 100644 starters/adoc/modules/parent-pom/pages/about.adoc
 create mode 100644 starters/adoc/modules/parent-pom/partials/module-nav.adoc
 create mode 100644 starters/adoc/modules/parent-pom/partials/surefire-configuration-caution.adoc
 copy starters/adoc/modules/{helloworld/images => simpleapp/attachments}/.gitkeep (100%)
 create mode 100644 starters/adoc/modules/simpleapp/attachments/simpleapp-modules-dependencies.pptx
 create mode 100644 starters/adoc/modules/simpleapp/images/simpleapp-modules-dependencies.png
 create mode 100644 starters/adoc/modules/simpleapp/partials/module-nav.adoc
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy => clock}/FixtureClock.java (99%)
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy => clock}/TickingFixtureClock.java (98%)
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy/clock => clock/fixture}/ClockFixture.java (97%)
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy/clock => clock/fixture}/TickingClockFixture.java (95%)
 delete mode 100644 testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/package-info.java
 delete mode 100644 testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract2.java
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy => }/queryresultscache/QueryResultsCacheControlDefault.java (96%)
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy => }/setup/PersonaEnumPersistAll.java (98%)
 rename testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/{legacy => }/teardown/TeardownFixtureAbstract.java (97%)
 create mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/images/pin-enhance-run-configuration.png
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/abstract-class.adoc
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/bootstrapping.adoc
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/configuration-properties.adoc
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/maven-configuration.adoc
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/typical-usage.adoc
 delete mode 100644 testing/integtestsupport/adoc/modules/integtestsupport/pages/wrapper-factory.adoc
 delete mode 100644 testing/specsupport/adoc/modules/specsupport/pages/how-it-works.adoc
 delete mode 100644 testing/specsupport/adoc/modules/specsupport/pages/maven-configuration.adoc
 delete mode 100644 testing/specsupport/adoc/modules/specsupport/pages/writing-a-bdd-spec.adoc


[isis] 07/19: ISIS-2062: docs

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

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

commit 6acf019ee45a82fea79bae8031bbe594e4562c01
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:42:23 2020 +0000

    ISIS-2062: docs
---
 .../components/toc/modules/ROOT/pages/about.adoc   |  2 +-
 .../ROOT/pages/landing-page/quick-start.adoc       | 47 ----------------------
 .../modules/ROOT/pages/landing-page/releases.adoc  |  2 +-
 .../modules/ROOT/pages/landing-page/support.adoc   |  2 +-
 antora/supplemental-ui/index.html                  |  2 +-
 starters/adoc/modules/ROOT/pages/about.adoc        | 46 +++++++++++++++++----
 6 files changed, 43 insertions(+), 58 deletions(-)

diff --git a/antora/components/toc/modules/ROOT/pages/about.adoc b/antora/components/toc/modules/ROOT/pages/about.adoc
index 30ced5c..0db1dd1 100644
--- a/antora/components/toc/modules/ROOT/pages/about.adoc
+++ b/antora/components/toc/modules/ROOT/pages/about.adoc
@@ -19,7 +19,7 @@
 
 |
 [discrete]
-== xref:starters:ROOT:about.adoc[Starter Apps]
+== Starter Apps
 
 * xref:starters:helloworld:about.adoc[Hello World]
 * xref:starters:simpleapp:about.adoc[SimpleApp]
diff --git a/antora/components/toc/modules/ROOT/pages/landing-page/quick-start.adoc b/antora/components/toc/modules/ROOT/pages/landing-page/quick-start.adoc
deleted file mode 100644
index 7643cca..0000000
--- a/antora/components/toc/modules/ROOT/pages/landing-page/quick-start.adoc
+++ /dev/null
@@ -1,47 +0,0 @@
-= Quick Start
-: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 [...]
-
-To get started with a new application, use one of the two git repos on Github that provide a starter app.
-
-== HelloWorld
-
-The helloworld app is  very minimal app, intended just as a starting point to learn what the framework is all about.
-
-include::starters:helloworld:page$script.adoc[]
-
-
-Notes:
-
-* more on the structure of the Hello World app can be found xref:starters:helloworld:about.adoc[here]
-* the source code can be found in this link:https://github.com/apache/isis-app-helloworld[git repo]
-
-
-
-== Simple App
-
-This app has the same functionality as _HelloWorld_, but is structured so it can be used as a starting point for developing your own applications.
-
-include::starters:simpleapp:page$script.adoc[]
-
-It also includes some xref:testing:integtestsupport:about.adoc[integration tests], xref:testing:fixtures:about.adoc[fixtures], and xref:testing:specsupport[BDD (Cucumber)] specs.
-
-Notes:
-
-* more on the structure of the Simple App app can be found xref:starters:simpleapp:about.adoc[here]
-* the source code can be found in this link:https://github.com/apache/isis-app-simpleapp[git repo]
-
-
-== Updating to Newer Versions
-
-For both apps you can bump to newer versions of the framework just by updating the `<version>` of the `<parent>`:
-
-[source,bash]
-.pom.xml
-----
-<parent>
-    <groupId>org.apache.isis.app</groupId>
-    <artifactId>isis-app-starter-parent</artifactId>
-    <version>2.0.0</version>  <!--1-->
-</parent>
-----
-<1> update as required.
diff --git a/antora/components/toc/modules/ROOT/pages/landing-page/releases.adoc b/antora/components/toc/modules/ROOT/pages/landing-page/releases.adoc
index ff59da4..f09fd78 100644
--- a/antora/components/toc/modules/ROOT/pages/landing-page/releases.adoc
+++ b/antora/components/toc/modules/ROOT/pages/landing-page/releases.adoc
@@ -2,7 +2,7 @@
 :notice: licensed to the apache software foundation (asf) under one or more contributor license agreements. see the notice file distributed with this work for additional information regarding copyright ownership. the asf licenses this file to you under the apache license, version 2.0 (the "license"); you may not use this file except in compliance with the license. you may obtain a copy of the license at. http://www.apache.org/licenses/license-2.0 . unless required by applicable law or ag [...]
 
 
-The easiest way to consume the framework is to use one of the xref:toc:ROOT:landing-page/quick-start.adoc[starter apps].
+The easiest way to consume the framework is to use one of the xref:starters:ROOT:about.adoc[starter apps].
 Then, just update the `<version>` of the parent starter:
 
 [source,xml]
diff --git a/antora/components/toc/modules/ROOT/pages/landing-page/support.adoc b/antora/components/toc/modules/ROOT/pages/landing-page/support.adoc
index 27b6df4..4aca004 100644
--- a/antora/components/toc/modules/ROOT/pages/landing-page/support.adoc
+++ b/antora/components/toc/modules/ROOT/pages/landing-page/support.adoc
@@ -27,7 +27,7 @@ Some other places that might be useful are:
 [discrete]
 == Releases
 
-It's usually easiest to work with the xref:toc:ROOT:landing-page/quick-start.adoc[quick start apps].
+It's usually easiest to work with the xref:starters:ROOT:about.adoc[starter apps].
 But you can also download the framework and built it yourself:
 
 * xref:toc:ROOT:downloads/how-to.adoc[Downloads]
diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index dde9d77..a5b7879 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -100,7 +100,7 @@
           <ul>
             <li><a href="toc/about.html">Table of Contents</a></li>
             <li><hr/></li>
-            <li><a href="toc/landing-page/quick-start.html">Quick Start</a></li>
+            <li><a href="starters/about.html">Starter Apps</a></li>
             <li><a href="toc/landing-page/guides.html">Guides</a></li>
             <li><a href="toc/landing-page/components.html">Components</a></li>
             <li><a href="toc/landing-page/releases.html">Releases</a></li>
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index 625d74c..78537f3 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -2,15 +2,47 @@
 :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 [...]
 
 
-TODO: to document
+To get started with a new application, use one of the two git repos on Github that provide a starter app.
 
+== HelloWorld
 
-Starter Apps:
+The helloworld app is  very minimal app, intended just as a starting point to learn what the framework is all about.
 
-* xref:starters:helloworld:about.adoc[Hello World]
-* xref:starters:simpleapp:about.adoc[SimpleApp]
+include::starters:helloworld:page$script.adoc[]
 
-Maven:
 
-* xref:starters:parent-pom:about.adoc[Parent POM]
-* xref:starters:mavendeps:about.adoc[Maven Deps]
+Notes:
+
+* more on the structure of the Hello World app can be found xref:starters:helloworld:about.adoc[here]
+* the source code can be found in this link:https://github.com/apache/isis-app-helloworld[git repo]
+
+
+
+== Simple App
+
+This app has the same functionality as _HelloWorld_, but is structured so it can be used as a starting point for developing your own applications.
+
+include::starters:simpleapp:page$script.adoc[]
+
+It also includes some xref:testing:integtestsupport:about.adoc[integration tests], xref:testing:fixtures:about.adoc[fixtures], and xref:testing:specsupport:about.adoc[BDD (Cucumber)] specs.
+
+Notes:
+
+* more on the structure of the Simple App app can be found xref:starters:simpleapp:about.adoc[here]
+* the source code can be found in this link:https://github.com/apache/isis-app-simpleapp[git repo]
+
+
+== Updating to Newer Versions
+
+For both apps you can bump to newer versions of the framework just by updating the `<version>` of the xref:starters:parent-pom:about.adoc[parent POM]:
+
+[source,bash]
+.pom.xml
+----
+<parent>
+    <groupId>org.apache.isis.app</groupId>
+    <artifactId>isis-app-starter-parent</artifactId>
+    <version>2.0.0</version>                            <!--1-->
+</parent>
+----
+<1> update as required.


[isis] 08/19: ISIS-2062: docs

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

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

commit 7a9c81a21b156d5aae483cde2355783983c7b276
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:50:41 2020 +0000

    ISIS-2062: docs
---
 antora/supplemental-ui/index.html                   | 10 +++++++++-
 starters/adoc/modules/ROOT/pages/about.adoc         | 11 ++++++-----
 starters/adoc/modules/ROOT/partials/module-nav.adoc |  2 +-
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index a5b7879..b31cd95 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -96,7 +96,7 @@
         </li>
         <li><a href="#call-to-action">Quick Start</a></li>
         <li class="menu-has-children">
-          <a href="toc/about.html">Developer Docs</a>
+          <a href="toc/about.html">Docs</a>
           <ul>
             <li><a href="toc/about.html">Table of Contents</a></li>
             <li><hr/></li>
@@ -608,6 +608,10 @@ Examples
               <p class="cta-text text-center">
                 Learn about Apache Isis™ by running the minimal <a href="https://github.com/apache/isis-app-helloworld">helloworld</a>&nbsp;starter&nbsp;app.
               </p>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-lg-6 text-left text-lg-left">
               <p>
                 <pre>
 APP=helloworld
@@ -626,6 +630,10 @@ mvn spring-boot:run</pre>
               <p class="cta-text text-center">
                 Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.</p>
               </p>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-lg-6 text-left text-lg-left">
               <p>
                 <pre>
 APP=simpleapp
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index 78537f3..f7a6938 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -1,19 +1,20 @@
-= Starter Apps
+//= Starter Apps
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+:page-role: -title
 
+To get started with a new application, download one of the two starter apps.
 
-To get started with a new application, use one of the two git repos on Github that provide a starter app.
 
 == HelloWorld
 
-The helloworld app is  very minimal app, intended just as a starting point to learn what the framework is all about.
+The helloworld app is a very minimal app, intended just as a starting point to learn what the framework is all about.
 
 include::starters:helloworld:page$script.adoc[]
 
 
 Notes:
 
-* more on the structure of the Hello World app can be found xref:starters:helloworld:about.adoc[here]
+* you can find an explanation of how to use the app, and of its structure xref:starters:helloworld:about.adoc[here]
 * the source code can be found in this link:https://github.com/apache/isis-app-helloworld[git repo]
 
 
@@ -28,7 +29,7 @@ It also includes some xref:testing:integtestsupport:about.adoc[integration tests
 
 Notes:
 
-* more on the structure of the Simple App app can be found xref:starters:simpleapp:about.adoc[here]
+* you can find an explanation of how to use the app, and of its structure xref:starters:simpleapp:about.adoc[here]
 * the source code can be found in this link:https://github.com/apache/isis-app-simpleapp[git repo]
 
 
diff --git a/starters/adoc/modules/ROOT/partials/module-nav.adoc b/starters/adoc/modules/ROOT/partials/module-nav.adoc
index 47a1dbd..9954c26 100644
--- a/starters/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/starters/adoc/modules/ROOT/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:about.adoc[About the Starter Apps]
+* xref:about.adoc[Getting Started]
 
 
 


[isis] 19/19: ISIS-2062: docs

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

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

commit 7810df138f42384bb5afb28d152ffdbff3a2ffd0
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 13:42:41 2020 +0000

    ISIS-2062: docs
---
 .../images/pin-enhance-run-configuration.png            | Bin 0 -> 22582 bytes
 .../adoc/modules/integtestsupport/pages/about.adoc      |  15 +++++++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/images/pin-enhance-run-configuration.png b/testing/integtestsupport/adoc/modules/integtestsupport/images/pin-enhance-run-configuration.png
new file mode 100644
index 0000000..3ceeea6
Binary files /dev/null and b/testing/integtestsupport/adoc/modules/integtestsupport/images/pin-enhance-run-configuration.png differ
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
index 127e290..298cbd2 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
@@ -126,6 +126,8 @@ There's further discussion xref:about.adoc#manual-teardown[below].
 The `FixtureScripts` domain service is inherited from the superclass.
 
 
+=== Testing a property
+
 For example, let's test the `SimpleObject#name` property:
 
 [source,java]
@@ -197,6 +199,8 @@ This will check that property (for access) is visible to the current user.
 <4> attempting to set the name on the property (through the wrapper) is disallowed.
 We detect this by catching a `DisabledException` (using JUnit 5's `assertThrows()`).
 
+=== Testing an action
+
 The way that the simple app allows the name to be updated is through an `updateName` action:
 
 [source,java]
@@ -274,6 +278,7 @@ This domain service is not part of the production code base, but is detected aut
 +
 Since this was a successful interaction, there will have been 5 events, one for each of the event phases (hide, disable, validate, executing, executed)
 
+=== Testing a type meta-annotation
 
 As was pointed out earlier, the `name` parameter to `updateName()` has the `@Name` meta-annotation.
 This meta-annotation also defines some business rules, through `@Property` and `@Parameter`:
@@ -592,6 +597,12 @@ If you just want to set up integration testing support, then use:
 
 == Hints-n-Tips
 
-=== Using JDO/DataNucleus
+[TIP]
+.Using JDO/DataNucleus
+====
+When running integration tests through the IDE, and if using the JDO/DataNucleus ORM, then make sure the module(s) with entities have been enhanced first.
+
+If using IntelliJ, we recommend creating a run Maven configuration that runs `datanucleus:enhance`, and then pinning the configuration once run as a tab in the "Debug" window for easy access.
 
-When running integration tests through the IDE, if using the JDO/DataNucleus ORM, then make sure the module(s) with entities have been enhanced first.
+image::pin-enhance-run-configuration.png/[width="400px",link="{imagesdir}/pin-enhance-run-configuration.png/"]
+====


[isis] 10/19: ISIS-2062: docs

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

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

commit 256b31c9b26c6d2b71b52da6c6b42ec3eadb3bfc
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:56:28 2020 +0000

    ISIS-2062: docs
---
 antora/supplemental-ui/index.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index b9deac9..3a25b44 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -605,12 +605,12 @@ Examples
 
           <div class="row">
             <div class="col-lg-6 text-left text-lg-left">
-              <p class="cta-text text-center">
+              <p class="cta-text text-center" style="margin-block-end: 0; margin-left: 20px; margin-top: 20px;">
                 Learn about Apache Isis™ by running the minimal <a href="https://github.com/apache/isis-app-helloworld">helloworld</a>&nbsp;starter&nbsp;app.
               </p>
             </div>
             <div class="col-lg-6 text-left text-lg-left">
-              <p class="cta-text text-center">
+              <p class="cta-text text-center" style="margin-block-end: 0; margin-left: 20px; margin-top: 20px;">
                 Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.</p>
               </p>
             </div>


[isis] 04/19: ISIS-2062: docs

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

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

commit 6b5accd50ebda48e23451ba795ef9c7267d40e83
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jan 27 09:36:38 2020 +0000

    ISIS-2062: docs
---
 antora/components/toc/modules/ROOT/pages/about.adoc         | 7 ++++++-
 antora/components/toc/modules/ROOT/partials/module-nav.adoc | 6 +++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/antora/components/toc/modules/ROOT/pages/about.adoc b/antora/components/toc/modules/ROOT/pages/about.adoc
index 8bd1bd6..287a09c 100644
--- a/antora/components/toc/modules/ROOT/pages/about.adoc
+++ b/antora/components/toc/modules/ROOT/pages/about.adoc
@@ -24,6 +24,11 @@
 * xref:starters:helloworld:about.adoc[Hello World]
 * xref:starters:simpleapp:about.adoc[SimpleApp]
 
+_Resources_
+
+* xref:starters:parent-pom:about.adoc[Parent POM]
+* xref:starters:mavendeps:about.adoc[Maven Dependencies]
+
 |
 [discrete]
 == Demos & Tutorials
@@ -50,7 +55,7 @@ _Libraries_
 _Resources_
 
 * *xref:toc:devguide:about.adoc[Developers' Guide]*
-* xref:starters:mavendeps:about.adoc[Maven dependencies]
+
 
 |
 [discrete]
diff --git a/antora/components/toc/modules/ROOT/partials/module-nav.adoc b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
index 642bb66..358489f 100644
--- a/antora/components/toc/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
@@ -10,6 +10,10 @@
 ** xref:starters:helloworld:about.adoc[Hello World]
 ** xref:starters:simpleapp:about.adoc[SimpleApp]
 
+** Resources
+*** xref:starters:parent-pom:about.adoc[Parent POM]
+*** xref:starters:mavendeps:about.adoc[Maven Dependencies]
+
 * Demos & Tutorials
 
 ** xref:demoapp:ROOT:about.adoc[Demo App]
@@ -32,7 +36,7 @@
 ** Resources
 
 *** xref:toc:devguide:about.adoc[Developers' Guide]
-*** xref:starters:mavendeps:about.adoc[Maven dependencies]
+
 
 
 


[isis] 01/19: ISIS-2062: fixes up module-nav's

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

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

commit 14bbef3c3830135e234b707185a92956468adb10
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jan 27 08:21:35 2020 +0000

    ISIS-2062: fixes up module-nav's
---
 .../core/modules/ROOT/partials/module-nav.adoc          |  2 +-
 .../extensions/modules/ROOT/partials/module-nav.adoc    |  2 +-
 .../incubator/modules/ROOT/partials/module-nav.adoc     |  4 +---
 .../legacy/modules/ROOT/partials/module-nav.adoc        |  3 +++
 .../mappings/modules/ROOT/partials/module-nav.adoc      |  1 +
 .../refguide/modules/ROOT/partials/module-nav.adoc      |  3 ++-
 .../security/modules/ROOT/partials/component-nav.adoc   |  4 +++-
 .../partials/{module-nav2.adoc => module-nav-end.adoc}  |  0
 .../security/modules/ROOT/partials/module-nav.adoc      |  5 ++++-
 .../subdomains/modules/ROOT/partials/module-nav.adoc    |  1 +
 .../testing/modules/ROOT/partials/module-nav.adoc       |  2 ++
 .../pages/what-is-apache-isis/isis-in-pictures.adoc     |  1 +
 .../userguide/modules/ROOT/partials/module-nav.adoc     |  4 ++++
 .../pages/deployment/externalized-configuration.adoc    |  2 +-
 antora/components/userguide/modules/btb/pages/i18n.adoc |  2 +-
 .../components/userguide/modules/btb/pages/web-xml.adoc |  2 +-
 .../userguide/modules/btb/partials/module-nav.adoc      | 14 +++++++-------
 .../domain-services/event-subscribers.adoc              |  2 +-
 .../domain-services/initialization.adoc                 |  2 +-
 .../programming-model/domain-services/registering.adoc  |  2 +-
 .../domain-services/scoped-services.adoc                |  2 +-
 .../fun/pages/programming-model/inject-services.adoc    |  6 +++---
 .../modules/fun/pages/programming-model/mixins.adoc     |  2 +-
 .../pages/programming-model/view-models/non-jaxb.adoc   |  2 +-
 .../fun/pages/ui-hints/object-titles-and-icons.adoc     |  2 +-
 .../userguide/modules/fun/partials/module-nav.adoc      | 17 ++++++++---------
 .../valuetypes/modules/ROOT/partials/module-nav.adoc    |  4 ++++
 .../main/adoc/modules/runtime-services/pages/about.adoc | 17 +++++++++++++----
 .../modules/runtime-services/partials/module-nav.adoc   |  2 +-
 .../main/adoc/modules/webapp/partials/module-nav.adoc   |  2 +-
 core/webspringboot/src/main/adoc/antora.yml             |  2 --
 .../src/main/adoc/modules/webboot-springboot/nav.adoc   |  1 -
 .../adoc/modules/webboot-springboot/pages/about.adoc    |  3 ---
 .../modules/webboot-springboot/partials/module-nav.adoc |  1 -
 34 files changed, 71 insertions(+), 50 deletions(-)

diff --git a/antora/components/core/modules/ROOT/partials/module-nav.adoc b/antora/components/core/modules/ROOT/partials/module-nav.adoc
index b28b04f..46becff 100644
--- a/antora/components/core/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/core/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,3 @@
-
+* xref:core:ROOT:about.adoc[Core Framework]
 
 
diff --git a/antora/components/extensions/modules/ROOT/partials/module-nav.adoc b/antora/components/extensions/modules/ROOT/partials/module-nav.adoc
index b28b04f..f6f714c 100644
--- a/antora/components/extensions/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/extensions/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,3 @@
-
+* xref:extensions:ROOT:about.adoc[About the Extensions]
 
 
diff --git a/antora/components/incubator/modules/ROOT/partials/module-nav.adoc b/antora/components/incubator/modules/ROOT/partials/module-nav.adoc
index b28b04f..fbb165d 100644
--- a/antora/components/incubator/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/incubator/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1 @@
-
-
-
+* xref:incubator:ROOT:about.adoc[About the Incubator]
diff --git a/antora/components/legacy/modules/ROOT/partials/module-nav.adoc b/antora/components/legacy/modules/ROOT/partials/module-nav.adoc
index b28b04f..0868297 100644
--- a/antora/components/legacy/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/legacy/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,6 @@
+* xref:legacy:ROOT:about.adoc[About the Legacy Catalog]
+
+
 
 
 
diff --git a/antora/components/mappings/modules/ROOT/partials/module-nav.adoc b/antora/components/mappings/modules/ROOT/partials/module-nav.adoc
index b28b04f..d19912f 100644
--- a/antora/components/mappings/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/mappings/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,4 @@
+* xref:mappings:ROOT:about.adoc[About the Bounded Context Mappings]
 
 
 
diff --git a/antora/components/refguide/modules/ROOT/partials/module-nav.adoc b/antora/components/refguide/modules/ROOT/partials/module-nav.adoc
index 283450e..2c7695d 100644
--- a/antora/components/refguide/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/refguide/modules/ROOT/partials/module-nav.adoc
@@ -1 +1,2 @@
-* Reference Guide
+* xref:refguide:ROOT:about.adoc[About the Reference Guides]
+
diff --git a/antora/components/security/modules/ROOT/partials/component-nav.adoc b/antora/components/security/modules/ROOT/partials/component-nav.adoc
index b4a276b..f6e2c5b 100644
--- a/antora/components/security/modules/ROOT/partials/component-nav.adoc
+++ b/antora/components/security/modules/ROOT/partials/component-nav.adoc
@@ -1,9 +1,11 @@
 include::security:ROOT:partial$module-nav.adoc[]
+
 include::security:core:partial$module-nav.adoc[]
 include::security:bypass:partial$module-nav.adoc[]
 include::security:shiro:partial$module-nav.adoc[]
 include::security:keycloak:partial$module-nav.adoc[]
-include::security:ROOT:partial$module-nav2.adoc[]
+
+include::security:ROOT:partial$module-nav-end.adoc[]
 
 * Extensions
 include::security:shiro-realm-ldap:partial$module-nav.adoc[]
diff --git a/antora/components/security/modules/ROOT/partials/module-nav2.adoc b/antora/components/security/modules/ROOT/partials/module-nav-end.adoc
similarity index 100%
rename from antora/components/security/modules/ROOT/partials/module-nav2.adoc
rename to antora/components/security/modules/ROOT/partials/module-nav-end.adoc
diff --git a/antora/components/security/modules/ROOT/partials/module-nav.adoc b/antora/components/security/modules/ROOT/partials/module-nav.adoc
index f5385ed..8b24a54 100644
--- a/antora/components/security/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/security/modules/ROOT/partials/module-nav.adoc
@@ -1,4 +1,7 @@
-* xref:security:ROOT:domain-services-api-for-applications.adoc[Domain Services]
+* xref:security:ROOT:about.adoc[About the Security Guide]
 
+* xref:security:ROOT:domain-services-api-for-applications.adoc[Domain Services API]
+
+// usage by isis viewers is in module-nav-end.adoc
 
 
diff --git a/antora/components/subdomains/modules/ROOT/partials/module-nav.adoc b/antora/components/subdomains/modules/ROOT/partials/module-nav.adoc
index b28b04f..de6dadf 100644
--- a/antora/components/subdomains/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/subdomains/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,4 @@
+* xref:incubator:ROOT:about.adoc[About the Subdomains]
 
 
 
diff --git a/antora/components/testing/modules/ROOT/partials/module-nav.adoc b/antora/components/testing/modules/ROOT/partials/module-nav.adoc
index a56d949..9404048 100644
--- a/antora/components/testing/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/testing/modules/ROOT/partials/module-nav.adoc
@@ -1,2 +1,4 @@
+* xref:testing:ROOT:about.adoc[About the Testing Guide]
+
 * xref:testing:ROOT:overview.adoc[Overview]
 
diff --git a/antora/components/toc/modules/ROOT/pages/what-is-apache-isis/isis-in-pictures.adoc b/antora/components/toc/modules/ROOT/pages/what-is-apache-isis/isis-in-pictures.adoc
index b7648ad..9947cd5 100644
--- a/antora/components/toc/modules/ROOT/pages/what-is-apache-isis/isis-in-pictures.adoc
+++ b/antora/components/toc/modules/ROOT/pages/what-is-apache-isis/isis-in-pictures.adoc
@@ -4,6 +4,7 @@
 
 
 
+WARNING: TODO: v2 - this material out of date, to be updated (need to migrate much of incode-platform, and port of isis-app-todoapp to github/apache/isis-app-todoapp)
 
 On this page we want to show you what a modern Apache Isis application looks like.
 
diff --git a/antora/components/userguide/modules/ROOT/partials/module-nav.adoc b/antora/components/userguide/modules/ROOT/partials/module-nav.adoc
index e69de29..6b16313 100644
--- a/antora/components/userguide/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/module-nav.adoc
@@ -0,0 +1,4 @@
+* xref:userguide:ROOT:about.adoc[About the User Guide]
+
+
+
diff --git a/antora/components/userguide/modules/btb/pages/deployment/externalized-configuration.adoc b/antora/components/userguide/modules/btb/pages/deployment/externalized-configuration.adoc
index 55cdf9b..ab26609 100644
--- a/antora/components/userguide/modules/btb/pages/deployment/externalized-configuration.adoc
+++ b/antora/components/userguide/modules/btb/pages/deployment/externalized-configuration.adoc
@@ -47,7 +47,7 @@ To tell Apache Isis to load configuration from an external directory, specify th
 
 If the external configuration directory is fixed for all environments (systest, UAT, prod etc), then you can specify within the `web.xml` itself:
 
-// TODO: v2: this has almost certainly changed, because the configuration is picked up earlier; this probably no longer works.
+WARNING: TODO: v2: this has almost certainly changed, because the configuration is picked up earlier; this probably no longer works.
 
 [source,xml]
 ----
diff --git a/antora/components/userguide/modules/btb/pages/i18n.adoc b/antora/components/userguide/modules/btb/pages/i18n.adoc
index 88481fe..f826aa7 100644
--- a/antora/components/userguide/modules/btb/pages/i18n.adoc
+++ b/antora/components/userguide/modules/btb/pages/i18n.adoc
@@ -622,7 +622,7 @@ However, Apache Isis can be configured to read config files from an xref:usergui
 
 Thus, if in `web.xml` the external configuration directory has been set:
 
-// TODO: v2: this almost certainly no longer works, because we now set up configuration very early on.
+WARNING: TODO: v2: this almost certainly no longer works, because we now set up configuration very early on.
 
 [source,xml]
 ----
diff --git a/antora/components/userguide/modules/btb/pages/web-xml.adoc b/antora/components/userguide/modules/btb/pages/web-xml.adoc
index 75c6385..5f4d719 100644
--- a/antora/components/userguide/modules/btb/pages/web-xml.adoc
+++ b/antora/components/userguide/modules/btb/pages/web-xml.adoc
@@ -4,7 +4,7 @@
 :page-partial:
 
 
-// TODO: v2: a lot of this has changed, because we now use `WebModule_Xxx` instead of `web.xml`, ie set this stuff up programmatically.
+WARNING: TODO: v2: a lot of this has changed, because we now use `WebModule_Xxx` instead of `web.xml`, ie set this stuff up programmatically.
 
 
 Apache Isis provides two different viewers, the xref:vw:ROOT:about.adoc[Wicket viewer] and the xref:vro:ROOT:about.adoc[RestfulObjects viewer].
diff --git a/antora/components/userguide/modules/btb/partials/module-nav.adoc b/antora/components/userguide/modules/btb/partials/module-nav.adoc
index eacedee..2c34602 100644
--- a/antora/components/userguide/modules/btb/partials/module-nav.adoc
+++ b/antora/components/userguide/modules/btb/partials/module-nav.adoc
@@ -1,8 +1,8 @@
-* xref:about.adoc[Beyond the Basics]
+* xref:userguide:btb:about.adoc[Beyond the Basics]
 
-** xref:i18n.adoc[i18n]
-** xref:headless-access.adoc[Headless Access]
-** xref:hints-and-tips.adoc[Hints-n-Tips]
-** xref:programming-model.adoc[Programming Model]
-** xref:deployment.adoc[Deployment]
-** xref:web-xml.adoc[web.xml]
+** xref:userguide:btb:i18n.adoc[i18n]
+** xref:userguide:btb:headless-access.adoc[Headless Access]
+** xref:userguide:btb:hints-and-tips.adoc[Hints-n-Tips]
+** xref:userguide:btb:programming-model.adoc[Programming Model]
+** xref:userguide:btb:deployment.adoc[Deployment]
+** xref:userguide:btb:web-xml.adoc[web.xml]
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
index f0ff68d..8c2bb37 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/event-subscribers.adoc
@@ -3,7 +3,7 @@
 :page-partial:
 
 
-// TODO: v2: update for Spring events rather than axon/guava
+WARNING: TODO: v2: update for Spring events rather than axon/guava
 
 Domain services acting as event subscribers can subscribe to xref:userguide:fun:building-blocks.adoc#lifecycle-events[lifecycle] events, influencing the rendering and behaviour of other objects.
 
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/initialization.adoc b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/initialization.adoc
index d3334f2..42f5f60 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/initialization.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/initialization.adoc
@@ -3,7 +3,7 @@
 :page-partial:
 
 
-// TODO: v2: support for init with a Map is no longer supported, I suspect...?  Instead, can x-ref Spring's strongly typed configuration beans
+WARNING: TODO: v2: support for init with a Map is no longer supported, I suspect...?  Instead, can x-ref Spring's strongly typed configuration beans
 
 Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed).
 
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/registering.adoc b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/registering.adoc
index e360730..29e064a 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/registering.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/registering.adoc
@@ -3,7 +3,7 @@
 :page-partial:
 
 
-// TODO: v2: this is out of date, need to xref Spring Boot mechanism instead.
+WARNING: TODO: v2: this is out of date, need to xref Spring Boot mechanism instead.
 
 
 The easiest way to register domain services with the framework is to use an xref:refguide:applib-cm:classes/AppManifest-bootstrapping.adoc[`AppManifest`].
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/scoped-services.adoc b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/scoped-services.adoc
index 9584c87..b90388a 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/domain-services/scoped-services.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/domain-services/scoped-services.adoc
@@ -2,7 +2,7 @@
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :page-partial:
 
-// TODO: v2: extend this/fix for Spring Boot scopes; does it support CDI annotation? which other scopes are supported?
+WARNING: TODO: v2: extend this/fix for Spring Boot scopes; does it support CDI annotation? which other scopes are supported?
 
 By default all domain services are considered to be singletons, and thread-safe.
 
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/inject-services.adoc b/antora/components/userguide/modules/fun/pages/programming-model/inject-services.adoc
index 2f80f76..72dc2b3 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/inject-services.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/inject-services.adoc
@@ -79,7 +79,7 @@ Note that the method name can be anything; it doesn't need to be related to the
 
 == Constructor injection
 
-TODO: v2: this is now supported, because of Spring Boot, I think.
+NOTE: TODO: v2: this is now supported, because of Spring Boot, I think.
 
 
 == Multiple Implementations
@@ -93,13 +93,13 @@ When there are multiple service implementations of a given type, annotate the di
 
 == Scoping
 
-TODO: v2: should describe how this works.
+WARNING: TODO: v2: should describe how this works.
 
 
 
 == Qualified Injection
 
-TODO: v2: x-ref to Spring Boot docs.
+NOTE: TODO: v2: x-ref to Spring Boot docs.
 
 
 
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/mixins.adoc b/antora/components/userguide/modules/fun/pages/programming-model/mixins.adoc
index a695a3b..4ef8f71 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/mixins.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/mixins.adoc
@@ -7,7 +7,7 @@ A xref:userguide:fun:building-blocks.adoc#mixins[mixin] acts like a trait or ext
 
 Syntactically, a mixin is defined using either the xref:refguide:applib-ant:Mixin.adoc[`@Mixin`] annotation or using xref:refguide:applib-ant:DomainObject.adoc#nature[`@DomainObject#nature()`] attribute (specifying a nature of `Nature.MIXIN`).
 
-// TODO: v2: perhaps we should get rid of @DomainObject#nature=MIXIN ?
+WARNING: TODO: v2: perhaps we should get rid of @DomainObject#nature=MIXIN ?
 
 [source,java]
 ----
diff --git a/antora/components/userguide/modules/fun/pages/programming-model/view-models/non-jaxb.adoc b/antora/components/userguide/modules/fun/pages/programming-model/view-models/non-jaxb.adoc
index 5d7be24..6ba7096 100644
--- a/antora/components/userguide/modules/fun/pages/programming-model/view-models/non-jaxb.adoc
+++ b/antora/components/userguide/modules/fun/pages/programming-model/view-models/non-jaxb.adoc
@@ -9,7 +9,7 @@ Instead of using JAXB to specify a view model, it is also possible to use Apache
 As was explained xref:userguide:fun:programming-model.adoc#view-models[earlier], the approach is described here is neither as flexible nor as powerful as using the JAXB-style of view models.
 It is however likely to be faster.
 
-// TODO: v2: I think we should only support programmatic API (ViewModel), and JAXB.
+WARNING: TODO: v2: I think we should only support programmatic API (ViewModel), and JAXB.
 //  So let's get rid of all these other natures that, under the covers, are all our original poor-man's JAXB (ie, EXTERNAL_ENTITY, INMEMORY_ENTITY, VIEW_MODEL, and @ViewModel itself).
 
 
diff --git a/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc b/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
index 7c63c5a..0e34465 100644
--- a/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
@@ -231,7 +231,7 @@ public class Order {
 
 The subscriber can then populate this event:
 
-// *TODO: v2: *what annotation is required for SpringBoot event subscribers?
+WARNING: TODO: v2: what annotation is required for SpringBoot event subscribers?
 
 [source,java]
 ----
diff --git a/antora/components/userguide/modules/fun/partials/module-nav.adoc b/antora/components/userguide/modules/fun/partials/module-nav.adoc
index bfa3115..25a0fa2 100644
--- a/antora/components/userguide/modules/fun/partials/module-nav.adoc
+++ b/antora/components/userguide/modules/fun/partials/module-nav.adoc
@@ -1,21 +1,20 @@
-* xref:about.adoc[Fundamentals]
+* xref:userguide:fun:about.adoc[Fundamentals]
 
-
-** xref:core-concepts.adoc[Core Concepts]
+** xref:userguide:fun:core-concepts.adoc[Core Concepts]
 
 ** xref:userguide:fun:building-blocks.adoc[Building Blocks]
 
-** xref:programming-model.adoc[Programming Model]
+** xref:userguide:fun:programming-model.adoc[Programming Model]
 
-** xref:ui-hints.adoc[UI Hints]
+** xref:userguide:fun:ui-hints.adoc[UI Hints]
 
-** xref:crud.adoc[CRUD]
+** xref:userguide:fun:crud.adoc[CRUD]
 
-** xref:business-rules.adoc[Business Rules]
+** xref:userguide:fun:business-rules.adoc[Business Rules]
 
-** xref:drop-downs-and-defaults.adoc[Drop downs and Defaults]
+** xref:userguide:fun:drop-downs-and-defaults.adoc[Drop downs and Defaults]
 
-** xref:available-domain-services.adoc[Available Domain Services]
+** xref:userguide:fun:available-domain-services.adoc[Available Domain Services]
 
 
 
diff --git a/antora/components/valuetypes/modules/ROOT/partials/module-nav.adoc b/antora/components/valuetypes/modules/ROOT/partials/module-nav.adoc
index b28b04f..b3cef64 100644
--- a/antora/components/valuetypes/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/valuetypes/modules/ROOT/partials/module-nav.adoc
@@ -1,3 +1,7 @@
+* xref:incubator:ROOT:about.adoc[About the Value Types Catalog]
+
+
+
 
 
 
diff --git a/core/runtimeservices/src/main/adoc/modules/runtime-services/pages/about.adoc b/core/runtimeservices/src/main/adoc/modules/runtime-services/pages/about.adoc
index 4c7e2e8..64b0690 100644
--- a/core/runtimeservices/src/main/adoc/modules/runtime-services/pages/about.adoc
+++ b/core/runtimeservices/src/main/adoc/modules/runtime-services/pages/about.adoc
@@ -1,6 +1,17 @@
-= Framework Internal Services
+= Runtime (non-API) Services
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+:page-role: -toc -title
 
-This guide documents a number of domain services that are not part of the framework's formal API, they use classes that are outside of the applib.  They should be
+
+WARNING: TODO: v2: to be updated
+
+
+This Maven module contains implementations of both public API services (as defined in the applib) and also non-API classes.
+
+See the xref:refguide:applib-svc:[Domain Services Referenc e Guide] for details on the public API services.
+
+This documentation relates only to the non-API services
+These documents should be
 thought of as part of the internal design of the framework, and are liable to change from release to release.
 
 
@@ -10,5 +21,3 @@ We do not guarantee that link:http://semver.org[semantic versioning] will be hon
 ====
 
 
-
-
diff --git a/core/runtimeservices/src/main/adoc/modules/runtime-services/partials/module-nav.adoc b/core/runtimeservices/src/main/adoc/modules/runtime-services/partials/module-nav.adoc
index 380ab44..3e51470 100644
--- a/core/runtimeservices/src/main/adoc/modules/runtime-services/partials/module-nav.adoc
+++ b/core/runtimeservices/src/main/adoc/modules/runtime-services/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:core:runtime-services:about.adoc[Framework Internal Services]
+* xref:core:runtime-services:about.adoc[Runtime Services]
 
 ** xref:core:runtime-services:presentation-layer.adoc[Presentation Layer]
 *** xref:core:runtime-services:presentation-layer/ContentNegotiationService.adoc[ContentNegotiationService]
diff --git a/core/webapp/src/main/adoc/modules/webapp/partials/module-nav.adoc b/core/webapp/src/main/adoc/modules/webapp/partials/module-nav.adoc
index d2fe2f2..291b567 100644
--- a/core/webapp/src/main/adoc/modules/webapp/partials/module-nav.adoc
+++ b/core/webapp/src/main/adoc/modules/webapp/partials/module-nav.adoc
@@ -1 +1 @@
-* xref:core:runtime-web:about.adoc[Runtime Web]
+* xref:core:webapp:about.adoc[Webapp]
diff --git a/core/webspringboot/src/main/adoc/antora.yml b/core/webspringboot/src/main/adoc/antora.yml
deleted file mode 100644
index 576eb80..0000000
--- a/core/webspringboot/src/main/adoc/antora.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-name: vro
-version: master
diff --git a/core/webspringboot/src/main/adoc/modules/webboot-springboot/nav.adoc b/core/webspringboot/src/main/adoc/modules/webboot-springboot/nav.adoc
deleted file mode 100644
index 3e815f1..0000000
--- a/core/webspringboot/src/main/adoc/modules/webboot-springboot/nav.adoc
+++ /dev/null
@@ -1 +0,0 @@
-include::core:ROOT:partial$component-nav.adoc[]
diff --git a/core/webspringboot/src/main/adoc/modules/webboot-springboot/pages/about.adoc b/core/webspringboot/src/main/adoc/modules/webboot-springboot/pages/about.adoc
deleted file mode 100644
index 666722c..0000000
--- a/core/webspringboot/src/main/adoc/modules/webboot-springboot/pages/about.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= Runtime Spring
-
-
diff --git a/core/webspringboot/src/main/adoc/modules/webboot-springboot/partials/module-nav.adoc b/core/webspringboot/src/main/adoc/modules/webboot-springboot/partials/module-nav.adoc
deleted file mode 100644
index 614006d..0000000
--- a/core/webspringboot/src/main/adoc/modules/webboot-springboot/partials/module-nav.adoc
+++ /dev/null
@@ -1 +0,0 @@
-* xref:core:webboot-springboot:about.adoc[SpringBoot]


[isis] 16/19: ISIS-2062: docs

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

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

commit d656836f92c26634e3e98d963183e3ad8c7918fb
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 09:33:54 2020 +0000

    ISIS-2062: docs
---
 starters/adoc/modules/parent-pom/pages/about.adoc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/starters/adoc/modules/parent-pom/pages/about.adoc b/starters/adoc/modules/parent-pom/pages/about.adoc
index afa7c59..6989e8d 100644
--- a/starters/adoc/modules/parent-pom/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -1,5 +1,6 @@
 = Parent POM
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+:page-role: -toc
 
 
 The starter app parent POM is provided as a convenience to act as the `<parent>` for Apache Isis applications.


[isis] 15/19: ISIS-2062: docs

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

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

commit 0dd7911f45ff5e6e121e145800a35d7585a0005c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 09:25:56 2020 +0000

    ISIS-2062: docs
---
 antora/supplemental-ui/css/site-custom.css         |   1 +
 .../modules/parent-pom/attachments/parent-pom.pptx | Bin 51655 -> 51613 bytes
 .../adoc/modules/parent-pom/images/parent-pom.png  | Bin 68515 -> 68900 bytes
 starters/adoc/modules/parent-pom/pages/about.adoc  |  54 ++++++++++++++++++++-
 4 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/antora/supplemental-ui/css/site-custom.css b/antora/supplemental-ui/css/site-custom.css
index 9be8476..9c15656 100644
--- a/antora/supplemental-ui/css/site-custom.css
+++ b/antora/supplemental-ui/css/site-custom.css
@@ -17,3 +17,4 @@ div.paragraph code {
 .content .ulist .ulist ul {
     padding-left: 1rem;
 }
+
diff --git a/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx b/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx
index c664667..c424c3d 100644
Binary files a/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx and b/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx differ
diff --git a/starters/adoc/modules/parent-pom/images/parent-pom.png b/starters/adoc/modules/parent-pom/images/parent-pom.png
index da8feee..3794f7e 100644
Binary files a/starters/adoc/modules/parent-pom/images/parent-pom.png and b/starters/adoc/modules/parent-pom/images/parent-pom.png differ
diff --git a/starters/adoc/modules/parent-pom/pages/about.adoc b/starters/adoc/modules/parent-pom/pages/about.adoc
index 4dd7686..afa7c59 100644
--- a/starters/adoc/modules/parent-pom/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -2,5 +2,57 @@
 :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 [...]
 
 
-TODO: to document
+The starter app parent POM is provided as a convenience to act as the `<parent>` for Apache Isis applications.
+It builds upon a similar POM provided by the Spring Boot framework, which ensures a consistent set of dependencies, as well as configuring various build plugins.
+
+To use it, just add:
+
+[source,xml]
+.pom.xml
+----
+<parent>
+    <groupId>org.apache.isis.app</groupId>
+    <artifactId>isis-app-starter-parent</artifactId>
+    <version>2.0.0</version>                            <!--1-->
+</parent>
+----
+<1> update as required for new versions of the framework.
+
+You'll see that it is used by both the xref:starters:helloworld:about.adoc[HelloWorld] and xref:starters:simpleapp:about.adoc[SimpleApp] starter apps.
+
+The link:{attachmentsdir}/parent-pom.pptx[diagram] below shows how the parent POM relates to other POMs:
+
+image::parent-pom.png[width="600px",link="{imagesdir}/parent-pom.png"]
+
+In more detail, the parent POM:
+
+* inherits from `org.springframework.boot:spring-boot-starter-parent`
++
+which configures various `<build>/<plugins>` and `<resources`>
+
+* transitively inherits from `org.springframework.boot:spring-boot-dependencies`
++
+which defines numerous `xxx.version` properties for various third party applications, and sets up corresponding `<dependencyManagement>/<dependencies>`.
+These have been validated as being compatible with each other by the Spring Boot team.
+
+* imports `org.apache.isis.core:isis` (using scope=import, type=pom)
++
+\... setting up `<dependencyManagement>/<dependencies>` entries for all of the core modules.
++
+TIP: The two core modules most commonly referenced in domain applications are `o.a.i.core:isis-applib` and `o.a.i.core:isis-schema`.
+
+* similarly imports `o.a.i.testing:isis-testing`, for the `isis-testing-xxx` modules
+
+* imports `o.a.i.extensions:isis-extensions`, for `isis-extension-xxx` modules
+
+* imports `o.a.i.subdomains:isis-subdomains`, for `isis-subdomain-xxx` modules
+
+* imports `o.a.i.mappings:isis-mappings`, for `isis-mappings-xxx` modules
+
+* imports `o.a.i.valuetypes:isis-valuetypes`, for `isis-valuetypes-xxx` modules
+
+* imports `o.a.i.incubator:isis-incubator`, for `isis-incubator-xxx` modules
+
+* imports `o.a.i.legacy:isis-legacy`, for `isis-legacy-xxx` modules
+
 


[isis] 13/19: ISIS-2062: docs

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

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

commit a93787b03ad46e11bb51c8bb51d8cb5370208a10
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 00:16:12 2020 +0000

    ISIS-2062: docs
---
 mavendeps/adoc/modules/mavendeps/pages/about.adoc         | 1 +
 starters/adoc/modules/parent-pom/partials/module-nav.adoc | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/mavendeps/adoc/modules/mavendeps/pages/about.adoc b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
index 2b140a1..ac42916 100644
--- a/mavendeps/adoc/modules/mavendeps/pages/about.adoc
+++ b/mavendeps/adoc/modules/mavendeps/pages/about.adoc
@@ -1,3 +1,4 @@
 = Maven Dependencies
+: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 [...]
 
 TODO: to document
diff --git a/starters/adoc/modules/parent-pom/partials/module-nav.adoc b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
index c28175b..53b2005 100644
--- a/starters/adoc/modules/parent-pom/partials/module-nav.adoc
+++ b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-** xref:about.adoc[Parent POM]
+** xref:starters:parent-pom:about.adoc[Parent POM]
 
 
 


[isis] 17/19: ISIS-2062: docs

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

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

commit d774fc5a5fb17fc6ca854e6c898fa619777ec8e4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 09:41:46 2020 +0000

    ISIS-2062: docs
---
 starters/adoc/modules/parent-pom/pages/about.adoc | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/starters/adoc/modules/parent-pom/pages/about.adoc b/starters/adoc/modules/parent-pom/pages/about.adoc
index 6989e8d..45343b5 100644
--- a/starters/adoc/modules/parent-pom/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -1,11 +1,12 @@
 = Parent POM
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-:page-role: -toc
 
 
 The starter app parent POM is provided as a convenience to act as the `<parent>` for Apache Isis applications.
 It builds upon a similar POM provided by the Spring Boot framework, which ensures a consistent set of dependencies, as well as configuring various build plugins.
 
+== Usage
+
 To use it, just add:
 
 [source,xml]
@@ -21,20 +22,24 @@ To use it, just add:
 
 You'll see that it is used by both the xref:starters:helloworld:about.adoc[HelloWorld] and xref:starters:simpleapp:about.adoc[SimpleApp] starter apps.
 
+== Relationship to other POMs
+
 The link:{attachmentsdir}/parent-pom.pptx[diagram] below shows how the parent POM relates to other POMs:
 
 image::parent-pom.png[width="600px",link="{imagesdir}/parent-pom.png"]
 
-In more detail, the parent POM:
+
+So, you can see that the parent POM:
 
 * inherits from `org.springframework.boot:spring-boot-starter-parent`
 +
-which configures various `<build>/<plugins>` and `<resources`>
+This configures various `<build>/<plugins>` and `<resources`>
 
 * transitively inherits from `org.springframework.boot:spring-boot-dependencies`
 +
-which defines numerous `xxx.version` properties for various third party applications, and sets up corresponding `<dependencyManagement>/<dependencies>`.
-These have been validated as being compatible with each other by the Spring Boot team.
+This defines numerous `xxx.version` properties for various third party applications, and sets up corresponding `<dependencyManagement>/<dependencies>`.
++
+NOTE: These have been validated as being compatible with each other by the Spring Boot team.
 
 * imports `org.apache.isis.core:isis` (using scope=import, type=pom)
 +


[isis] 03/19: ISIS-2062: docs

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

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

commit 2e2d19b87e2366f5332047879d8d692e8f023f18
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jan 27 09:33:17 2020 +0000

    ISIS-2062: docs
---
 antora/components/toc/modules/ROOT/pages/about.adoc            |  6 +++---
 .../components/toc/modules/ROOT/pages/landing-page/guides.adoc |  2 +-
 antora/components/toc/modules/ROOT/partials/module-nav.adoc    |  6 +++---
 starters/adoc/modules/ROOT/pages/about.adoc                    | 10 ++++++++++
 starters/adoc/modules/ROOT/partials/component-nav.adoc         |  1 +
 starters/adoc/modules/ROOT/partials/module-nav.adoc            |  2 +-
 starters/adoc/modules/parent-pom/nav.adoc                      |  4 ++++
 starters/adoc/modules/{ROOT => parent-pom}/pages/about.adoc    |  2 +-
 starters/adoc/modules/parent-pom/partials/module-nav.adoc      |  4 ++++
 9 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/antora/components/toc/modules/ROOT/pages/about.adoc b/antora/components/toc/modules/ROOT/pages/about.adoc
index 3956a05..8bd1bd6 100644
--- a/antora/components/toc/modules/ROOT/pages/about.adoc
+++ b/antora/components/toc/modules/ROOT/pages/about.adoc
@@ -21,8 +21,8 @@
 [discrete]
 == Starter Apps
 
-* link:https://github.com/apache/isis-app-helloworld[Hello World]
-* link:https://github.com/apache/isis-app-simpleapp[SimpleApp]
+* xref:starters:helloworld:about.adoc[Hello World]
+* xref:starters:simpleapp:about.adoc[SimpleApp]
 
 |
 [discrete]
@@ -50,7 +50,7 @@ _Libraries_
 _Resources_
 
 * *xref:toc:devguide:about.adoc[Developers' Guide]*
-* xref:toc:mavendeps:about.adoc[Maven dependencies]
+* xref:starters:mavendeps:about.adoc[Maven dependencies]
 
 |
 [discrete]
diff --git a/antora/components/toc/modules/ROOT/pages/landing-page/guides.adoc b/antora/components/toc/modules/ROOT/pages/landing-page/guides.adoc
index 4a5f6da..d3f01ff 100644
--- a/antora/components/toc/modules/ROOT/pages/landing-page/guides.adoc
+++ b/antora/components/toc/modules/ROOT/pages/landing-page/guides.adoc
@@ -47,5 +47,5 @@ As well as the current libraries, the xref:incubator:ROOT:about.adoc[Incubator]
 == Resources
 
 * *xref:toc:devguide:about.adoc[Developers' Guide]*
-* xref:toc:mavendeps:about.adoc[Maven dependencies]
+* xref:starters:mavendeps:about.adoc[Maven dependencies]
 
diff --git a/antora/components/toc/modules/ROOT/partials/module-nav.adoc b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
index 59277a0..642bb66 100644
--- a/antora/components/toc/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
@@ -7,8 +7,8 @@
 
 * Starter Apps
 
-** link:https://github.com/apache/isis-app-helloworld[HelloWorld]
-** link:https://github.com/apache/isis-app-simpleapp[SimpleApp]
+** xref:starters:helloworld:about.adoc[Hello World]
+** xref:starters:simpleapp:about.adoc[SimpleApp]
 
 * Demos & Tutorials
 
@@ -32,7 +32,7 @@
 ** Resources
 
 *** xref:toc:devguide:about.adoc[Developers' Guide]
-*** xref:toc:mavendeps:about.adoc[Maven dependencies]
+*** xref:starters:mavendeps:about.adoc[Maven dependencies]
 
 
 
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index dc813d2..625d74c 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -4,3 +4,13 @@
 
 TODO: to document
 
+
+Starter Apps:
+
+* xref:starters:helloworld:about.adoc[Hello World]
+* xref:starters:simpleapp:about.adoc[SimpleApp]
+
+Maven:
+
+* xref:starters:parent-pom:about.adoc[Parent POM]
+* xref:starters:mavendeps:about.adoc[Maven Deps]
diff --git a/starters/adoc/modules/ROOT/partials/component-nav.adoc b/starters/adoc/modules/ROOT/partials/component-nav.adoc
index 173b4df..4a135f7 100644
--- a/starters/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/starters/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,6 +1,7 @@
 include::starters:ROOT:partial$module-nav.adoc[]
 include::starters:helloworld:partial$module-nav.adoc[]
 include::starters:simpleapp:partial$module-nav.adoc[]
+include::starters:parent-pom:partial$module-nav.adoc[]
 include::starters:mavendeps:partial$module-nav.adoc[]
 
 
diff --git a/starters/adoc/modules/ROOT/partials/module-nav.adoc b/starters/adoc/modules/ROOT/partials/module-nav.adoc
index 579c69c..47a1dbd 100644
--- a/starters/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/starters/adoc/modules/ROOT/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:about.adoc[Starter Parent]
+* xref:about.adoc[About the Starter Apps]
 
 
 
diff --git a/starters/adoc/modules/parent-pom/nav.adoc b/starters/adoc/modules/parent-pom/nav.adoc
new file mode 100644
index 0000000..cf57def
--- /dev/null
+++ b/starters/adoc/modules/parent-pom/nav.adoc
@@ -0,0 +1,4 @@
+include::starters:ROOT:partial$component-nav.adoc[]
+
+
+
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/parent-pom/pages/about.adoc
similarity index 98%
copy from starters/adoc/modules/ROOT/pages/about.adoc
copy to starters/adoc/modules/parent-pom/pages/about.adoc
index dc813d2..4dd7686 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/parent-pom/pages/about.adoc
@@ -1,4 +1,4 @@
-= Starter Apps
+= Parent POM
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 
diff --git a/starters/adoc/modules/parent-pom/partials/module-nav.adoc b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
new file mode 100644
index 0000000..8e1a9e3
--- /dev/null
+++ b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
@@ -0,0 +1,4 @@
+* xref:about.adoc[Parent POM]
+
+
+


[isis] 09/19: ISIS-2062: docs

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

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

commit 5aa1aa30f710fd498a9c58ee397a44cabb0e0a5c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:52:50 2020 +0000

    ISIS-2062: docs
---
 antora/supplemental-ui/index.html | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index b31cd95..b9deac9 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -609,6 +609,11 @@ Examples
                 Learn about Apache Isis™ by running the minimal <a href="https://github.com/apache/isis-app-helloworld">helloworld</a>&nbsp;starter&nbsp;app.
               </p>
             </div>
+            <div class="col-lg-6 text-left text-lg-left">
+              <p class="cta-text text-center">
+                Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.</p>
+              </p>
+            </div>
           </div>
           <div class="row">
             <div class="col-lg-6 text-left text-lg-left">
@@ -627,13 +632,6 @@ mvn spring-boot:run</pre>
               </p>
             </div>
             <div class="col-lg-6 text-left text-lg-left">
-              <p class="cta-text text-center">
-                Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.</p>
-              </p>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-lg-6 text-left text-lg-left">
               <p>
                 <pre>
 APP=simpleapp


[isis] 06/19: ISIS-2062: docs

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

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

commit 46bb1f4fe9907dcd949cf9c72581a8e0d3449fde
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:32:29 2020 +0000

    ISIS-2062: docs
---
 antora/components/toc/modules/ROOT/pages/about.adoc |   8 +++++---
 .../toc/modules/ROOT/partials/module-nav.adoc       |   6 +++---
 .../core-concepts/philosophy/build-vs-buy.png       | Bin 34337 -> 37061 bytes
 .../core-concepts/philosophy/build-vs-buy.pptx      | Bin 63121 -> 38332 bytes
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/antora/components/toc/modules/ROOT/pages/about.adoc b/antora/components/toc/modules/ROOT/pages/about.adoc
index 287a09c..30ced5c 100644
--- a/antora/components/toc/modules/ROOT/pages/about.adoc
+++ b/antora/components/toc/modules/ROOT/pages/about.adoc
@@ -19,7 +19,7 @@
 
 |
 [discrete]
-== Starter Apps
+== xref:starters:ROOT:about.adoc[Starter Apps]
 
 * xref:starters:helloworld:about.adoc[Hello World]
 * xref:starters:simpleapp:about.adoc[SimpleApp]
@@ -44,7 +44,11 @@ _Core_
 
 * *xref:userguide:ROOT:about.adoc[User Guide]*
 * *xref:refguide:ROOT:about.adoc[Reference Guide]*
+
+_Development_
+
 * *xref:testing:ROOT:about.adoc[Testing Guide]*
+* *xref:toc:devguide:about.adoc[Developers' Guide]*
 
 _Libraries_
 
@@ -52,9 +56,7 @@ _Libraries_
 *  xref:valuetypes:ROOT:about.adoc[Value Types]
 *  xref:mappings:ROOT:about.adoc[Bounded Context Mapping Libraries]
 
-_Resources_
 
-* *xref:toc:devguide:about.adoc[Developers' Guide]*
 
 
 |
diff --git a/antora/components/toc/modules/ROOT/partials/module-nav.adoc b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
index 0916310..2494cbd 100644
--- a/antora/components/toc/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
@@ -26,8 +26,10 @@
 ** Core
 *** xref:userguide:ROOT:about.adoc[User Guide]
 *** xref:refguide:ROOT:about.adoc[Reference Guide]
-*** xref:testing:ROOT:about.adoc[Testing Guide]
+
+** Development
 *** xref:toc:devguide:about.adoc[Developers' Guide]
+*** xref:testing:ROOT:about.adoc[Testing Guide]
 
 ** Libraries
 
@@ -35,8 +37,6 @@
 ***  xref:valuetypes:ROOT:about.adoc[Value Types]
 ***  xref:mappings:ROOT:about.adoc[Bounded Context Mapping Libraries]
 
-** Resources
-
 
 
 
diff --git a/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.png b/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.png
index f95ae93..7112ef5 100644
Binary files a/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.png and b/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.png differ
diff --git a/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.pptx b/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.pptx
index 3c2e9fe..760565d 100644
Binary files a/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.pptx and b/antora/components/userguide/modules/fun/images/core-concepts/philosophy/build-vs-buy.pptx differ


[isis] 05/19: ISIS-2062: aligns toc nav

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

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

commit c9264e93a6c6d9fedeca004db054e49be5394fba
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 17:45:48 2020 +0000

    ISIS-2062: aligns toc nav
---
 antora/components/toc/modules/ROOT/partials/module-nav.adoc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/antora/components/toc/modules/ROOT/partials/module-nav.adoc b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
index 358489f..0916310 100644
--- a/antora/components/toc/modules/ROOT/partials/module-nav.adoc
+++ b/antora/components/toc/modules/ROOT/partials/module-nav.adoc
@@ -1,5 +1,5 @@
 * What is Apache Isis?
-** *xref:what-is-apache-isis/isis-in-pictures.adoc[Apache Isis in pictures]*
+** xref:what-is-apache-isis/isis-in-pictures.adoc[Apache Isis in pictures]
 ** xref:what-is-apache-isis/common-use-cases.adoc[Common Use Cases]
 ** xref:what-is-apache-isis/screencasts.adoc[Screencasts]
 ** xref:what-is-apache-isis/powered-by.adoc[Powered By]
@@ -14,6 +14,7 @@
 *** xref:starters:parent-pom:about.adoc[Parent POM]
 *** xref:starters:mavendeps:about.adoc[Maven Dependencies]
 
+
 * Demos & Tutorials
 
 ** xref:demoapp:ROOT:about.adoc[Demo App]
@@ -26,6 +27,7 @@
 *** xref:userguide:ROOT:about.adoc[User Guide]
 *** xref:refguide:ROOT:about.adoc[Reference Guide]
 *** xref:testing:ROOT:about.adoc[Testing Guide]
+*** xref:toc:devguide:about.adoc[Developers' Guide]
 
 ** Libraries
 
@@ -35,7 +37,6 @@
 
 ** Resources
 
-*** xref:toc:devguide:about.adoc[Developers' Guide]
 
 
 


[isis] 14/19: ISIS-2062: docs

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

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

commit e9ae4593bf2ca906591f9532c3c01fc0019141c3
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 08:44:57 2020 +0000

    ISIS-2062: docs
---
 .../isis-configurations-and-modules.pptx           | Bin 49903 -> 0 bytes
 .../attachments/modules-dependencies.pptx          | Bin 0 -> 48379 bytes
 .../archdesign/attachments/pom-hierarchy.pptx      | Bin 51849 -> 0 bytes
 .../archdesign/images/modules-dependencies.png     | Bin 0 -> 59588 bytes
 starters/adoc/modules/ROOT/pages/about.adoc        |  17 +++++++---------
 .../adoc/modules/parent-pom}/attachments/.gitkeep  |   0
 .../modules/parent-pom/attachments/parent-pom.pptx | Bin 0 -> 51655 bytes
 .../adoc/modules/parent-pom/images/parent-pom.png  | Bin 0 -> 68515 bytes
 .../adoc/modules/simpleapp}/attachments/.gitkeep   |   0
 .../simpleapp-modules-dependencies.pptx            | Bin 0 -> 47706 bytes
 .../images/simpleapp-modules-dependencies.png      | Bin 0 -> 64551 bytes
 starters/adoc/modules/simpleapp/pages/about.adoc   |  22 +++++++++++++++++++++
 12 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/antora/components/core/modules/archdesign/attachments/isis-configurations-and-modules.pptx b/antora/components/core/modules/archdesign/attachments/isis-configurations-and-modules.pptx
deleted file mode 100644
index 17f9f60..0000000
Binary files a/antora/components/core/modules/archdesign/attachments/isis-configurations-and-modules.pptx and /dev/null differ
diff --git a/antora/components/core/modules/archdesign/attachments/modules-dependencies.pptx b/antora/components/core/modules/archdesign/attachments/modules-dependencies.pptx
new file mode 100644
index 0000000..02ad262
Binary files /dev/null and b/antora/components/core/modules/archdesign/attachments/modules-dependencies.pptx differ
diff --git a/antora/components/core/modules/archdesign/attachments/pom-hierarchy.pptx b/antora/components/core/modules/archdesign/attachments/pom-hierarchy.pptx
deleted file mode 100644
index 0720727..0000000
Binary files a/antora/components/core/modules/archdesign/attachments/pom-hierarchy.pptx and /dev/null differ
diff --git a/antora/components/core/modules/archdesign/images/modules-dependencies.png b/antora/components/core/modules/archdesign/images/modules-dependencies.png
new file mode 100644
index 0000000..baa01c4
Binary files /dev/null and b/antora/components/core/modules/archdesign/images/modules-dependencies.png differ
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index 585d9c3..2ece453 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -8,28 +8,25 @@ To get started with a new application, download one of the two starter apps.
 
 The helloworld app is a very minimal app, intended just as a starting point to learn what the framework is all about.
 
-include::starters:helloworld:page$script.adoc[]
-
+The source code is in this link:https://github.com/apache/isis-app-helloworld[git repo] which you can either fork, or just download as a zip:
 
-Notes:
+include::starters:helloworld:page$script.adoc[]
 
-* you can find an explanation of how to use the app, and of its structure xref:starters:helloworld:about.adoc[here]
-* the source code can be found in this link:https://github.com/apache/isis-app-helloworld[git repo]
 
+An explanation of the structure of the app can be found *xref:starters:helloworld:about.adoc[here]*.
 
 
 == Simple App
 
 This app has the same functionality as _HelloWorld_, but is structured so it can be used as a starting point for developing your own applications.
+It also includes some xref:testing:integtestsupport:about.adoc[integration tests], xref:testing:fixtures:about.adoc[fixtures], and xref:testing:specsupport:about.adoc[BDD (Cucumber)] specs.
 
-include::starters:simpleapp:page$script.adoc[]
+The source code can be found in this link:https://github.com/apache/isis-app-simpleapp[git repo] which you can either fork, or just download as a zip:
 
-It also includes some xref:testing:integtestsupport:about.adoc[integration tests], xref:testing:fixtures:about.adoc[fixtures], and xref:testing:specsupport:about.adoc[BDD (Cucumber)] specs.
+include::starters:simpleapp:page$script.adoc[]
 
-Notes:
 
-* you can find an explanation of how to use the app, and of its structure xref:starters:simpleapp:about.adoc[here]
-* the source code can be found in this link:https://github.com/apache/isis-app-simpleapp[git repo]
+An explanation of the structure of the app can be found *xref:starters:helloworld:about.adoc[here]*.
 
 
 == Updating to Newer Versions
diff --git a/antora/components/core/modules/archdesign/attachments/.gitkeep b/starters/adoc/modules/parent-pom/attachments/.gitkeep
similarity index 100%
copy from antora/components/core/modules/archdesign/attachments/.gitkeep
copy to starters/adoc/modules/parent-pom/attachments/.gitkeep
diff --git a/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx b/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx
new file mode 100644
index 0000000..c664667
Binary files /dev/null and b/starters/adoc/modules/parent-pom/attachments/parent-pom.pptx differ
diff --git a/starters/adoc/modules/parent-pom/images/parent-pom.png b/starters/adoc/modules/parent-pom/images/parent-pom.png
new file mode 100644
index 0000000..da8feee
Binary files /dev/null and b/starters/adoc/modules/parent-pom/images/parent-pom.png differ
diff --git a/antora/components/core/modules/archdesign/attachments/.gitkeep b/starters/adoc/modules/simpleapp/attachments/.gitkeep
similarity index 100%
rename from antora/components/core/modules/archdesign/attachments/.gitkeep
rename to starters/adoc/modules/simpleapp/attachments/.gitkeep
diff --git a/starters/adoc/modules/simpleapp/attachments/simpleapp-modules-dependencies.pptx b/starters/adoc/modules/simpleapp/attachments/simpleapp-modules-dependencies.pptx
new file mode 100644
index 0000000..52e1c3a
Binary files /dev/null and b/starters/adoc/modules/simpleapp/attachments/simpleapp-modules-dependencies.pptx differ
diff --git a/starters/adoc/modules/simpleapp/images/simpleapp-modules-dependencies.png b/starters/adoc/modules/simpleapp/images/simpleapp-modules-dependencies.png
new file mode 100644
index 0000000..8e5f410
Binary files /dev/null and b/starters/adoc/modules/simpleapp/images/simpleapp-modules-dependencies.png differ
diff --git a/starters/adoc/modules/simpleapp/pages/about.adoc b/starters/adoc/modules/simpleapp/pages/about.adoc
index 0ef14cf..89e4f84 100644
--- a/starters/adoc/modules/simpleapp/pages/about.adoc
+++ b/starters/adoc/modules/simpleapp/pages/about.adoc
@@ -272,6 +272,8 @@ The REST API implemented by Apache Isis is specified in the link:http://www.rest
 
 The simpleapp starter app is a multi-module project, structured so that you easily extend it as your application grows.
 
+=== Application Modules
+
 The application consists of three modules, with a top-level module acting as an aggregator, the `module-simple` module that contains the business logic, and `webapp` module that acts as a bootstrapper.
 
 [plantuml]
@@ -307,6 +309,26 @@ For example, you might have a `module-customer` holding a `Customer` entity and
 We can use Maven dependency management to ensure that there are no cyclic dependencies (order "knows about" product but product does not know about orders) and ensure that the codebase remains decoupled.
 When Java9 modules are commonplace, we'll also be able to restrict visibility of classes between modules.
 
+=== Bootstrapping & Framework Modules
+
+One of the main responsibilities of Spring Boot is - naturally enough - to bootstrap the application.
+For the webapp, this is done using a class annotated with link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html[@SpringBootApplication].
+For integration tests, this uses the link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html[@SpringBootTest] annotation.
+
+These two different annotations reference a (class annotated with) link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html[@Configuration], which in turn can link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Import.html[@Import] other annotations.
+
+By convention, the top-level `@Configuration` in an Apache Isis application is called the "app manifest".
+This references not only the application-level modules (described xref:about.adoc#application-modules[above]), but also the framework's modules.
+There will be several of these app manifests, typically one for the webapp itself, and one for integration testing each module.
+
+The link:{attachmentsdir}/simpleapp-modules-dependencies.pptx[diagram] below shows how classes fit together:
+
+.Module Dependencies
+image::simpleapp-modules-dependencies.png/[width="600px",link="{imagesdir}/simpleapp-modules-dependencies.png/"]
+
+
+
+
 Let's now review the contents of each of the modules in the simpleapp starter app.
 
 


[isis] 12/19: ISIS-2062: docs

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

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

commit c40b4f4f5efe28e8efd70e5f80fd951cb2c98864
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 19:19:25 2020 +0000

    ISIS-2062: docs
---
 mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc | 2 +-
 starters/adoc/modules/ROOT/pages/about.adoc               | 3 +--
 starters/adoc/modules/ROOT/partials/component-nav.adoc    | 6 ++++++
 starters/adoc/modules/ROOT/partials/module-nav.adoc       | 2 +-
 starters/adoc/modules/helloworld/pages/about.adoc         | 2 +-
 starters/adoc/modules/helloworld/partials/module-nav.adoc | 2 +-
 starters/adoc/modules/parent-pom/partials/module-nav.adoc | 2 +-
 starters/adoc/modules/simpleapp/pages/about.adoc          | 2 +-
 starters/adoc/modules/simpleapp/partials/module-nav.adoc  | 2 +-
 9 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc b/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
index f99271c..ee4e021 100644
--- a/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
+++ b/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
@@ -1 +1 @@
-* xref:starters:mavendeps:about.adoc[Maven Dependencies]
+** xref:starters:mavendeps:about.adoc[Maven Dependencies]
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index f7a6938..585d9c3 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -1,6 +1,5 @@
-//= Starter Apps
+= Quick Start
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-:page-role: -title
 
 To get started with a new application, download one of the two starter apps.
 
diff --git a/starters/adoc/modules/ROOT/partials/component-nav.adoc b/starters/adoc/modules/ROOT/partials/component-nav.adoc
index 4a135f7..4221f56 100644
--- a/starters/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/starters/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,6 +1,12 @@
 include::starters:ROOT:partial$module-nav.adoc[]
+
+* Starter Apps
+
 include::starters:helloworld:partial$module-nav.adoc[]
 include::starters:simpleapp:partial$module-nav.adoc[]
+
+* Resources
+
 include::starters:parent-pom:partial$module-nav.adoc[]
 include::starters:mavendeps:partial$module-nav.adoc[]
 
diff --git a/starters/adoc/modules/ROOT/partials/module-nav.adoc b/starters/adoc/modules/ROOT/partials/module-nav.adoc
index 9954c26..752c1a0 100644
--- a/starters/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/starters/adoc/modules/ROOT/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:about.adoc[Getting Started]
+* xref:about.adoc[Quick Start]
 
 
 
diff --git a/starters/adoc/modules/helloworld/pages/about.adoc b/starters/adoc/modules/helloworld/pages/about.adoc
index 4ac44fd..59d80b9 100644
--- a/starters/adoc/modules/helloworld/pages/about.adoc
+++ b/starters/adoc/modules/helloworld/pages/about.adoc
@@ -1,4 +1,4 @@
-= HelloWorld Starter App
+= HelloWorld
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 
diff --git a/starters/adoc/modules/helloworld/partials/module-nav.adoc b/starters/adoc/modules/helloworld/partials/module-nav.adoc
index f4129f8..ea89cb5 100644
--- a/starters/adoc/modules/helloworld/partials/module-nav.adoc
+++ b/starters/adoc/modules/helloworld/partials/module-nav.adoc
@@ -1,2 +1,2 @@
-* xref:starters:helloworld:about.adoc[Hello World]
+** xref:starters:helloworld:about.adoc[HelloWorld]
 
diff --git a/starters/adoc/modules/parent-pom/partials/module-nav.adoc b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
index 8e1a9e3..c28175b 100644
--- a/starters/adoc/modules/parent-pom/partials/module-nav.adoc
+++ b/starters/adoc/modules/parent-pom/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:about.adoc[Parent POM]
+** xref:about.adoc[Parent POM]
 
 
 
diff --git a/starters/adoc/modules/simpleapp/pages/about.adoc b/starters/adoc/modules/simpleapp/pages/about.adoc
index 249248a..0ef14cf 100644
--- a/starters/adoc/modules/simpleapp/pages/about.adoc
+++ b/starters/adoc/modules/simpleapp/pages/about.adoc
@@ -1,4 +1,4 @@
-= Simple App Starter App
+= SimpleApp
 :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 quickest way to get started building an application "for real" is to use the `simpleapp` starter app.
diff --git a/starters/adoc/modules/simpleapp/partials/module-nav.adoc b/starters/adoc/modules/simpleapp/partials/module-nav.adoc
index ed5e981..6f32cb1 100644
--- a/starters/adoc/modules/simpleapp/partials/module-nav.adoc
+++ b/starters/adoc/modules/simpleapp/partials/module-nav.adoc
@@ -1,2 +1,2 @@
-* xref:starters:simpleapp:about.adoc[SimpleApp]
+** xref:starters:simpleapp:about.adoc[SimpleApp]
 


[isis] 18/19: ISIS-2062: docs

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

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

commit 5b509d13e68e6b0a71e904ed266a626399792348
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 13:25:59 2020 +0000

    ISIS-2062: docs
---
 .../modules/comguide/pages/cutting-a-release.adoc  | 431 +--------------
 .../modules/mignotes/pages/migrating-to-2.0.0.adoc |   2 +-
 .../toc/modules/relnotes/pages/rn-1.12.0.adoc      |   2 +-
 .../modules/fun/pages/crud/instantiating.adoc      |   4 +-
 .../modules/fun/pages/crud/persisting.adoc         |   2 +-
 .../fun/pages/ui-hints/eager-rendering.adoc        |   4 +-
 .../pages/ui-hints/object-titles-and-icons.adoc    |  12 +-
 .../applib-ant/pages/Action/domainEvent.adoc       |   4 +-
 .../applib-ant/pages/Collection/domainEvent.adoc   |   2 +-
 .../pages/DomainObject/createdLifecycleEvent.adoc  |   8 +-
 .../pages/DomainObject/loadedLifecycleEvent.adoc   |   4 +-
 .../DomainObject/persistedLifecycleEvent.adoc      |   4 +-
 .../DomainObject/persistingLifecycleEvent.adoc     |   4 +-
 .../pages/DomainObject/removingLifecycleEvent.adoc |   4 +-
 .../pages/DomainObject/updatedLifecycleEvent.adoc  |   4 +-
 .../pages/DomainObject/updatingLifecycleEvent.adoc |   4 +-
 .../pages/DomainObjectLayout/cssClassUiEvent.adoc  |   4 +-
 .../pages/DomainObjectLayout/iconUiEvent.adoc      |   4 +-
 .../pages/DomainObjectLayout/layoutUiEvent.adoc    |   4 +-
 .../pages/DomainObjectLayout/titleUiEvent.adoc     |   4 +-
 .../applib-ant/pages/Property/domainEvent.adoc     |   2 +-
 .../pages/classes/AppManifest2-bootstrapping.adoc  |   1 +
 .../pages/classes/super/FixtureScript.adoc         |   1 +
 .../applib-cm/pages/methods/prefixes/disable.adoc  |   6 +-
 .../applib-cm/pages/methods/prefixes/hide.adoc     |   4 +-
 .../applib-cm/pages/methods/reserved/disable.adoc  |   4 +-
 .../pages/core-domain-api/EventBusService.adoc     |  26 +-
 .../persistence-layer-api/IsisJdoSupport.adoc      |   4 +-
 .../config/presets/IntrospectLazily.properties     |  18 +
 .../isis/core/config/presets/IsisPresets.java      |   1 +
 ...ectServiceMethodMustBeFinalContractTestAll.java |  28 -
 .../unittestsupport/inject/SomeDomainObject.java   |  28 -
 .../core/unittestsupport/inject/SomeService.java   |  23 -
 .../adoc/modules/unittestsupport/pages/about.adoc  | 347 +++++++++++-
 .../unittestsupport/pages/contract-tests.adoc      | 169 ------
 .../unittestsupport/pages/jmock-extensions.adoc    |  57 --
 .../unittestsupport/pages/maven-configuration.adoc |  55 --
 .../pages/soap-fake-server-junit-rule.adoc         | 111 ----
 ...rviceMethodMustBeFinalContractTestAbstract.java |  78 ---
 .../flyway/adoc/modules/flyway/pages/about.adoc    |   4 +-
 mavendeps/testing/pom.xml                          |   5 +
 starters/adoc/modules/helloworld/pages/about.adoc  |   2 +-
 .../partials/surefire-configuration-caution.adoc   |  13 +
 starters/adoc/modules/simpleapp/pages/about.adoc   |   4 +-
 .../fixturescripts/ExcelDemoToDoItem_tearDown.java |   3 +-
 .../FakeDataDemoObjectWithAll_tearDown.java        |   4 +-
 .../IsisIntegrationTestAbstractWithFixtures.java   |   4 +-
 .../applib/IsisModuleTestingFixturesApplib.java    |   2 +-
 .../applib/{legacy => clock}/FixtureClock.java     |   2 +-
 .../{legacy => clock}/TickingFixtureClock.java     |   2 +-
 .../clock => clock/fixture}/ClockFixture.java      |   4 +-
 .../fixture}/TickingClockFixture.java              |   6 +-
 .../fixtures/applib/legacy/package-info.java       |  45 --
 .../legacy/teardown/TeardownFixtureAbstract2.java  |  23 -
 .../applib/modules/ModuleWithFixtures.java         |  12 +-
 .../QueryResultsCacheControlDefault.java           |   2 +-
 .../applib/services/FixturesLifecycleService.java  |   2 +-
 .../{legacy => }/setup/PersonaEnumPersistAll.java  |   2 +-
 .../teardown/TeardownFixtureAbstract.java          |   7 +-
 .../legacy/FixtureClockInstantiationTest.java      |   1 +
 .../adoc/modules/integtestsupport/pages/about.adoc | 598 ++++++++++++++++++++-
 .../integtestsupport/pages/abstract-class.adoc     |  81 ---
 .../integtestsupport/pages/bootstrapping.adoc      |  46 --
 .../pages/configuration-properties.adoc            |  90 ----
 .../pages/maven-configuration.adoc                 |  55 --
 .../integtestsupport/pages/typical-usage.adoc      | 124 -----
 .../integtestsupport/pages/wrapper-factory.adoc    | 172 ------
 .../adoc/modules/specsupport/pages/about.adoc      | 237 +++++++-
 .../modules/specsupport/pages/how-it-works.adoc    |  18 -
 .../specsupport/pages/maven-configuration.adoc     |  73 ---
 .../specsupport/pages/writing-a-bdd-spec.adoc      | 157 ------
 testing/specsupport/applib/pom.xml                 |   5 -
 .../ROOT/pages/customisation/auto-refresh.adoc     |   4 +-
 .../pages/extending/custom-bootstrap-theme.adoc    |   2 +-
 .../ROOT/pages/features/titles-in-tables.adoc      |   2 +-
 .../ROOT/pages/layout/annotation-based.adoc        |   6 +-
 76 files changed, 1304 insertions(+), 1989 deletions(-)

diff --git a/antora/components/toc/modules/comguide/pages/cutting-a-release.adoc b/antora/components/toc/modules/comguide/pages/cutting-a-release.adoc
index ade3f81..97377ed 100644
--- a/antora/components/toc/modules/comguide/pages/cutting-a-release.adoc
+++ b/antora/components/toc/modules/comguide/pages/cutting-a-release.adoc
@@ -1,4 +1,3 @@
-[[cutting-a-release]]
 = Cutting a Release
 :notice: licensed to the apache software foundation (asf) under one or more contributor license agreements. see the notice file distributed with this work for additional information regarding copyright ownership. the asf licenses this file to you under the apache license, version 2.0 (the "license"); you may not use this file except in compliance with the license. you may obtain a copy of the license at. http://www.apache.org/licenses/license-2.0 . unless required by applicable law or ag [...]
 :page-partial:
@@ -239,6 +238,8 @@ Commit any changes from the preceding steps:
 
 [source,bash,subs="attributes+"]
 ----
+cd core
+mvn versions:set -DnewVersion=$ISISVER
 git commit -am "$ISISJIRA: updates to pom.xml etc for release"
 ----
 
@@ -257,10 +258,8 @@ mvn clean install -o
 
 === Deploy
 
-Previously the release procedures used `mvn release:prepare` and `mvn release:perform`.
-These are however not compatible with `$\{revision}` that we now use https://maven.apache.org/maven-ci-friendly.html[for CI/CD].
-
-We therefore just use `mvn deploy` directly, activating the (inherited) `apache-release` profile that, amongst other things, brings in the `gpg` plugin for code signing.
+Since the `<version>` has already been updated, we just use `mvn deploy` to upload the artifacts.
+We activate the (inherited) `apache-release` profile to bring in the `gpg` plugin for code signing.
 
 To build and deploy and tag, we use:
 
@@ -285,428 +284,6 @@ This requires `gpg` v2.1 or later.
 
 
 
-== Releasing `simpleapp` archetype
-
-The Apache Isis archetypes are reverse engineered from example applications.
-Once reverse engineered, the source is checked into git (replacing any earlier version of the archetype) and released.
-
-There are currently two archetypes, `simpleapp` and `helloworld`.
-In this section we release `simpleapp`, in the following xref:support:cutting-a-release.adoc#releasing-the-helloworld-archetype[section] we release `helloworld`.
-
-[NOTE]
-====
-If releasing using Windows, then there is an issue that requires a small workaround.
-
-In Maven 3.3.3 and later, the `mvn.bat` file was removed, replaced instead with `mvn.cmd`.
-However, `maven-archetype-plugin:2.4` only uses `mvn.bat`; this causes the `archetype:create-from-project` goal to fail.
-The fix is simple: just copy `mvn.cmd` to `mvn.bat`.
-====
-
-Switch to the directory containing the `simpleapp` example:
-
-[source,bash,subs="attributes+"]
-----
-cd ../example/application/simpleapp
-----
-
-=== Setup environment variables
-
-Set additional environment variables for the `simpleapp-archetype` artifact:
-
-[source,bash,subs="attributes+"]
-----
-export ISISART=simpleapp-archetype
-export ISISPAR=$ISISREL                 # <1>
-
-export ISISCPT=$(echo $ISISART | cut -d- -f2)
-export ISISCPN=$(echo $ISISART | cut -d- -f1)
-
-env | grep ISIS | sort
-----
-<1> `$ISISPAR` is the version of the Apache Isis core that will act as the archetype's parent.
-Usually this is the same as `$ISISREL`.
-
-
-=== Check the example app
-
-Double check that the app:
-
-* builds:
-+
-[source,bash,subs="attributes+"]
-----
-mvn clean install
-----
-
-* can be run from an IDE
-** mainClass=`org.apache.isis.WebServer`
-** args=`-m domainapp.application.manifest.DomainAppAppManifestWithFixtures`
-** run before: `mvn -pl module-simple datanucleus:enhance -o` in the root module
-
-* can be run using the mvn jetty plugin:
-+
-[source,bash,subs="attributes+"]
-----
-mvn -pl webapp jetty:run
-----
-
-* can be packaged and run using the mvn jetty-console plugin:
-+
-[source,bash,subs="attributes+"]
-----
-mvn install -Dmavenmixin-jettyconsole
-mvn antrun:run -Dmavenmixin-jettyconsole
-----
-
-* can be deployed as a WAR
-+
-[source,bash,subs="attributes+"]
-----
-cp webapp/target/simpleapp.war $CATALINA_HOME/webapps/ROOT.war
-pushd $CATALINA_HOME/bin
-sh startup.sh
-tail -f ../logs/catalina.out
-----
-+
-quit using:
-+
-[source,bash]
-----
-sh shutdown.sh
-popd
-----
-
-* can be packaged and run using Docker:
-+
-[source,bash,subs="attributes+"]
-----
-mvn install -Dmavenmixin-docker -D docker-plugin.imageName=test/simpleapp
-docker container run -p 8080:8080 --name simpleapp -d test/simpleapp
-----
-+
-[NOTE]
-====
-On Windows, make sure that Docker is first switched to using linux containers, not Windows containers (because the `Dockerfile` in the application references a linux base image).
-
-You may also need to enable the Docker daemon first, otherwise the "mvn install" command above will fail:
-
-image::docker/docker-daemon.png[width="600px",link="{imagesdir}/docker/docker-daemon.png"]
-
-You might also need to ensure that the "Unidentified networks" are configured to be private:
-
-image::docker/026-docker-nat-private.png[width="600px",link="{imagesdir}/docker/026-docker-nat-private.png"]
-
-This can be done using the "Local Security Policy" application.
-====
-
-Optionally, you can connect to the running container:
-
-* on Mac/Linux:
-+
-[source,bash]
-----
-docker exec -it simpleapp sh
-----
-
-* on Windows
-+
-[source,bash]
-----
-winpty docker exec -it simpleapp sh
-----
-
-You can then tail the log of the Tomcat instance:
-
-[source,bash]
-----
-cd /opt/*tomcat*/logs
-tail -f catalina.*.log
-----
-
-This too should be accessed at link:http://localhost:8080[localhost:8080].
-
-
-[TIP]
-====
-The Kitematic UI tool is handy for viewing and interacting with running containers.
-====
-
-
-To tidy up, kill and remove the container:
-
-[source,bash,subs="attributes+"]
-----
-docker container kill simpleapp
-docker container rm simpleapp
-----
-
-=== Recreate the archetype
-
-Make sure you are in the correct directory and environment variables are correct.
-
-To recreate the *simpleapp* archetype, first ensure in the correct directory:
-
-[source,bash]
-----
-cd example/application/simpleapp
-env | grep ISIS | sort
-----
-
-Then, run the script (which also builds the archetype once generated) and switch to the archetype's directory:
-
-[source,bash,subs="attributes+"]
-----
-sh ../../../scripts/recreate-archetype.sh $ISISJIRA
-cd `pwd|sed 's/application/archetype/'`
-----
-
-The script automatically commits changes; if you wish use `git log` and
-`git diff` (or a tool such as SourceTree) to review changes made.
-
-
-=== Sanity check
-
-_In a different session_, create a new app from the archetype.
-First set up environment variables:
-
-[source,bash,subs="attributes+"]
-----
-export ISISTMP=/c/tmp    # or as required
-export ISISCPN=simpleapp
-env | grep ISIS | sort
-----
-
-Then generate a new app from the archetype:
-
-[source,bash,subs="attributes+"]
-----
-rm -rf $ISISTMP/test-$ISISCPN
-
-mkdir $ISISTMP/test-$ISISCPN
-cd $ISISTMP/test-$ISISCPN
-mvn archetype:generate  \
-    -D archetypeCatalog=local \
-    -D groupId=com.mycompany \
-    -D artifactId=myapp \
-    -D archetypeGroupId=org.apache.isis.archetype \
-    -D archetypeArtifactId=$ISISCPN-archetype \
-    -B
-----
-
-Build the newly generated app and test:
-
-[source,bash]
-----
-cd myapp
-mvn clean install -o
-mvn -pl webapp jetty:run              # runs as mvn jetty plugin
-----
-
-Also check that the generated app can be built as a Docker image:
-
-[source,bash]
-----
-mvn install -Dmavenmixin-docker -D docker-plugin.imageName=test/myapp
-docker container run -p 8080:8080 --name myapp -d test/myapp
-sleep 10 && curl http://localhost:8080
-docker container kill myapp
-docker container rm myapp
-----
-
-=== Deploy
-
-Back in the original session, we upload (deploy) the archetype to the staging repository.
-
-[NOTE]
-====
-Previously we used `mvn release:prepare` and `mvn release:perform` to do this.
-However not compatible with `$\{revision}` that we now use https://maven.apache.org/maven-ci-friendly.html[for CI/CD].
-We therefore now just use `mvn deploy` directly, activating the (inherited) `apache-release` profile that, amongst other things, brings in the `gpg` plugin for code signing.
-====
-
-To build and deploy and tag, we use:
-
-[source,bash,subs="attributes+"]
-----
-mvn -P apache-release \
-    clean deploy      \
-    -Dgpg.passphrase="this is not really my passphrase"
-
-git tag $ISISART-$ISISREL
-git tag $ISISART-$ISISREL-$ISISRC
-----
-
-using your own GPG passphrase, of course.
-
-
-[IMPORTANT]
-====
-This requires `gpg` v2.1 or later.
-====
-
-
-
-
-== Releasing `helloworld` archetype
-
-We now repeat the archetype release procedure, this time for the `helloworld` example app.
-
-Start by switching to the directory containing the `helloworld` example:
-
-[source,bash,subs="attributes+"]
-----
-cd ../../../example/application/helloworld
-----
-
-=== Setup environment variables
-
-Update additional environment variables for the `helloworld-archetype` artifact:
-
-[source,bash,subs="attributes+"]
-----
-export ISISART=helloworld-archetype
-export ISISPAR=$ISISREL
-
-export ISISCPT=$(echo $ISISART | cut -d- -f2)
-export ISISCPN=$(echo $ISISART | cut -d- -f1)
-
-env | grep ISIS | sort
-----
-
-
-=== Check the example app
-
-Check that the app:
-
-* builds:
-+
-[source,bash]
-----
-mvn clean install
-----
-
-* can be run from an IDE
-** mainClass=`org.apache.isis.WebServer`
-** args=`-m domainapp.application.HelloWorldAppManifest`
-** run before: `mvn datanucleus:enhance -o` in the root module
-
-* can be run using the mvn jetty plugin:
-+
-[source,bash]
-----
-mvn jetty:run
-----
-
-* can be deployed as a WAR
-+
-[source,bash,subs="attributes+"]
-----
-cp target/helloworld.war $CATALINA_HOME/webapps/ROOT.war
-pushd $CATALINA_HOME/bin
-sh startup.sh
-tail -f ../logs/catalina.out
-----
-+
-quit using:
-+
-[source,bash,subs="attributes+"]
-----
-sh shutdown.sh
-popd
-----
-
-This too should be accessed at link:http://localhost:8080[localhost:8080].
-
-In each case, check the about page and confirm has been built against non-SNAPSHOT versions of the Apache Isis jars.
-
-
-=== Recreate the archetype
-
-Make sure you are in the correct directory and environment variables are correct.
-
-To recreate the *helloworld* archetype:
-
-[source,bash,subs="attributes+"]
-----
-cd example/application/helloworld
-env | grep ISIS | sort
-----
-
-Then, run the script (which also builds the archetype once generated) and then switch to the archetype's directory:
-
-[source,bash,subs="attributes+"]
-----
-sh ../../../scripts/recreate-archetype.sh $ISISJIRA
-cd `pwd|sed 's/application/archetype/'`
-----
-
-The script automatically commits its changes.
-If you wish use `git log` and `git diff` (or a tool such as SourceTree) to review changes made.
-
-
-
-=== Sanity check
-
-_In a different session_, create a new app from the archetype.
-First set up environment variables:
-
-[source,bash,subs="attributes+"]
-----
-export ISISTMP=/c/tmp    # or as required
-export ISISCPN=helloworld
-env | grep ISIS | sort
-----
-
-Then generate a new app from the archetype:
-
-[source,bash,subs="attributes+"]
-----
-rm -rf $ISISTMP/test-$ISISCPN
-
-mkdir $ISISTMP/test-$ISISCPN
-cd $ISISTMP/test-$ISISCPN
-mvn archetype:generate  \
-    -D archetypeCatalog=local \
-    -D groupId=com.mycompany \
-    -D artifactId=myapp \
-    -D archetypeGroupId=org.apache.isis.archetype \
-    -D archetypeArtifactId=$ISISCPN-archetype \
-    -B
-----
-
-Build the newly generated app and test:
-
-[source,bash,subs="attributes+"]
-----
-cd myapp
-mvn clean install -o
-mvn jetty:run
-----
-
-=== Deploy
-
-Back in the original session, we upload (deploy) the archetype to the staging repository.
-
-To build and deploy and tag, we use:
-
-[source,bash,subs="attributes+"]
-----
-mvn -P apache-release \
-    clean deploy      \
-    -Dgpg.passphrase="this is not really my passphrase"
-
-git tag $ISISART-$ISISREL
-git tag $ISISART-$ISISREL-$ISISRC
-----
-
-using your own GPG passphrase, of course.
-
-
-[IMPORTANT]
-====
-This requires `gpg` v2.1 or later.
-====
-
 
 
 == Check/Close Staging Repo
diff --git a/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc b/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
index ad449c0..a49a9e5 100644
--- a/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
+++ b/antora/components/toc/modules/mignotes/pages/migrating-to-2.0.0.adoc
@@ -1503,7 +1503,7 @@ public abstract class MyIntegTestAbstract extends IntegrationTestJupiter {
   public MyIntegTestAbstract() {
     super(new MyModule()
       .withAdditionalModules( /* ... */)
-      // ...
+      ...
       .withConfigurationProperties(databaseConfigForTest())
     );
   }
diff --git a/antora/components/toc/modules/relnotes/pages/rn-1.12.0.adoc b/antora/components/toc/modules/relnotes/pages/rn-1.12.0.adoc
index ac7c23c..f585efe 100644
--- a/antora/components/toc/modules/relnotes/pages/rn-1.12.0.adoc
+++ b/antora/components/toc/modules/relnotes/pages/rn-1.12.0.adoc
@@ -63,7 +63,7 @@ In all cases these mixins can be hidden using either security or by writing a li
 
 == Bug
 
-* link:https://issues.apache.org/jira/browse/ISIS-1348[ISIS-1348] - Bug with link:https://isis.apache.org/versions/1.12.0/guides/ugtst/ugtst.html#_ugtst_unittestsupport_soap-fake-server-junit-rule[SoapEndpointPublishingRule] when multiple endpoints.
+* link:https://issues.apache.org/jira/browse/ISIS-1348[ISIS-1348] - Bug with `SoapEndpointPublishingRule` when multiple endpoints.
 * link:https://issues.apache.org/jira/browse/ISIS-1347[ISIS-1347] - Missing annotation in SimpleObject
 * link:https://issues.apache.org/jira/browse/ISIS-1346[ISIS-1346] - ActionInvocationContext isn't populated properly
 * link:https://issues.apache.org/jira/browse/ISIS-1342[ISIS-1342] - The metamodel validation error page doesn't reliably render itself if there are errors.
diff --git a/antora/components/userguide/modules/fun/pages/crud/instantiating.adoc b/antora/components/userguide/modules/fun/pages/crud/instantiating.adoc
index 2af7471..0e161eb 100644
--- a/antora/components/userguide/modules/fun/pages/crud/instantiating.adoc
+++ b/antora/components/userguide/modules/fun/pages/crud/instantiating.adoc
@@ -32,10 +32,10 @@ For example:
 public class Customer {
 
     public Customer(String reference, String firstName, String lastName) {
-        // ...
+        ...
     }
 
-    // ...
+    ...
 }
 ----
 
diff --git a/antora/components/userguide/modules/fun/pages/crud/persisting.adoc b/antora/components/userguide/modules/fun/pages/crud/persisting.adoc
index cf63e8c..da0a55f 100644
--- a/antora/components/userguide/modules/fun/pages/crud/persisting.adoc
+++ b/antora/components/userguide/modules/fun/pages/crud/persisting.adoc
@@ -25,7 +25,7 @@ Customer customer = repositoryService.instantiate(Customer.class);
 customer.setReference(reference);
 customer.setFirstName(firstName);
 customer.setLastName(lastName);
-// ...
+...
 repositoryService.persist(customer);
 ----
 
diff --git a/antora/components/userguide/modules/fun/pages/ui-hints/eager-rendering.adoc b/antora/components/userguide/modules/fun/pages/ui-hints/eager-rendering.adoc
index d1d2cfb..bada177 100644
--- a/antora/components/userguide/modules/fun/pages/ui-hints/eager-rendering.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui-hints/eager-rendering.adoc
@@ -13,14 +13,14 @@ For this we annotate the collection using xref:refguide:applib-ant:CollectionLay
 [source,java]
 ----
 public class ToDoItem /*...*/ {
-    // ...
+    ...
 
     @javax.jdo.annotations.Persistent(table="ToDoItemDependencies")
     @Collection
     @CollectionLayout( defaultView = "table" )
     private Set<ToDoItem> dependencies = new TreeSet<>();
 
-    // ...
+    ...
 }
 ----
 
diff --git a/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc b/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
index 0e34465..927ad02 100644
--- a/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui-hints/object-titles-and-icons.adoc
@@ -41,7 +41,7 @@ public class Customer {
     @lombok.Getter
     private String lastName;
 
-    // ...
+    ...
 }
 ----
 
@@ -59,7 +59,7 @@ public class CustomerAlt {
     @lombok.Getter
     private String lastName;
 
-    // ...
+    ...
 }
 ----
 
@@ -77,7 +77,7 @@ public class Author extends Customer {
     @lombok.Getter
     private String middleInitial;
 
-    // ...
+    ...
 }
 ----
 
@@ -105,7 +105,7 @@ public class Author extends Customer {
         return buf.toString();
     }
 
-    // ...
+    ...
 }
 ----
 
@@ -181,7 +181,7 @@ For example:
 ----
 @DomainObjectLayout( cssClassFa="play" )    // <1>
 public class InvoiceRun {
-    // ...
+    ...
 }
 ----
 <1> will use the "fa-play" icon.
@@ -286,7 +286,7 @@ public class Order {
     public String cssClass() {
         return isShipped() ? "shipped": null;       <1>
     }
-    // ...
+    ...
 }
 ----
 <1> the implementation might well be the same as the `iconName()`.
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/Action/domainEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/Action/domainEvent.adoc
index adcff95..2088efd 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/Action/domainEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/Action/domainEvent.adoc
@@ -68,7 +68,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ActionDomainEvent.class)
     public void on(ActionDomainEvent ev) {
-        // ...
+        ...
     }
 }
 ----
@@ -83,7 +83,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.CompletedEvent.class)
     public void on(ToDoItem.CompletedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/Collection/domainEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/Collection/domainEvent.adoc
index 5b46ae6..9c9b1c4 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/Collection/domainEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/Collection/domainEvent.adoc
@@ -97,7 +97,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.DependenciesChangedEvent.class)
     public void on(ToDoItem.DependenciesChangedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/createdLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/createdLifecycleEvent.adoc
index 7f8c1f7..b7441de 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/createdLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/createdLifecycleEvent.adoc
@@ -24,7 +24,7 @@ For example:
 ----
 @DomainObject
 public class ToDoItemDto {
-    // ...
+    ...
 }
 ----
 
@@ -41,7 +41,7 @@ For example:
 public class ToDoItem {
     public static class CreatedEvent
         extends org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent<ToDoItem> { }
-    // ...
+    ...
 }
 ----
 
@@ -66,7 +66,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectCreatedEvent.class)
     public void on(ObjectCreatedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -82,7 +82,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectCreatedEvent.class)
     public void on(ToDoItem.ObjectCreatedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/loadedLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/loadedLifecycleEvent.adoc
index 3de27d1..31740a9 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/loadedLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/loadedLifecycleEvent.adoc
@@ -57,7 +57,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectLoadedEvent.class)
     public void on(ObjectLoadedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
          }
     }
 }
@@ -73,7 +73,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectLoadedEvent.class)
     public void on(ToDoItem.ObjectLoadedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistedLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistedLifecycleEvent.adoc
index 7bce836..fe8fe19 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistedLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistedLifecycleEvent.adoc
@@ -63,7 +63,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectPersistedEvent.class)
     public void on(ObjectPersistedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -79,7 +79,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectPersistedEvent.class)
     public void on(ToDoItem.ObjectPersistedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistingLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistingLifecycleEvent.adoc
index d722cfe..d16833c 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistingLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/persistingLifecycleEvent.adoc
@@ -65,7 +65,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectPersistingEvent.class)
     public void on(ObjectPersistingEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -81,7 +81,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectPersistingEvent.class)
     public void on(ToDoItem.ObjectPersistingEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/removingLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/removingLifecycleEvent.adoc
index bdc87f7..64d7104 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/removingLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/removingLifecycleEvent.adoc
@@ -65,7 +65,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectRemovingEvent.class)
     public void on(ObjectRemovingEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -81,7 +81,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectRemovingEvent.class)
     public void on(ToDoItem.ObjectRemovingEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatedLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatedLifecycleEvent.adoc
index c4c6dfa..9a2f70d 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatedLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatedLifecycleEvent.adoc
@@ -62,7 +62,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectUpdatedEvent.clas)
     public void on(ObjectUpdatedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -78,7 +78,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectUpdatedEvent.class)
     public void on(ToDoItem.ObjectUpdatedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatingLifecycleEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatingLifecycleEvent.adoc
index 256c3e7..a259653 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatingLifecycleEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObject/updatingLifecycleEvent.adoc
@@ -66,7 +66,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ObjectUpdatingEvent.class)
     public void on(ObjectUpdatingEvent ev) {
         if(ev.getSource() instanceof ToDoItem) {
-            // ...
+            ...
         }
     }
 }
@@ -82,7 +82,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.ObjectUpdatingEvent.class)
     public void on(ToDoItem.ObjectUpdatingEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/cssClassUiEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
index a5be423..82ccdc9 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/cssClassUiEvent.adoc
@@ -68,7 +68,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(CssClassUiEvent.class)
     public void on(CssClassUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) {
-            // ...
+            ...
         }
     }
 }
@@ -84,7 +84,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItemDto.CssClassUiEvent.class)
     public void on(ToDoItemDto.CssClassUiEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/iconUiEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/iconUiEvent.adoc
index f60c3a0..f384f41 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/iconUiEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/iconUiEvent.adoc
@@ -67,7 +67,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(IconUiEvent.class)
     public void on(IconUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) {
-            // ...
+            ...
         }
     }
 }
@@ -83,7 +83,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItemDto.IconUiEvent.class)
     public void on(ToDoItemDto.IconUiEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/layoutUiEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/layoutUiEvent.adoc
index 259e49e..1eb5267 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/layoutUiEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/layoutUiEvent.adoc
@@ -60,7 +60,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(LayoutUiEvent.class)
     public void on(LayoutUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) {
-            // ...
+            ...
         }
     }
 }
@@ -76,7 +76,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListner(ToDoItemDto.LayoutUiEvent.class)
     public void on(ToDoItemDto.LayoutUiEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/titleUiEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/titleUiEvent.adoc
index 27d552c..8c5ccfe 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/titleUiEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/DomainObjectLayout/titleUiEvent.adoc
@@ -67,7 +67,7 @@ public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(TitleUiEvent.class)
     public void on(TitleUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) {
-            // ...
+            ...
         }
     }
 }
@@ -83,7 +83,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItemDto.TitleUiEvent.class)
     public void on(ToDoItemDto.TitleUiEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-ant/pages/Property/domainEvent.adoc b/api/applib/src/main/adoc/modules/applib-ant/pages/Property/domainEvent.adoc
index 23eb702..ca32e17 100644
--- a/api/applib/src/main/adoc/modules/applib-ant/pages/Property/domainEvent.adoc
+++ b/api/applib/src/main/adoc/modules/applib-ant/pages/Property/domainEvent.adoc
@@ -80,7 +80,7 @@ import org.springframework.context.event.EventListener;
 public class SomeSubscriber extends AbstractSubscriber {
     @EventListener(ToDoItem.DueByChangedEvent.class)
     public void on(ToDoItem.DueByChangedEvent ev) {
-        // ...
+        ...
     }
 }
 ----
diff --git a/api/applib/src/main/adoc/modules/applib-cm/pages/classes/AppManifest2-bootstrapping.adoc b/api/applib/src/main/adoc/modules/applib-cm/pages/classes/AppManifest2-bootstrapping.adoc
index 1a89240..ecb38b8 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/pages/classes/AppManifest2-bootstrapping.adoc
+++ b/api/applib/src/main/adoc/modules/applib-cm/pages/classes/AppManifest2-bootstrapping.adoc
@@ -2,6 +2,7 @@
 = `AppManifest2` (and `Module`)
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+WARNING: TODO: v2: this is all out of date - we use `@Configuration` and `@SpringBootApplication` or `@SpringBootTest`
 
 The bootstrapping of an Apache Isis application has been modularized using the `Module` interface, with `AppManifest2` (an extension of the original xref:refguide:applib-cm:classes/AppManifest-bootstrapping.adoc[`AppManifest`] interface) defined in terms of ``Module``s also.
 
diff --git a/api/applib/src/main/adoc/modules/applib-cm/pages/classes/super/FixtureScript.adoc b/api/applib/src/main/adoc/modules/applib-cm/pages/classes/super/FixtureScript.adoc
index 2da179f..7cddcaa 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/pages/classes/super/FixtureScript.adoc
+++ b/api/applib/src/main/adoc/modules/applib-cm/pages/classes/super/FixtureScript.adoc
@@ -3,6 +3,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 [...]
 :page-partial:
 
+WARNING: TODO: v2: this is out of date, and in any case needs to move to xref:testing:fixtures:about.adoc[fixture scripts] library.
 
 The `FixtureScript` class is an abstract class defining an API to set up data within the object store, either for integration tests or while demoing/prototyping.
 
diff --git a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/disable.adoc b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/disable.adoc
index 46287ed..66ce1a5 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/disable.adoc
+++ b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/disable.adoc
@@ -51,7 +51,7 @@ public class Customer {
                     ? "Cannot change credit limit for blacklisted customers"
                     : null;
     }
-    // ...
+    ...
 }
 ----
 
@@ -67,14 +67,14 @@ public class Customer {
             final Product product,
             @ParameterLayout(named="Quantity")
             final int quantity) {
-        // ...
+        ...
     }
     public String disablePlaceOrder() {
         return isBlacklisted()
                     ? "Blacklisted customers cannot place orders"
                     : null;
     }
-    // ...
+    ...
 }
 ----
 
diff --git a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/hide.adoc b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/hide.adoc
index 8ac316e..dad69c4 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/hide.adoc
+++ b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/prefixes/hide.adoc
@@ -47,12 +47,12 @@ public class Customer {
     public Order placeOrder(
             final Product product,
             final int quantity) {
-        // ...
+        ...
     }
     public boolean hidePlaceOrder() {
         return isBlacklisted();
     }
-    // ...
+    ...
 }
 ----
 
diff --git a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/reserved/disable.adoc b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/reserved/disable.adoc
index 2d54e8a..a7861a3 100644
--- a/api/applib/src/main/adoc/modules/applib-cm/pages/methods/reserved/disable.adoc
+++ b/api/applib/src/main/adoc/modules/applib-cm/pages/methods/reserved/disable.adoc
@@ -71,10 +71,10 @@ public class ToDoItem  {
     public static class DescriptionDomainEvent extends PropertyDomainEvent<String> { }
     @Property( domainEvent = DescriptionDomainEvent.class )
     public String getDescription() {
-        // ...
+        ...
      }
 
-    // ...
+    ...
 }
 ----
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/EventBusService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/EventBusService.adoc
index ade147a..24fa7ab 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/EventBusService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/core-domain-api/EventBusService.adoc
@@ -75,7 +75,7 @@ public class MySubscribingDomainService {
         eventBusService.unregister(this);       // <4>
     }
 
-    // ...
+    ...
 
     @javax.inject.Inject
     EventBusService eventBusService;
@@ -106,9 +106,9 @@ For example:
 public class Customer {
     @Action()
     public Customer placeOrder( Product product, int quantity) {
-        // ...
+        ...
     }
-    // ...
+    ...
 }
 ----
 
@@ -122,9 +122,9 @@ import org.springframework.context.event.EventListener;
 public class MySubscribingDomainService extends AbstractSubscriber {
     @EventListener(ActionDomainEvent.class)
     public void on(ActionDomainEvent ev) {
-        // ...
+        ...
     }
-    // ...
+    ...
 }
 ----
 
@@ -140,9 +140,9 @@ In the `LibraryMember` class, we publish the event by way of an annotation:
 public class LibraryMember {
     @Action(domainEvent=LibraryMemberLeaveEvent.class)  // <1>
     public void leave() {
-        // ...
+        ...
     }
-    // ...
+    ...
 }
 ----
 <1> `LibraryMemberLeaveEvent` is a subclass of `o.a.i.applib.eventbus.ActionDomainEvent`.  The topic of subclassing is discussed in more detail xref:refguide:applib-svc:core-domain-api/EventBusService.adoc#event-hierarchy[below].
@@ -225,7 +225,7 @@ public class LibraryMember {
     public void leave() {
         //...
     }
-    // ...
+    ...
 }
 ----
 
@@ -241,7 +241,7 @@ A slight variation on this is to not fix the generic parameter at the class leve
 public static class LibraryMember {
     public abstract static class ActionDomainEvent<S>
             extends LibMemModule.ActionDomainEvent<S> { }
-    // ...
+    ...
 }
 ----
 
@@ -255,10 +255,10 @@ public class LibraryMember {
 
     @Action(domainEvent=LeaveEvent.class)
     public void leave() {
-        // ...
+        ...
     }
 
-    // ...
+    ...
 }
 ----
 
@@ -278,10 +278,10 @@ The `LibraryMember` example described above could for example be rewritten into:
 public class LibraryMember {
     @Action()
     public void leave() {
-        // ...
+        ...
         eventBusService.post(new LibraryMember.LeaveEvent(/*...*/));    // <1>
     }
-    // ...
+    ...
 }
 ----
 <1> `LibraryMember.LeaveEvent` could be _any_ class, not just a subclass of `o.a.i.applib.event.ActionDomainEvent`.
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/persistence-layer-api/IsisJdoSupport.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/persistence-layer-api/IsisJdoSupport.adoc
index f30f699..54bd36a 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/persistence-layer-api/IsisJdoSupport.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/persistence-layer-api/IsisJdoSupport.adoc
@@ -252,7 +252,7 @@ If you require more flexibility than this, eg for dynamically constructed querie
 public interface IsisJdoSupport {
     @Programmatic
     PersistenceManager getJdoPersistenceManager();
-    // ...
+    ...
 }
 ----
 
@@ -265,7 +265,7 @@ public class Orders {
     public List<Order> findOrders( /* ... */ ) {
         javax.jdo.PersistenceManager pm = isisJdoSupport.getPersistenceManager();
 
-        // ...
+        ...
 
         return someListOfOrders;
     }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/IntrospectLazily.properties b/core/config/src/main/java/org/apache/isis/core/config/presets/IntrospectLazily.properties
new file mode 100644
index 0000000..956229c
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/IntrospectLazily.properties
@@ -0,0 +1,18 @@
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#  
+#         http://www.apache.org/licenses/LICENSE-2.0
+#         
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+isis.core.meta-model.introspector.mode=lazy
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/IsisPresets.java b/core/config/src/main/java/org/apache/isis/core/config/presets/IsisPresets.java
index 6240e72..ae35cda 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/presets/IsisPresets.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/IsisPresets.java
@@ -27,6 +27,7 @@ package org.apache.isis.core.config.presets;
 public final class IsisPresets  {
 
     public static final String NoTranslations = "classpath:/org/apache/isis/core/config/presets/NoTranslations.properties";
+    public static final String IntrospectLazily = "classpath:/org/apache/isis/core/config/presets/IntrospectLazily.properties";
 
     public static final String H2InMemory = "classpath:/org/apache/isis/core/config/presets/H2InMemory.properties";
 
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAll.java b/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAll.java
deleted file mode 100644
index 8fcb405..0000000
--- a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAll.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.unittestsupport.inject;
-
-public class InjectServiceMethodMustBeFinalContractTestAll extends InjectServiceMethodMustBeFinalContractTestAbstract {
-
-    public InjectServiceMethodMustBeFinalContractTestAll() {
-        super("org.apache.isis.core.unittestsupport.inject");
-        withLoggingTo(System.out);
-    }
-
-}
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeDomainObject.java b/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeDomainObject.java
deleted file mode 100644
index 0e5c1e7..0000000
--- a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeDomainObject.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.unittestsupport.inject;
-
-import javax.jdo.annotations.PersistenceCapable;
-
-@PersistenceCapable
-public class SomeDomainObject {
-
-    public final void injectFoo(SomeService someService) {}
-
-}
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeService.java b/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeService.java
deleted file mode 100644
index f42fdf9..0000000
--- a/core/detached-tests/src/test/java/org/apache/isis/core/unittestsupport/inject/SomeService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.unittestsupport.inject;
-
-public interface SomeService {
-
-}
diff --git a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/about.adoc b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/about.adoc
index 9cb552f..c9bda55 100644
--- a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/about.adoc
+++ b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/about.adoc
@@ -3,7 +3,346 @@
 
 Apache Isis provides a number of unit test helpers for you to use (if you wish) to unit test your domain objects.
 
-include::contract-tests.adoc[leveloffset=+1]
-include::jmock-extensions.adoc[leveloffset=+1]
-include::soap-fake-server-junit-rule.adoc[leveloffset=+1]
-include::maven-configuration.adoc[leveloffset=+1]
+== Contract Tests
+
+
+
+Contract tests ensure that all instances of a particular idiom/pattern that occur within your codebase are implemented correctly.
+You could think of them as being a way to enforce a certain type of coding standard.
+Implementation-wise they use link:https://code.google.com/p/reflections/[Reflections] library to scan for classes.
+
+
+
+=== ``SortedSet``s
+
+This contract test automatically checks that all fields of type `java.util.Collection` are declared as `java.util.SortedSet`.
+In other words, it precludes either `java.util.List` or `java.util.Set` from being used as a collection.
+
+For example, the following passes the contract test:
+
+[source,java]
+----
+public class Department {
+    private SortedSet<Employee> employees = new TreeSet<Employee>();
+    ...
+}
+----
+
+whereas this would not:
+
+[source,java]
+----
+public class SomeDomainObject {
+    private List<Employee> employees = new ArrayList<Employee>();
+    ...
+}
+----
+
+If using DataNucleus against an RDBMS (as you probably are) then we strongly recommend that you implement this test, for several reasons:
+
+* first, ``Set``s align more closely to the relational model than do ``List``s. A ``List`` must have an additional index to specify order.
+
+* second, `SortedSet` is preferable to `Set` because then the order is well-defined and predictable (to an end user, to the programmer).
++
+The xref:refguide:applib-cm:classes/utility.adoc#ObjectContracts[`ObjectContracts`]  utility class substantially simplifies the task of implementing `Comparable` in your domain classes.
+
+* third, if the relationship is bidirectional then JDO/Objectstore will automatically maintain the relationship.
+
+To use the contract test, subclass `SortedSetsContractTestAbstract`, specifying the root package to search for domain classes.
+
+For example:
+
+[source,java]
+----
+public class SortedSetsContractTestAll extends SortedSetsContractTestAbstract {
+
+    public SortedSetsContractTestAll() {
+        super("domainapp.modules");
+        withLoggingTo(System.out);
+    }
+}
+----
+
+
+
+=== Bidirectional
+
+This contract test automatically checks that bidirectional 1:m or 1:1 associations are being maintained correctly (assuming that they follow the xref:userguide:fun:how-tos/entity-relationships/managed-1-to-m-bidirectional-relationships.adoc[mutual registration pattern]
+
+[TIP]
+====
+(If using the JDO objectstore, then) there is generally no need to programmatically maintain 1:m relationships (indeed it may introduce subtle errors).
+For more details, see xref:userguide:fun:how-tos/entity-relationships/managed-1-to-m-bidirectional-relationships.adoc[here].
+Also check out the templates in the developers' guide (xref:toc:devguide:about.adoc#live-templates[live templates for IntelliJ] / xref:toc:devguide:about.adoc#editor-templates[editor templates for Eclipse]) for further guidance.
+====
+
+For example, suppose that `ParentDomainObject` and `ChildDomainObject` have a 1:m relationship (`ParentDomainObject#children` / `ChildDomainObject#parent`), and also `PeerDomainObject` has a 1:1 relationship with itself (`PeerDomainObject#next` / `PeerDomainObject#previous`).
+
+The following will exercise these relationships:
+
+[source,java]
+----
+public class BidirectionalRelationshipContractTestAll
+        extends BidirectionalRelationshipContractTestAbstract {
+
+    public BidirectionalRelationshipContractTestAll() {
+        super("org.apache.isis.core.unittestsupport.bidir",
+                ImmutableMap.<Class<?>,Instantiator>of(
+                    ChildDomainObject.class, new InstantiatorForChildDomainObject(),
+                    PeerDomainObject.class, new InstantiatorSimple(PeerDomainObjectForTesting.class)
+                ));
+        withLoggingTo(System.out);
+    }
+}
+----
+
+The first argument to the constructor scopes the search for domain objects; usually this would be something like `&quot;com.mycompany.dom&quot;`.
+
+The second argument provides a map of `Instantiator` for certain of the domain object types.
+This has two main purposes.
+First, for abstract classes, it nominates an alternative concrete class to be instantiated.
+Second, for classes (such as `ChildDomainObject`) that are `Comparable` and are held in a `SortedSet`), it provides the ability to ensure that different instances are unique when compared against each other.
+If no `Instantiator` is provided, then the contract test simply attempts to instantiates the class.
+
+If any of the supporting methods (`addToXxx()`, `removeFromXxx()`, `modifyXxx()` or `clearXxx()`) are missing, the relationship is skipped.
+
+To see what's going on (and to identify any skipped relationships), use the `withLoggingTo()` method call.
+If any assertion fails then the error should be descriptive enough to figure out the problem (without enabling logging).
+
+
+
+=== Value Objects
+
+The `ValueTypeContractTestAbstract` automatically tests that a custom value type implements `equals()` and `hashCode()` correctly.
+
+For example, testing JDK's own `java.math.BigInteger` can be done as follows:
+
+[source,java]
+----
+public class ValueTypeContractTestAbstract_BigIntegerTest extends ValueTypeContractTestAbstract<BigInteger> {
+
+    @Override
+    protected List<BigInteger> getObjectsWithSameValue() {
+        return Arrays.asList(new BigInteger("1"), new BigInteger("1"));
+    }
+
+    @Override
+    protected List<BigInteger> getObjectsWithDifferentValue() {
+        return Arrays.asList(new BigInteger("2"));
+    }
+}
+----
+
+
+
+== JMock Extensions
+
+WARNING: the JMock extensions are deprecrated, we suggest you use Mockito instead.
+
+If you use mocking, then  usual given/when/then format gets an extra step:
+
+* *given* the system is in this state
+* *expecting* these interactions (set up the mock expectations here)
+* *when* I poke it with a stick
+* *then* these state changes and interactions with Mocks should have occurred.
+
+If using JMock then the interactions (in the "then") are checked automatically by a JUnit rule.
+However, you probably will still have some state changes to assert upon.
+
+[TIP]
+.Distinguish between queries vs mutators
+====
+For mock interactions that simply retrieve some data, your test should not need to verify that it occurred.
+If the system were to be refactored and starts caching some data, you don't really want your tests to start breaking because they are no longer performing a query that once they did.
+If using JMock API this means using the `allowing(..)` method to set up the expectation.
+
+On the other hand mocks that mutate the state of the system you probably should assert have occurred.
+If using JMock this typically means using the `oneOf(...)` method.
+
+For more tips on using JMock and mocking in general, check out the link:http://www.growing-object-oriented-software.com/[GOOS] book, written by JMock's authors, Steve Freeman and Nat Pryce and also link:http://natpryce.com/articles.html[Nat's blog].
+====
+
+Apache Isis' unit test support provides `JUnitRuleMockery2` which is an extension to the link:http://www.jmock.org/[JMock]'s `JunitRuleMockery`.
+It provides a simpler API and also providing support for autowiring.
+
+
+For example, here we see that the class under test, an instance of `CollaboratingUsingSetterInjection`, is automatically wired up with its `Collaborator`:
+
+[source,java]
+----
+public class JUnitRuleMockery2Test_autoWiring_setterInjection_happyCase {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    private Collaborator collaborator;
+
+    @ClassUnderTest
+    private CollaboratingUsingSetterInjection collaborating;
+
+    @Test
+    public void wiring() {
+        assertThat(collaborating.collaborator, is(not(nullValue())));
+    }
+}
+----
+
+[NOTE]
+====
+Isis also includes (and automatically uses) a link:http://www.javassist.org[Javassist]-based implementation of JMock's link:http://www.jmock.org/mocking-classes.html[`ClassImposteriser`] interface, so that you can mock out concrete classes as well as interfaces.  We've provided this rather than JMock's own cglib-based implementation (which is problematic for us given its own dependencies on link:http://asm.ow2.org/[asm]).
+====
+
+
+The example tests can be found https://github.com/apache/isis/tree/master/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking[here]
+
+
+
+== SOAP Fake Endpoints
+
+
+
+No man is an island, so the saying goes, and neither are most applications.
+Chances are that at some point you may need to integrate your Apache Isis application to other external systems, possibly using old-style SOAP web services.
+The SOAP client in this case could be a domain service within your app, or it might be externalized, eg invoked through a scheduler or using link:http://camel.apache.org[Apache Camel].
+
+While you will want to (of course) perform manual system testing/UAT with a test instance of that external system, it's also useful to be able to perform unit testing of your SOAP client component.
+
+The `SoapEndpointPublishingRule` is a simple JUnit rule that allows you to run a fake SOAP endpoint within an unit test.
+
+
+=== `SoapEndpointPublishingRule`
+
+The idea behind this rule is that you write a fake server endpoint that implements the same WSDL contract as the "real" external system does, but which also exposes additional API to specify responses (or throw exceptions) from SOAP calls.
+It also typically records the requests and allows these to be queried.
+
+In its setup your unit test and gets the rule to instantiate and publish that fake server endpoint, and then obtains a reference to that server endpoint.
+It also instantiates the SOAP client, pointing it at the address (that is, a URL) that the fake server endpoint is running on.
+This way the unit test has control of both the SOAP client and server: the software under test and its collaborator.
+
+In the test methods your unit test sets up expectations on your fake server, and then exercises the SOAP client.
+The SOAP client calls the fake server, which then responds accordingly.
+The test can then assert that all expected interactions have occurred.
+
+So that tests don't take too long to run, the rule puts the fake server endpoints onto a thread-local.
+Therefore the unit tests should clear up any state on the fake server endpoints.
+
+Your unit test uses the rule by specifying the endpoint class (must have a no-arg constructor):
+
+[source,java]
+----
+public class FakeExternalSystemEndpointRuleTest {
+    @Rule
+    public SoapEndpointPublishingRule serverRule =
+        new SoapEndpointPublishingRule(FakeExternalSystemEndpoint.class);         // <1>
+    private FakeExternalSystemEndpoint fakeServerEndpoint;
+    private DemoObject externalSystemContract;                                    // <2>
+    @Before
+    public void setUp() throws Exception {
+        fakeServerEndpoint =
+            serverRule.getEndpointImplementor(FakeExternalSystemEndpoint.class);  // <3>
+        final String endpointAddress =
+            serverRule.getEndpointAddress(FakeExternalSystemEndpoint.class);      // <4>
+        final DemoObjectService externalSystemService =                           // <5>
+                new DemoObjectService(ExternalSystemWsdl.getWsdl());              // <6>
+        externalSystemContract = externalSystemService.getDemoObjectOverSOAP();
+        BindingProvider provider = (BindingProvider) externalSystemContract;
+        provider.getRequestContext().put(
+                BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                endpointAddress)
+        );
+    }
+    @Test
+    public void happy_case() throws Exception {
+        // given
+        final Update update = new Update();                              // <7>
+        ...
+        // expect
+        final UpdateResponse response = new UpdateResponse();            // <8>
+        ...
+        fakeServerEndpoint.control().setResponse(updateResponse);
+        // when
+        PostResponse response = externalSystemContract.post(update);     // <9>
+        // then
+        final List<Update> updates =                                     // <10>
+            fakeServerEndpoint.control().getUpdates();
+        ...
+    }
+}
+----
+<1> specify the class that implements the endpoint (must have a no-arg constructor)
+<2> the SOAP contract as defined in WSDL and generated by wsdl2java
+<3> get hold of the fake server-side endpoint from the rule...
+<4> \... and its endpoint address
+<5> use factory (also generated by wsdl2java) to create client-side endpoint
+<6> `getWsdl()` is a utility method to return a URL for the WSDL (eg from the classpath)
+<7> create a request object in order to invoke the SOAP web service
+<8> instruct the fake server endpoint how to respond
+<9> invoke the web service
+<10> check the fake server endpoint was correctly invoked etc.
+
+
+The rule can also host multiple endpoints; just provide multiple classes in the constructor:
+
+[source,java]
+----
+@Rule
+public SoapEndpointPublishingRule serverRule =
+                new SoapEndpointPublishingRule(
+                    FakeCustomersEndpoint.class,
+                    FakeOrdersEndpoint.class,
+                    FakeProductsEndpoint.class);
+----
+
+To lookup a particular endpoint, specify its type:
+
+[source,java]
+----
+FakeProductsEndpoint fakeProductsServerEndpoint =
+            serverRule.getPublishedEndpoint(FakeProductsEndpoint.class);
+----
+
+The endpoint addresses that the server endpoints run on are determined automatically.
+If you want more control, then you can call one of ``SoapEndpointPublishingRule``'s overloaded constructors, passing in one or more `SoapEndpointSpec` instances.
+
+
+
+
+=== XML Marshalling Support
+
+Apache Isis' unit testing support also provides helper `JaxbUtil` and `JaxbMatchers` classes.
+These are useful if you have exampler XML-serialized representations of the SOAP requests and response payloads and want to use these within your tests.
+
+
+== Maven Configuration
+
+Apache Isis' unit test support is most easily configured through a dependency on the `isis-mavendeps-testing` module:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.mavendeps</groupId>
+    <artifactId>isis-mavendeps-testing</artifactId>
+    <scope>test</scope>                             <!--1-->
+    <type>pom</type>
+</dependency>
+----
+<1> Normally `test`; usual Maven scoping rules apply.
+
+There is no need to specify the version if you inherit from from the xref:starters:parent-pom:about.adoc[starter app parent POM], then
+
+This will set up unit testing, integration testing and BDD specs support .
+
+include::starters:parent-pom:partial$surefire-configuration-caution.adoc[]
+
+If you just want to set up unit testing support, then use:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.core</groupId>
+    <artifactId>isis-core-unittestsupport</artifactId>
+    <scope>test</scope>
+</dependency>
+----
+
diff --git a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/contract-tests.adoc b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/contract-tests.adoc
deleted file mode 100644
index aa0cf15..0000000
--- a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/contract-tests.adoc
+++ /dev/null
@@ -1,169 +0,0 @@
-[[contract-tests]]
-= Contract Tests
-: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 [...]
-
-
-
-
-Contract tests ensure that all instances of a particular idiom/pattern that occur within your codebase are implemented correctly.  You could think of them as being a way to enforce a certain type of coding standard.  Implementation-wise they use link:https://code.google.com/p/reflections/[Reflections] library to scan for classes.
-
-
-
-== ``SortedSet``s
-
-This contract test automatically checks that all fields of type `java.util.Collection` are declared as `java.util.SortedSet`. In other words, it precludes either `java.util.List` or `java.util.Set` from being used as a collection.
-
-For example, the following passes the contract test:
-
-[source,java]
-----
-public class Department {
-    private SortedSet<Employee> employees = new TreeSet<Employee>();
-    ...
-}
-----
-
-whereas this would not:
-
-[source,java]
-----
-public class SomeDomainObject {
-    private List<Employee> employees = new ArrayList<Employee>();
-    ...
-}
-----
-
-If using DataNucleus against an RDBMS (as you probably are) then we strongly recommend that you implement this test, for several reasons:
-
-* first, ``Set``s align more closely to the relational model than do ``List``s. A ``List`` must have an additional index to specify order.
-
-* second, `SortedSet` is preferable to `Set` because then the order is well-defined and predictable (to an end user, to the programmer). +
-+
-The xref:refguide:applib-cm:classes/utility.adoc#ObjectContracts[`ObjectContracts`]  utility class substantially simplifies the task of implementing `Comparable` in your domain classes.
-
-* third, if the relationship is bidirectional then JDO/Objectstore will automatically maintain the relationship.
-
-To use the contract test, subclass `SortedSetsContractTestAbstract`, specifying the root package to search for domain classes.
-
-For example:
-
-[source,java]
-----
-public class SortedSetsContractTestAll extends SortedSetsContractTestAbstract {
-
-    public SortedSetsContractTestAll() {
-        super("org.estatio.dom");
-        withLoggingTo(System.out);
-    }
-}
-----
-
-
-
-== Bidirectional
-
-This contract test automatically checks that bidirectional 1:m or 1:1 associations are being maintained correctly (assuming that they follow the xref:userguide:fun:how-tos/entity-relationships/managed-1-to-m-bidirectional-relationships.adoc[mutual registration pattern]
-
-[TIP]
-====
-(If using the JDO objectstore, then) there is generally no need to programmatically maintain 1:m relationships (indeed it may introduce subtle errors). For more details, see xref:userguide:fun:how-tos/entity-relationships/managed-1-to-m-bidirectional-relationships.adoc[here].  Also check out the templates in the developers' guide (xref:toc:devguide:about.adoc#live-templates[live templates for IntelliJ] / xref:toc:devguide:about.adoc#editor-templates[editor templates for Eclipse]) for fur [...]
-====
-
-For example, suppose that `ParentDomainObject` and `ChildDomainObject` have a 1:m relationship (`ParentDomainObject#children` / `ChildDomainObject#parent`), and also `PeerDomainObject` has a 1:1 relationship with itself (`PeerDomainObject#next` / `PeerDomainObject#previous`).
-
-The following will exercise these relationships:
-
-[source,java]
-----
-public class BidirectionalRelationshipContractTestAll
-        extends BidirectionalRelationshipContractTestAbstract {
-
-    public BidirectionalRelationshipContractTestAll() {
-        super("org.apache.isis.core.unittestsupport.bidir",
-                ImmutableMap.<Class<?>,Instantiator>of(
-                    ChildDomainObject.class, new InstantiatorForChildDomainObject(),
-                    PeerDomainObject.class, new InstantiatorSimple(PeerDomainObjectForTesting.class)
-                ));
-        withLoggingTo(System.out);
-    }
-}
-----
-
-The first argument to the constructor scopes the search for domain objects; usually this would be something like `&quot;com.mycompany.dom&quot;`.
-
-The second argument provides a map of `Instantiator` for certain of the domain object types. This has two main purposes. First, for abstract classes, it nominates an alternative concrete class to be instantiated. Second, for classes (such as `ChildDomainObject`) that are `Comparable` and are held in a `SortedSet`), it provides the ability to ensure that different instances are unique when compared against each other. If no `Instantiator` is provided, then the contract test simply attempt [...]
-
-If any of the supporting methods (`addToXxx()`, `removeFromXxx()`, `modifyXxx()` or `clearXxx()`) are missing, the relationship is skipped.
-
-To see what's going on (and to identify any skipped relationships), use the `withLoggingTo()` method call. If any assertion fails then the error should be descriptive enough to figure out the problem (without enabling logging).
-
-The example tests can be found https://github.com/apache/isis/tree/master/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/bidir[here].
-
-
-
-== Injected Services Method
-
-It is quite common for some basic services to be injected in a project-specific domain object superclass; for example a `ClockService` might generally be injected everywhere:
-
-[source,java]
-----
-public abstract class EstatioDomainObject {
-    @javax.inject.Inject
-    protected ClockService clockService;
-}
-----
-
-If a subclass inadvertantly overrides this method and provides its own `ClockService` field, then the field in the superclass will never initialized. As you might imagine, ``NullPointerException``s could then arise.
-
-This contract test automatically checks that the `injectXxx(...)` method, to allow for injected services, is not overridable, ie `final`.
-
-[NOTE]
-====
-This contract test is semi-obsolete; most of the time you will want to use `@javax.inject.Inject` on fields rather than the `injectXxx()` method.  The feature dates from a time before Apache Isis supported the `@Inject` annotation.
-====
-
-
-To use the contract test, , subclass `SortedSetsContractTestAbstract`, specifying the root package to search for domain classes.
-
-For example:
-
-[source,java]
-----
-public class InjectServiceMethodMustBeFinalContractTestAll extends InjectServiceMethodMustBeFinalContractTestAbstract {
-
-    public InjectServiceMethodMustBeFinalContractTestAll() {
-        super("org.estatio.dom");
-        withLoggingTo(System.out);
-    }
-}
-----
-
-
-
-
-== Value Objects
-
-The `ValueTypeContractTestAbstract` automatically tests that a custom value type implements `equals()` and `hashCode()` correctly.
-
-For example, testing JDK's own `java.math.BigInteger` can be done as follows:
-
-[source,java]
-----
-public class ValueTypeContractTestAbstract_BigIntegerTest extends ValueTypeContractTestAbstract<BigInteger> {
-
-    @Override
-    protected List<BigInteger> getObjectsWithSameValue() {
-        return Arrays.asList(new BigInteger("1"), new BigInteger("1"));
-    }
-
-    @Override
-    protected List<BigInteger> getObjectsWithDifferentValue() {
-        return Arrays.asList(new BigInteger("2"));
-    }
-}
-----
-
-The example unit tests can be found https://github.com/apache/isis/tree/master/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/value[here].
-
-
-
diff --git a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/jmock-extensions.adoc b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/jmock-extensions.adoc
deleted file mode 100644
index dbc1d51..0000000
--- a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/jmock-extensions.adoc
+++ /dev/null
@@ -1,57 +0,0 @@
-[[jmock-extensions]]
-= JMock Extensions
-: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 [...]
-
-
-As noted earlier, for unit tests we tend to use link:http://www.jmock.org[JMock] as our mocking library.  The usual given/when/then format gets an extra step:
-
-* *given* the system is in this state
-* *expecting* these interactions (set up the mock expectations here)
-* *when* I poke it with a stick
-* *then* these state changes and interactions with Mocks should have occurred.
-
-If using JMock then the interactions (in the "then") are checked automatically by a JUnit rule.  However, you probably will still have some state changes to assert upon.
-
-[TIP]
-.Distinguish between queries vs mutators
-====
-For mock interactions that simply retrieve some data, your test should not need to verify that it occurred.  If the system were to be refactored and starts caching some data, you don't really want your tests to start breaking because they are no longer performing a query that once they did.  If using JMock API this means using the `allowing(..)` method to set up the expectation.
-
-On the other hand mocks that mutate the state of the system you probably should assert have occurred.  If using JMock this typically means using the `oneOf(...)` method.
-
-For more tips on using JMock and mocking in general, check out the link:http://www.growing-object-oriented-software.com/[GOOS] book, written by JMock's authors, Steve Freeman and Nat Pryce and also link:http://natpryce.com/articles.html[Nat's blog].
-====
-
-Apache Isis' unit test support provides `JUnitRuleMockery2` which is an extension to the link:http://www.jmock.org/[JMock]'s `JunitRuleMockery`.  It provides a simpler API and also providing support for autowiring.
-
-
-For example, here we see that the class under test, an instance of `CollaboratingUsingSetterInjection`, is automatically wired up with its `Collaborator`:
-
-[source,java]
-----
-public class JUnitRuleMockery2Test_autoWiring_setterInjection_happyCase {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    @Mock
-    private Collaborator collaborator;
-
-    @ClassUnderTest
-    private CollaboratingUsingSetterInjection collaborating;
-
-    @Test
-    public void wiring() {
-        assertThat(collaborating.collaborator, is(not(nullValue())));
-    }
-}
-----
-
-[NOTE]
-====
-Isis also includes (and automatically uses) a link:http://www.javassist.org[Javassist]-based implementation of JMock's link:http://www.jmock.org/mocking-classes.html[`ClassImposteriser`] interface, so that you can mock out concrete classes as well as interfaces.  We've provided this rather than JMock's own cglib-based implementation (which is problematic for us given its own dependencies on link:http://asm.ow2.org/[asm]).
-====
-
-
-The example tests can be found https://github.com/apache/isis/tree/master/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking[here]
-
diff --git a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/maven-configuration.adoc b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/maven-configuration.adoc
deleted file mode 100644
index 3078663..0000000
--- a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/maven-configuration.adoc
+++ /dev/null
@@ -1,55 +0,0 @@
-[[maven-configuration]]
-= Maven Configuration
-: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 [...]
-
-
-Apache Isis' unit test support is automatically configured if you use the link:https://github.com/apache/isis-app-helloworld[HelloWorld] or the link:https://github.com/apache/isis-app-simpleapp[SimpleApp] archetypes.
-To set it up manually, update the `pom.xml` of your domain object model module:
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.isis.core</groupId>
-    <artifactId>isis-core-unittestsupport</artifactId>
-    <scope>test</scope> // <1>
-</dependency>
-----
-<1> Normally `test`; usual Maven scoping rules apply.
-
-
-[NOTE]
-====
-This can also be done by adding a dependency to `org.apache.isis.mavendeps:isis-mavendeps-testing` module; see the link:https://github.com/apache/isis-app-simpleapp[SimpleApp starter app].
-====
-
-
-We also recommend that you configure the `maven-surefire-plugin` to pick up the following class patterns:
-
-[source,xml]
-----
-<plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-surefire-plugin</artifactId>
-    <version>2.10</version>
-    <configuration>
-        <includes>
-            <include>**/*Test.java</include>
-            <include>**/*Test_*.java</include>
-            <include>**/*Spec*.java</include>
-        </includes>
-        <excludes>
-            <exclude>**/Test*.java</exclude>
-            <exclude>**/*ForTesting.java</exclude>
-            <exclude>**/*Abstract*.java</exclude>
-        </excludes>
-        <useFile>true</useFile>
-        <printSummary>true</printSummary>
-        <outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
-    </configuration>
-</plugin>
-----
-
-[NOTE]
-====
-This can also be done using mavenmixins; see the link:https://github.com/apache/isis-app-simpleapp[SimpleApp starter app].
-====
diff --git a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/soap-fake-server-junit-rule.adoc b/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/soap-fake-server-junit-rule.adoc
deleted file mode 100644
index 02bcb2c..0000000
--- a/core/unittestsupport/src/main/adoc/modules/unittestsupport/pages/soap-fake-server-junit-rule.adoc
+++ /dev/null
@@ -1,111 +0,0 @@
-[[soap-fake-server-junit-rule]]
-= SOAP Fake Endpoints
-: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 [...]
-
-
-
-No man is an island, and neither are most applications.  Chances are that at some point you may need to integrate your Apache Isis application to other external systems, possibly using old-style SOAP web services.  The SOAP client in this case could be a domain service within your app, or it might be externalized, eg invoked through a scheduler or using link:http://camel.apache.org[Apache Camel].
-
-While you will want to (of course) perform manual system testing/UAT with a test instance of that external system, it's also useful to be able to perform unit testing of your SOAP client component.
-
-The `SoapEndpointPublishingRule` is a simple JUnit rule that allows you to run a fake SOAP endpoint within an unit test.
-
-[TIP]
-====
-The (non-ASF) link:https://platform.incode.org[Incode Platform^]'s publishmq module provides a full example of how to integrate and test an Apache Isis application with a (faked out) external system.
-====
-
-
-== `SoapEndpointPublishingRule`
-
-The idea behind this rule is that you write a fake server endpoint that implements the same WSDL contract as the "real" external system does, but which also exposes additional API to specify responses (or throw exceptions) from SOAP calls.  It also typically records the requests and allows these to be queried.
-
-In its setup your unit test and gets the rule to instantiate and publish that fake server endpoint, and then obtains a reference to that server endpoint.  It also instantiates the SOAP client, pointing it at the address (that is, a URL) that the fake server endpoint is running on.  This way the unit test has control of both the SOAP client and server: the software under test and its collaborator.
-
-In the test methods your unit test sets up expectations on your fake server, and then exercises the SOAP client.  The SOAP client calls the fake server, which then responds accordingly.  The test can then assert that all expected interactions have occurred.
-
-So that tests don't take too long to run, the rule puts the fake server endpoints onto a thread-local.  Therefore the unit tests should clear up any state on the fake server endpoints.
-
-Your unit test uses the rule by specifying the endpoint class (must have a no-arg constructor):
-
-[source,java]
-----
-public class FakeExternalSystemEndpointRuleTest {
-    @Rule
-    public SoapEndpointPublishingRule serverRule =
-        new SoapEndpointPublishingRule(FakeExternalSystemEndpoint.class);         // <1>
-    private FakeExternalSystemEndpoint fakeServerEndpoint;
-    private DemoObject externalSystemContract;                                    // <2>
-    @Before
-    public void setUp() throws Exception {
-        fakeServerEndpoint =
-            serverRule.getEndpointImplementor(FakeExternalSystemEndpoint.class);  // <3>
-        final String endpointAddress =
-            serverRule.getEndpointAddress(FakeExternalSystemEndpoint.class);      // <4>
-        final DemoObjectService externalSystemService =                           // <5>
-                new DemoObjectService(ExternalSystemWsdl.getWsdl());              // <6>
-        externalSystemContract = externalSystemService.getDemoObjectOverSOAP();
-        BindingProvider provider = (BindingProvider) externalSystemContract;
-        provider.getRequestContext().put(
-                BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
-                endpointAddress)
-        );
-    }
-    @Test
-    public void happy_case() throws Exception {
-        // given
-        final Update update = new Update();                              // <7>
-        ...
-        // expect
-        final UpdateResponse response = new UpdateResponse();            // <8>
-        ...
-        fakeServerEndpoint.control().setResponse(updateResponse);
-        // when
-        PostResponse response = externalSystemContract.post(update);     // <9>
-        // then
-        final List<Update> updates =                                     // <10>
-            fakeServerEndpoint.control().getUpdates();
-        ...
-    }
-}
-----
-<1> specify the class that implements the endpoint (must have a no-arg constructor)
-<2> the SOAP contract as defined in WSDL and generated by wsdl2java
-<3> get hold of the fake server-side endpoint from the rule...
-<4> ... and its endpoint address
-<5> use factory (also generated by wsdl2java) to create client-side endpoint
-<6> `getWsdl()` is a utility method to return a URL for the WSDL (eg from the classpath)
-<7> create a request object in order to invoke the SOAP web service
-<8> instruct the fake server endpoint how to respond
-<9> invoke the web service
-<10> check the fake server endpoint was correctly invoked etc.
-
-
-The rule can also host multiple endpoints; just provide multiple classes in the constructor:
-
-[source,java]
-----
-@Rule
-public SoapEndpointPublishingRule serverRule =
-                new SoapEndpointPublishingRule(
-                    FakeCustomersEndpoint.class,
-                    FakeOrdersEndpoint.class,
-                    FakeProductsEndpoint.class);
-----
-
-To lookup a particular endpoint, specify its type:
-
-[source,java]
-----
-FakeProductsEndpoint fakeProductsServerEndpoint =
-            serverRule.getPublishedEndpoint(FakeProductsEndpoint.class);
-----
-
-The endpoint addresses that the server endpoints run on are determined automatically.  If you want more control, then you can call one of ``SoapEndpointPublishingRule``'s overloaded constructors, passing in one or more `SoapEndpointSpec` instances.
-
-
-
-
-== XML Marshalling Support
-
-Apache Isis' unit testing support also provides helper `JaxbUtil` and `JaxbMatchers` classes.  These are useful if you have exampler XML-serialized representations of the SOAP requests and response payloads and want to use these within your tests.
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAbstract.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAbstract.java
deleted file mode 100644
index 35e1371..0000000
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/inject/InjectServiceMethodMustBeFinalContractTestAbstract.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.unittestsupport.inject;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Set;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.apache.isis.core.commons.internal.reflection._Reflect;
-import org.apache.isis.core.unittestsupport.AbstractApplyToAllContractTest;
-
-import static org.apache.isis.core.commons.internal.collections._Collections.toHashSet;
-import static org.apache.isis.core.commons.internal.reflection._Reflect.withPrefix;
-
-/**
- * Ensure that subclasses do not inadvertently override an <tt>injectXxx()</tt> method that
- * is defined in a superclass.
- *
- * <p>
- * Doing this will result in the subclass's field being populated, but the superclass's field not
- * (leading to possible {@link NullPointerException}s).
- */
-public abstract class InjectServiceMethodMustBeFinalContractTestAbstract extends AbstractApplyToAllContractTest {
-
-    protected InjectServiceMethodMustBeFinalContractTestAbstract(
-            final String packagePrefix) {
-        super(packagePrefix);
-    }
-
-    @Override
-    protected void applyContractTest(Class<?> entityType) {
-        final Set<Method> injectMethods = _Reflect.streamAllMethods(entityType, true)
-                .filter(withPrefix("inject"))
-                .collect(toHashSet());
-
-        for (Method injectMethod : injectMethods) {
-            try {
-                final String desc = desc(entityType, injectMethod);
-                out.println("processing " + desc);
-                out.incrementIndent();
-                process(entityType, injectMethod);
-            } finally {
-                out.decrementIndent();
-            }
-        }
-    }
-
-    private void process(Class<?> entityType, Method injectMethod) {
-        assertThat(
-                desc(entityType, injectMethod) + " must be final",
-                Modifier.isFinal(injectMethod.getModifiers()), is(true));
-    }
-
-    private String desc(Class<?> entityType, Method injectMethod) {
-        return entityType.getSimpleName() + "#" + injectMethod.getName() + "(...)";
-    }
-
-
-}
diff --git a/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc b/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
index 5ecafae..c720bd3 100644
--- a/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
+++ b/extensions/core/flyway/adoc/modules/flyway/pages/about.adoc
@@ -21,9 +21,9 @@ Also add the following module to your `AppManifest`:
 ----
 @Configuration
 @Import({
-    // ...
+    ...
     IsisModuleExtFlywayImpl.class,
-    // ...
+    ...
 })
 public static class AppManifest {
 }
diff --git a/mavendeps/testing/pom.xml b/mavendeps/testing/pom.xml
index 79c661d..a7227e7 100644
--- a/mavendeps/testing/pom.xml
+++ b/mavendeps/testing/pom.xml
@@ -61,6 +61,11 @@
 			<artifactId>isis-testing-integtestsupport-applib</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>org.apache.isis.testing</groupId>
+			<artifactId>isis-testing-specsupport-applib</artifactId>
+		</dependency>
+
+		<dependency>
 			<groupId>org.hamcrest</groupId>
 			<artifactId>hamcrest-library</artifactId>
 		</dependency>
diff --git a/starters/adoc/modules/helloworld/pages/about.adoc b/starters/adoc/modules/helloworld/pages/about.adoc
index 59d80b9..6238135 100644
--- a/starters/adoc/modules/helloworld/pages/about.adoc
+++ b/starters/adoc/modules/helloworld/pages/about.adoc
@@ -261,7 +261,7 @@ In the case of `HelloWorldModule`, it is extremely simple:
 .HelloWorldModule.java
 ----
 package domainapp.modules.hello;
-// ... imports omitted ...
+... imports omitted ...
 @Configuration
 @Import({})                         //<!--1-->
 @ComponentScan                      //<!--2-->
diff --git a/starters/adoc/modules/parent-pom/partials/surefire-configuration-caution.adoc b/starters/adoc/modules/parent-pom/partials/surefire-configuration-caution.adoc
new file mode 100644
index 0000000..ba66e78
--- /dev/null
+++ b/starters/adoc/modules/parent-pom/partials/surefire-configuration-caution.adoc
@@ -0,0 +1,13 @@
+:page-partial:
+
+[CAUTION]
+====
+The xref:starters:parent-pom:about.adoc[Parent POM] configures the Maven surefire plugin in three separate executions for unit test, integ test and BDD specs.
+This relies on a naming convention:
+
+* unit tests, which must have a suffix `Test`, but excluding ...
+* integ tests, which must have the suffix `IntegTest`
+* BDD specs, which must have suffix `IntegBddSpecs`
+
+Not following this convention is likely to cause integ tests/specs to fail.
+====
diff --git a/starters/adoc/modules/simpleapp/pages/about.adoc b/starters/adoc/modules/simpleapp/pages/about.adoc
index 89e4f84..d8a0836 100644
--- a/starters/adoc/modules/simpleapp/pages/about.adoc
+++ b/starters/adoc/modules/simpleapp/pages/about.adoc
@@ -384,7 +384,7 @@ In the case of `SimpleModule`, it consists of:
 .SimpleModule.java
 ----
 package domainapp.modules.simple;
-// ... imports omitted ...
+... imports omitted ...
 @Configuration
 @Import({})                                             //<!--1-->
 @ComponentScan                                          //<!--2-->
@@ -586,7 +586,7 @@ It's very simple though:
 .ApplicationModule.java
 ----
 package domainapp.webapp.application;
-// ... imports omitted ...
+... imports omitted ...
 @Configuration
 @Import(SimpleModule.class)             // <!--1-->
 @ComponentScan                          // <!--2-->
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown.java
index a5a4f6e..670a856 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/todomodule/fixturescripts/ExcelDemoToDoItem_tearDown.java
@@ -1,9 +1,10 @@
 package org.apache.isis.subdomains.excel.fixtures.demoapp.todomodule.fixturescripts;
 
 import org.apache.isis.subdomains.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem;
+import org.apache.isis.testing.fixtures.applib.teardown.TeardownFixtureAbstract;
 import org.apache.isis.testing.fixtures.applib.legacy.teardown.TeardownFixtureAbstract2;
 
-public class ExcelDemoToDoItem_tearDown extends TeardownFixtureAbstract2 {
+public class ExcelDemoToDoItem_tearDown extends TeardownFixtureAbstract {
 
     @Override
     protected void execute(final ExecutionContext executionContext) {
diff --git a/testing/fakedata/fixtures/src/main/java/org/apache/isis/testing/fakedata/fixtures/demoapp/demomodule/fixturescripts/FakeDataDemoObjectWithAll_tearDown.java b/testing/fakedata/fixtures/src/main/java/org/apache/isis/testing/fakedata/fixtures/demoapp/demomodule/fixturescripts/FakeDataDemoObjectWithAll_tearDown.java
index 4bcf15c..68c3e88 100644
--- a/testing/fakedata/fixtures/src/main/java/org/apache/isis/testing/fakedata/fixtures/demoapp/demomodule/fixturescripts/FakeDataDemoObjectWithAll_tearDown.java
+++ b/testing/fakedata/fixtures/src/main/java/org/apache/isis/testing/fakedata/fixtures/demoapp/demomodule/fixturescripts/FakeDataDemoObjectWithAll_tearDown.java
@@ -1,9 +1,9 @@
 package org.apache.isis.testing.fakedata.fixtures.demoapp.demomodule.fixturescripts;
 
-import org.apache.isis.testing.fixtures.applib.legacy.teardown.TeardownFixtureAbstract2;
+import org.apache.isis.testing.fixtures.applib.teardown.TeardownFixtureAbstract;
 import org.apache.isis.testing.fakedata.fixtures.demoapp.demomodule.dom.FakeDataDemoObjectWithAll;
 
-public class FakeDataDemoObjectWithAll_tearDown extends TeardownFixtureAbstract2 {
+public class FakeDataDemoObjectWithAll_tearDown extends TeardownFixtureAbstract {
 
     @Override
     protected void execute(final ExecutionContext executionContext) {
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.java
index 7ed91c9..0a0152b 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.java
@@ -28,8 +28,8 @@ import org.apache.isis.testing.fixtures.applib.api.PersonaWithBuilderScript;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.BuilderScriptAbstract;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.fixtures.applib.legacy.FixtureClock;
-import org.apache.isis.testing.fixtures.applib.legacy.TickingFixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.FixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.TickingFixtureClock;
 import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
 
 public abstract class IsisIntegrationTestAbstractWithFixtures extends IsisIntegrationTestAbstract {
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
index 8361deb..1ea1380 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
@@ -23,7 +23,7 @@ import org.springframework.context.annotation.Import;
 
 import org.apache.isis.testing.fixtures.applib.fixturescripts.ExecutionParametersService;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.fixtures.applib.legacy.queryresultscache.QueryResultsCacheControlDefault;
+import org.apache.isis.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault;
 import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixturesService;
 import org.apache.isis.subdomains.spring.applib.IsisModuleSubdomainsSpringApplib;
 import org.apache.isis.testing.fixtures.applib.services.FixturesLifecycleService;
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClock.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/FixtureClock.java
similarity index 99%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClock.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/FixtureClock.java
index 2e023ef..c6c29c8 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClock.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/FixtureClock.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.testing.fixtures.applib.legacy;
+package org.apache.isis.testing.fixtures.applib.clock;
 
 import java.time.Instant;
 import java.util.Calendar;
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/TickingFixtureClock.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/TickingFixtureClock.java
similarity index 98%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/TickingFixtureClock.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/TickingFixtureClock.java
index 275fbc0..4eb3be8 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/TickingFixtureClock.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/TickingFixtureClock.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy;
+package org.apache.isis.testing.fixtures.applib.clock;
 
 import java.sql.Timestamp;
 import java.time.Instant;
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/ClockFixture.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/ClockFixture.java
similarity index 97%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/ClockFixture.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/ClockFixture.java
index 3537c18..6f7de7b 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/ClockFixture.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/ClockFixture.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy.clock;
+package org.apache.isis.testing.fixtures.applib.clock.fixture;
 
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
@@ -28,7 +28,7 @@ import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.testing.fixtures.applib.api.FixtureScriptWithExecutionStrategy;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.fixtures.applib.legacy.FixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.FixtureClock;
 
 @Programmatic
 class ClockFixture extends FixtureScript implements FixtureScriptWithExecutionStrategy {
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/TickingClockFixture.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/TickingClockFixture.java
similarity index 95%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/TickingClockFixture.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/TickingClockFixture.java
index c031f16..fbd705b 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/clock/TickingClockFixture.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/clock/fixture/TickingClockFixture.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy.clock;
+package org.apache.isis.testing.fixtures.applib.clock.fixture;
 
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
@@ -28,8 +28,8 @@ import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.testing.fixtures.applib.api.FixtureScriptWithExecutionStrategy;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.fixtures.applib.legacy.FixtureClock;
-import org.apache.isis.testing.fixtures.applib.legacy.TickingFixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.FixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.TickingFixtureClock;
 
 
 @Programmatic
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/package-info.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/package-info.java
deleted file mode 100644
index a9a89e5..0000000
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/package-info.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-/**
- * Defines the {@link org.apache.isis.extensions.fixtures.legacy.InstallableFixture}
- * interface and supporting classes.
- *
- * <p>
- *     <b>NOTE THAT</b> {@link org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript} interface provides a more complete
- *     approach to handling fixtures, and should generally be used in preference to
- *     {@link org.apache.isis.extensions.fixtures.legacy.InstallableFixture}.
- * </p>
- *
- * <p>
- * Fixtures are used to initialize the system, typically for either testing
- * or for demo/prototyping purposes.  Initializing the system means:
- * <ul>
- * <li><p>setting up objects within the persistent object store (typically only relevant
- * if using the in-memory object store; other object stores will generally
- * ignore these fixtures)</p></li>
- * <li><p>setting the current {@link org.apache.isis.applib.fixtures.DateFixture date}</p></li>
- * <li><p>{@link org.apache.isis.applib.fixtures.SwitchUserFixture switching}
- * the current user while fixtures are being installed (eg so that a workflow
- * can be picked up midway through)</p></li>
- * <li><p>specifying the {@link org.apache.isis.applib.fixtures.LogonFixture currently logged on} user once the fixtures have been installed</p></li>
- * </ul>
- *
- */
-package org.apache.isis.testing.fixtures.applib.legacy;
\ No newline at end of file
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract2.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract2.java
deleted file mode 100644
index ec1deb8..0000000
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract2.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.testing.fixtures.applib.legacy.teardown;
-
-public abstract class TeardownFixtureAbstract2 extends TeardownFixtureAbstract {
-
-}
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixtures.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixtures.java
index 391e859..805685f 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixtures.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixtures.java
@@ -34,11 +34,6 @@ public interface ModuleWithFixtures {
      * Optionally each module can define a {@link FixtureScript} which holds immutable "reference data".
      *
      * <p>
-     * These are automatically executed whenever running integration tests (but are ignored when bootstrapping the
-     * runtime as a webapp).
-     * </p>
-     *
-     * <p>
      *     By default, returns a {@link FixtureScript#NOOP noop}.
      * </p>
      */
@@ -48,12 +43,7 @@ public interface ModuleWithFixtures {
 
     /**
      * Optionally each module can define a tear-down {@link FixtureScript}, used to remove the contents of <i>all</i>
-     * entities (both reference data and operational/transactional data).
-     *
-     * <p>
-     * These are automatically executed whenever running integration tests (but are ignored when bootstrapping the
-     * runtime as a webapp).
-     * </p>
+     * transactional entities (both reference data and operational/transactional data).
      *
      * <p>
      *     By default, returns a {@link FixtureScript#NOOP noop}.
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/queryresultscache/QueryResultsCacheControlDefault.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
similarity index 96%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/queryresultscache/QueryResultsCacheControlDefault.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
index 6a96e39..6a25f4d 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/queryresultscache/QueryResultsCacheControlDefault.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy.queryresultscache;
+package org.apache.isis.testing.fixtures.applib.queryresultscache;
 
 import javax.inject.Named;
 
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
index f6aeb76..fc65623 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
@@ -31,7 +31,7 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
-import org.apache.isis.testing.fixtures.applib.legacy.FixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.FixtureClock;
 import org.apache.isis.core.runtime.session.IsisSessionFactory;
 
 @Service
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/setup/PersonaEnumPersistAll.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
similarity index 98%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/setup/PersonaEnumPersistAll.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
index 5a71c0a..3195f7f 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/setup/PersonaEnumPersistAll.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/setup/PersonaEnumPersistAll.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy.setup;
+package org.apache.isis.testing.fixtures.applib.setup;
 
 import java.util.List;
 
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/teardown/TeardownFixtureAbstract.java
similarity index 97%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/teardown/TeardownFixtureAbstract.java
index ca2678e..5fa401c 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/legacy/teardown/TeardownFixtureAbstract.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/teardown/TeardownFixtureAbstract.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.legacy.teardown;
+package org.apache.isis.testing.fixtures.applib.teardown;
 
 import javax.inject.Inject;
 import javax.jdo.PersistenceManagerFactory;
@@ -39,15 +39,16 @@ public abstract class TeardownFixtureAbstract extends FixtureScript {
 
         preDeleteFrom(cls);
 
-        final String column = discriminatorColumnOf(cls);
         final String value = discriminatorValueOf(cls);
 
-        if(column == null || value == null) {
+        if(value == null) {
 
             doDeleteFrom(cls);
 
         } else {
 
+            final String column = discriminatorColumnOf(cls);
+
             final String schema = schemaOf(cls);
             final String table = tableOf(cls);
 
diff --git a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClockInstantiationTest.java b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClockInstantiationTest.java
index f4913ad..c8f0d6a 100644
--- a/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClockInstantiationTest.java
+++ b/testing/fixtures/applib/src/test/java/org/apache/isis/testing/fixtures/applib/legacy/FixtureClockInstantiationTest.java
@@ -28,6 +28,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
 import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.testing.fixtures.applib.clock.FixtureClock;
 
 public class FixtureClockInstantiationTest {
 
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
index 1ca42e0..127e290 100644
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
+++ b/testing/integtestsupport/adoc/modules/integtestsupport/pages/about.adoc
@@ -2,22 +2,596 @@
 :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 [...]
 
 
-As discussed in the introductory overview of this chapter, Apache Isis allows you to integration test your domain objects from within JUnit.  There are several parts to this:
+Apache Isis builds on top of Spring Boot's integration testing support, in particular using link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html[@SpringBootTest].
+This configures and bootstraps the Apache Isis runtime, usually running against an in-memory database.
 
-* configuring the Apache Isis runtime so it can be bootstrapped (mostly boilerplate)
-* defining a base class to perform said bootstrapping
-* using fixture scripts to set up the app
-* using `WrapperFactory` so that the UI can be simulated.
+On top of that, we usually:
 
-We'll get to all that shortly, but let's start by taking a look at what a typical integration test looks like.
+* use xref:testing:fixtures:about.adoc[fixture scripts] to set up the app's initial state
+* use the xref:refguide:applib-svc:application-layer-api/WrapperFactory.adoc[WrapperFactory] to simulate the UI.
 
+To explain further, let's walk through of the xref:starters:simpleapp:about.adoc[SimpleApp] starter app.
 
 
+== Bootstrapping
 
+We typically put the bootstrapping of Apache Isis into a superclass, one for each Maven module.
+This allows an individual "slice" of the application to be tested, rather than as a monolith.
 
-include::typical-usage.adoc[leveloffset=+1]
-include::bootstrapping.adoc[leveloffset=+1]
-include::abstract-class.adoc[leveloffset=+1]
-include::configuration-properties.adoc[leveloffset=+1]
-include::wrapper-factory.adoc[leveloffset=+1]
-include::maven-configuration.adoc[leveloffset=+1]
+So, for the `module-simple` module, we have:
+
+[source,java]
+.SimpleModuleIntegTestAbstract.java
+----
+@SpringBootTest(
+        classes = SimpleModuleIntegTestAbstract.AppManifest.class
+)
+@TestPropertySource({
+        IsisPresets.H2InMemory_withUniqueSchema,
+        IsisPresets.DataNucleusAutoCreate,
+        IsisPresets.UseLog4j2Test,
+})
+public abstract class SimpleModuleIntegTestAbstract extends IsisIntegrationTestAbstractWithFixtures {
+
+    @Configuration
+    @Import({
+        IsisModuleCoreRuntimeServices.class,
+        IsisModuleSecurityBypass.class,
+        IsisModuleJdoDataNucleus5.class,
+        IsisModuleTestingFixturesApplib.class,
+        SimpleModule.class                      //<1>
+    })
+    public static class AppManifest {
+    }
+}
+----
+<1> references just the `SimpleModule`
+
+while in the `webapp` module we have:
+
+[source,java]
+.ApplicationIntegTestAbstract.java
+----
+@SpringBootTest(
+        classes = ApplicationIntegTestAbstract.AppManifest.class
+)
+@TestPropertySource({
+        IsisPresets.H2InMemory_withUniqueSchema,
+        IsisPresets.DataNucleusAutoCreate,
+        IsisPresets.UseLog4j2Test,
+})
+@ContextConfiguration
+public abstract class ApplicationIntegTestAbstract extends IsisIntegrationTestAbstract {
+
+    @Configuration
+    @Import({
+        IsisModuleCoreRuntimeServices.class,
+        IsisModuleJdoDataNucleus5.class,
+        IsisModuleSecurityBypass.class,
+        IsisModuleTestingFixturesApplib.class,
+        ApplicationModule.class                 //<1>
+    })
+    public static class AppManifest {
+    }
+}
+----
+<1> references the top-level `ApplicationModule`
+
+You can see that these are very similar, what's different is the module referenced.
+
+They both also force an in-memory database, with JDO/DataNucleus ORM configured to autocreate the database schema.
+
+=== Faster bootstrapping
+
+By default integration tests are run in "production" deployment mode.
+With the `isis.core.meta-model.introspector.mode=` set to its default value, this results in full introspection of the Apache Isis metamodel.
+
+While this _does_ have the benefit that the metamodel will be validated, the downside is that the test takes longer to bootstrap.
+
+To bootstrap lazily, set the property to 'lazy'.
+This can be done by adding:
+
+[source,java]
+----
+@TestPropertySource(IsisPresets.IntrospectLazily)
+----
+
+
+== Typical Usage
+
+Let's now drill down and look at `SimpleObject_IntegTest`, which (not surprisingly) is the integration test that exercises the `SimpleObject` class:
+
+[source,java]
+.SimpleObject_IntegTest.java
+----
+@Transactional                                                                  //<1>
+public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {     //<2>
+
+    SimpleObject simpleObject;
+
+    @BeforeEach                                                                 //<3>
+    public void setUp() {
+        // given
+        simpleObject = fixtureScripts.runPersona(SimpleObject_persona.FOO);     //<4>
+    }
+
+    //...
+}
+----
+<1> The Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html[@Transactional] annotation means that any changes made in the database will be rolled back automatically.
+There's further discussion xref:about.adoc#manual-teardown[below].
+<2> inherits from the module-level abstract class (which in turn will be annotated with `@SpringBootTest`, see xref:about.adoc#bootstrapping[bootstrapping] earlier).
+<3> uses JUnit 5
+<4> uses a xref:testing:fixtures:about.adoc[fixture script] to setup the database.
+The `FixtureScripts` domain service is inherited from the superclass.
+
+
+For example, let's test the `SimpleObject#name` property:
+
+[source,java]
+.SimpleObject.java
+----
+@DomainObject()
+public class SimpleObject
+    ...
+    @lombok.Getter @lombok.Setter
+    @Name private String name;
+    ...
+}
+----
+
+If we look at `application.yaml`, we see that:
+
+[source,yaml]
+.application.yaml
+----
+isis:
+  applib:
+    annotation:
+      domain-object:
+        editing: false
+----
+
+which means that this property is implicitly read-only.
+
+By convention, we group tests into nested static classes, so the corresponding integration test is:
+
+[source,java]
+.SimpleObject_IntegTest.java
+----
+public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
+    ...
+    public static class name extends SimpleObject_IntegTest {   //<1>
+
+        @Test
+        public void accessible() {
+            // when
+            final String name = wrap(simpleObject).getName();   //<2>
+
+            // then
+            assertThat(name).isEqualTo(simpleObject.getName()); //<3>
+        }
+
+        @Test
+        public void not_editable() {
+
+            // expect
+            assertThrows(DisabledException.class, ()->{         //<4>
+
+                // when
+                wrap(simpleObject).setName("new name");
+            });
+        }
+    }
+}
+----
+<1> inherit from `SimpleObject_IntegTest`
++
+CAUTION: JUnit 5's `@Nested` annotation doesn't work here.
+
+<2> we use the xref:about.adoc#wrapper-factory[WrapperFactory] to access the domain object.
++
+This will check that property (for access) is visible to the current user.
+
+<3> we use link:http://joel-costigliola.github.io/assertj[AssertJ] for assertions.
+<4> attempting to set the name on the property (through the wrapper) is disallowed.
+We detect this by catching a `DisabledException` (using JUnit 5's `assertThrows()`).
+
+The way that the simple app allows the name to be updated is through an `updateName` action:
+
+[source,java]
+.SimpleObject.java
+----
+@DomainObject()
+public class SimpleObject
+    ...
+    public static class UpdateNameActionDomainEvent extends SimpleObject.ActionDomainEvent {}
+    @Action(...
+            domainEvent = UpdateNameActionDomainEvent.class)                //<1>
+    public SimpleObject updateName(
+            @Name final String name) {                                      //<2>
+        setName(name);                                                      //<3>
+        return this;
+    }
+    public String default0UpdateName() {                                    //<4>
+        return getName();
+    }
+    ...
+}
+----
+<1> an event will be emitted whenever the action is interacted with
+<2> (the `@Name` annotation is discussed later)
+<3> the business functionality to be tested.
+<4> (we normally test default methods using unit tests).
+
+The corresponding integration test is:
+
+[source,java]
+.SimpleObject_IntegTest.java
+----
+public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
+    ...
+    public static class updateName extends SimpleObject_IntegTest {
+
+        @DomainService                                                      // <1>
+        public static class UpdateNameListener {
+
+            @Getter
+            List<SimpleObject.UpdateNameActionDomainEvent> events = new ArrayList<>();
+
+            @EventListener(SimpleObject.UpdateNameActionDomainEvent.class)
+            public void on(SimpleObject.UpdateNameActionDomainEvent ev) {
+                events.add(ev);
+            }
+        }
+
+        @Inject
+        UpdateNameListener updateNameListener;
+
+        @Test
+        public void can_be_updated_directly() {
+
+            // given
+            updateNameListener.getEvents().clear();
+
+            // when
+            wrap(simpleObject).updateName("new name");                      //<2>
+            transactionService.flushTransaction();
+
+            // then
+            assertThat(wrap(simpleObject).getName()).isEqualTo("new name"); //<3>
+            assertThat(updateNameListener.getEvents()).hasSize(5);          //<4>
+        }
+    }
+----
+<1> defines a domain service to detect the domain events emitted when interacting with the action (through the wrapper).
++
+This domain service is not part of the production code base, but is detected automatically thanks to `@ComponentScan` on the `SimpleModule`.
+
+<2> interact with the action through the wrapper
+<3> verify the object was updated correctly
+<4> verify that the domain events were emitted.
++
+Since this was a successful interaction, there will have been 5 events, one for each of the event phases (hide, disable, validate, executing, executed)
+
+
+As was pointed out earlier, the `name` parameter to `updateName()` has the `@Name` meta-annotation.
+This meta-annotation also defines some business rules, through `@Property` and `@Parameter`:
+
+[source,java]
+.Name.java
+----
+@Property(mustSatisfy = Name.NoExclamationMarks.class, maxLength = Name.MAX_LEN)
+@Parameter(mustSatisfy = Name.NoExclamationMarks.class, maxLength = Name.MAX_LEN)
+@ParameterLayout(named = "Name")
+...
+public @interface Name {
+
+    int MAX_LEN = 40;
+
+    class NoExclamationMarks extends AbstractSpecification2<String> {
+
+        @Override
+        public TranslatableString satisfiesTranslatableSafely(final String name) {
+            return name != null && name.contains("!")
+                    ? TranslatableString.tr("Exclamation mark is not allowed")
+                            : null;
+        }
+    }
+}
+----
+
+We test this by checking the wrapper throws an `InvalidException`:
+
+[source,java]
+.SimpleObject_IntegTest.java
+----
+public class SimpleObject_IntegTest extends SimpleModuleIntegTestAbstract {
+    ...
+    public static class updateName extends SimpleObject_IntegTest {
+        ...
+        @Test
+        public void failsValidation() {
+
+            // expect
+            InvalidException cause = assertThrows(InvalidException.class, ()->{
+
+                // when
+                wrap(simpleObject).updateName("new name!");
+            });
+
+            // then
+            assertThat(cause.getMessage(), containsString("Exclamation mark is not allowed."));
+        }
+    }
+----
+
+Some of the methods being called here are inherited from the superclass, so let's look at that next.
+
+
+== IsisIntegrationTestAbstract
+
+For convenience the framework provides the `IsisIntegrationTestAbstract` as a base class for integration tests.
+
+
+This is the class that provides the `wrap(...)` method (as see in the xref:about.adoc#typical-usage[previous section]).
+It also provides a number of other convenience methods:
+
+* `wrap()` - as just mentioned.
+Also has an alias of `w()`.
+
+* `unwrap()` - to unwrap.
+
+* `mixin()` - to instantiate a mixin around a domain object.
+Also has an alias of `m()`.
+
+* `wrapMixin()` - which naturally enough ``wrap()``s the result of a ``mixin()``.
+This has an alias of `wm()`.
+
+This class also provides a number of injected domain services:
+
+* xref:refguide:applib-svc:persistence-layer-api/RepositoryService.adoc[`RepositoryService`]
++
+to query and persist objects through a generic repository
+
+* xref:refguide:applib-svc:core-domain-api/FactoryService.adoc[`FactoryService`]
++
+for instantiating domain objects and mixins
+
+* xref:refguide:applib-svc:core-domain-api/UserService.adoc[`UserService`]
++
+to acces the current user
+
+* xref:refguide:applib-svc:metadata-api/ServiceRegistry.adoc[`ServiceRegistry`]
++
+to access domain services
+
+* xref:refguide:applib-svc:metadata-api/MetamodelService.adoc[`MetaModelService`]
++
+to access the metamodel.
+
+* xref:refguide:applib-svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`]
++
+to simulate interactions through the UI.
+This is discussed further xref:about.adoc#wrapper-factory[below].
+
+* xref:refguide:applib-svc:application-layer-api/TransactionService.adoc[`TransactionService`]
++
+for more control over transactions
+
+* xref:refguide:applib-svc:application-layer-api/SessionManagementService.adoc[`SessionManagementService`]
++
+for tests that check interactions over multiple separate sessions
+
+
+The class also defines (as a nested static class) the `CommandSupport` as a domain service.
+If ``@Import``ed into the integration test's "app manifest", this ensures that any ``Command``s that are raised as the result of interactions through the wrapper factory are setup correctly.
+
+
+== Wrapper Factory
+
+The xref:refguide:applib-svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`] service is responsible for wrapping a domain object in a dynamic proxy, of the same type as the object being proxied.
+The role of this wrapper is to simulate the UI.
+
+It does this by allowing through method invocations that would be allowed if the user were interacting with the domain object through one of the viewers, but throwing an exception if the user attempts to interact with the domain object in a way that would not be possible if using the UI.
+The `WrapperFactory` uses link:https://bytebuddy.net/[ByteBuddy] to perform its magic.
+
+The mechanics are as follows:
+
+. the integration test calls the `WrapperFactory` to obtain a wrapper for the domain object under test.
+This is usually done in the test's `setUp()` method.
+
+. the test calls the methods on the wrapper rather than the domain object itself
+
+. the wrapper performs a reverse lookup from the method invoked (a regular `java.lang.reflect.Method` instance) into the Apache Isis metamodel
+
+. (like a viewer), the wrapper then performs the "see it/use it/do it" checks, checking that the member is visible, that it is enabled and (if there are arguments) that the arguments are valid
+
+. if the business rule checks pass, then the underlying member is invoked.
+Otherwise an exception is thrown.
+
+The type of exception depends upon what sort of check failed.
+It's straightforward enough: if the member is invisible then a `HiddenException` is thrown; if it's not usable then you'll get a `DisabledException`, if the args are not valid then catch an `InvalidException`.
+
+image::wrapper-factory.png[width="600px",link="{imagesdir}/wrapper-factory.png"]
+
+
+
+=== Wrapping and Unwrapping
+
+Wrapping a domain object is very straightforward; simply call `WrapperFactory#wrap(...)`.
+
+For example:
+
+[source,java]
+----
+Customer customer = ...;
+Customer wrappedCustomer = wrapperFactory.wrap(wrappedCustomer);
+----
+
+
+Going the other way -- getting hold of the underlying (wrapped) domain object -- is just as easy; just call `WrapperFactory#unwrap(...)`.
+
+For example:
+
+[source,java]
+----
+Customer wrappedCustomer = ...;
+Customer customer = wrapperFactory.unwrap(wrappedCustomer);
+----
+
+If you prefer, you also can get the underlying object from the wrapper itself, by downcasting to `WrappingObject` and calling `__isis_wrapped()` method:
+
+[source,java]
+----
+Customer wrappedCustomer = ...;
+Customer customer = (Customer)((WrappingObject)wrappedCustomer).__isis_wrapped());
+----
+
+We're not sure that's any easier (in fact we're certain it looks rather obscure).  Stick with calling `unwrap(...)`!
+
+
+
+
+=== Using the wrapper
+
+As the wrapper is intended to simulate the UI, only those methods that correspond to the "primary" methods of the domain object's members are allowed to be called.
+That means:
+
+* for *_object properties_* the test can call the getter or setter method
+
+* for *_object collections_* the test can call the getter to access the contents.
++
+WARNING: For this to work properly, the collection should be marked as read-only, generally globally using the `isis.applib.annotation.domain-object.editing` configuration property.
+
+* for *_object actions_* the test can call the action method itself.
+
+As a convenience, we also allow the test to call any `default...()`,`choices...()` or `autoComplete...()` method.
+These are often useful for obtaining a valid value to use.
+
+What the test can't call is any of the remaining supporting methods, such as `hide...()`, `disable...()` or `validate...()`.
+That's because their value is implied by the exception being thrown.
+
+The wrapper _does_ also allow the object's `title()` method or its  `toString()` , however this is little use for objects whose title is built up using the `@Title` annotation.
+Instead, we recommend that your test verifies an object's title by calling `TitleService#titleOf(...)` method.
+
+
+
+
+=== Firing Domain Events
+
+As well as enforcing business rules, the wrapper has another important feature, namely that it will cause domain events to be fired.
+
+The walk through of xref:about.adoc#typical-usage[SimpleApp] above showed how this works.
+
+
+
+== Manual Teardown
+
+The Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html[@Transactional] annotation means that any changes made in the database will be rolled back automatically.
+Normally this is what we want.
+For more on this topic, see the link:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-tx-enabling-transactions[Spring docs].
+
+Sometimes you may want to commit to the database to verify state, eg using Spring's link:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-testing-annotation-commit[@Commit] annotation.
+In these cases, you'll need to manually tear down the database contents afterwards, in readiness for the next test.
+
+This can be done using the xref:testing:fixtures:about.adoc[fixture] library's `ModuleWithFixtures` interface:
+
+[source,java]
+.ModuleWithFixtures.java
+----
+public interface ModuleWithFixtures {
+    default FixtureScript getRefDataSetupFixture() {        //<1>
+        return FixtureScript.NOOP;
+    }
+    default FixtureScript getTeardownFixture() {            //<2>
+        return FixtureScript.NOOP;
+    }
+}
+----
+<1> Optionally each module can define a `FixtureScript` which holds immutable "reference data".
+
+<2> Optionally each module can define a tear-down `FixtureScript`, used to remove the contents of all of the operational/transactional entities (but ignoring reference data fixtures).
+
+This should be implemented by module classes, eg as is the case for `SimpleModule`.
+
+[source,java]
+.SimpleModule.java
+----
+@Configuration
+@Import({})
+@ComponentScan
+public class SimpleModule implements ModuleWithFixtures {
+
+    @Override
+    public FixtureScript getTeardownFixture() {
+        return new TeardownFixtureAbstract() {
+            @Override
+            protected void execute(ExecutionContext executionContext) {
+                deleteFrom(SimpleObject.class);
+            }
+        };
+    }
+    ...
+}
+----
+
+The `ModuleWithFixturesService` aggregates all these setup and teardown fixtures, honouring the module dependencies:
+
+[source,java]
+.ModuleWithFixtures.java
+----
+@Service
+public class ModuleWithFixturesService {
+    ...
+    public FixtureScript getRefDataSetupFixture() { ... }
+    public FixtureScript getTeardownFixture() { ... }
+    ...
+}
+----
+
+Thus, the setup fixture runs the setup for the "inner-most" "leaf-level" modules with no dependencies first, whereas the teardown fixture runs in the opposite order, with the "outer-most" "top-level" modules torn down first.
+
+
+
+
+
+
+== Maven Configuration
+
+Apache Isis' integ test support is most easily configured through a dependency on the `isis-mavendeps-testing` module:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.mavendeps</groupId>
+    <artifactId>isis-mavendeps-testing</artifactId>
+    <scope>test</scope>                             <!--1-->
+    <type>pom</type>
+</dependency>
+----
+<1> Normally `test`; usual Maven scoping rules apply.
+
+There is no need to specify the version if you inherit from from the xref:starters:parent-pom:about.adoc[starter app parent POM], then
+
+This will set up unit testing, integration testing and BDD specs support .
+
+include::starters:parent-pom:partial$surefire-configuration-caution.adoc[]
+
+If you just want to set up integration testing support, then use:
+
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.core</groupId>
+    <artifactId>isis-core-integtestsupport</artifactId>
+    <scope>test</scope>
+</dependency>
+----
+
+== Hints-n-Tips
+
+=== Using JDO/DataNucleus
+
+When running integration tests through the IDE, if using the JDO/DataNucleus ORM, then make sure the module(s) with entities have been enhanced first.
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/abstract-class.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/abstract-class.adoc
deleted file mode 100644
index b26e465..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/abstract-class.adoc
+++ /dev/null
@@ -1,81 +0,0 @@
-[[abstract-class]]
-= Abstract class
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-
-
-When writing integration tests, it's easiest to inherit from the `IntegrationTestAbstract3` base class.
-
-This base class xref:testing:integtestsupport:about.adoc#bootstrapping[bootstraps] the framework (caching the framework on a thread-local), and provides various utility methods and framework-provided services for use by your application's subclass tests.
-
-
-
-== `IntegrationTestAbstract3`
-
-We recommend that your integration tests inherit from Apache Isis' `IntegrationTestAbstract3` class.
-The primary benefit over its predecessor, `IntegrationTestAbstract2` (discussed xref:testing:integtestsupport:about.adoc#IntegrationTestAbstract2[below] is that it allows the test to be bootstrapped by passing in a `Module` rather than an `AppManifest`.
-
-For example:
-
-[source,java]
-----
-public abstract class DomainAppIntegTest
-                        extends IntegrationTestAbstract3 {
-
-    public DomainAppIntegTestAbstract() {
-        super(new DomainAppApplicationModule());
-    }
-}
-----
-
-WARNING: TODO: v2 - out of date, we no longer support `isis.integTest.module` system property.
-
-The `IntegrationTestAbstract3` class also allows the module to be specified externally, using either the `isis.integTest.module` or the (more general) `isis.headless.module` system property, eg by updating the `pom.xml`.
-
-For example:
-
-WARNING: TODO: v2 - out of date, we no longer support `isis.integTest.module` system property.
-
-[source,xml]
-----
-<properties>
-    <isis.integTest.module>
-        org.estatio.module.application.EstatioApplicationModule
-    </isis.integTest.module>
-</properties>
-----
-
-This is required when the codebase is organised as multiple "logical" modules within a single Maven "physical" module (ie `src/main/java` compilation unit).
-The integration testing framework will bootstrap the module specified by the system property and cache for all tests discovered within the physical module.
-
-
-
-This test class provides a number of helper/convenience methods and JUnit rules:
-
-[source,java]
-----
-@Rule
-public IsisTransactionRule isisTransactionRule =                         // <1>
-    new IsisTransactionRule();
-@Rule
-public JUnitRuleMockery2 context =                                       // <2>
-    JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-@Rule
-public ExpectedException expectedExceptions =                            // <3>
-    ExpectedException.none();
-@Rule
-public ExceptionRecognizerTranslate exceptionRecognizerTranslations =    // <4>
-    ExceptionRecognizerTranslate.create();
-----
-<1> ensures an Apache Isis session/transaction running for each test
-<2> sets up a JMock context (using Apache Isis' extension to JMock as described in xref:testing:unittestsupport:about.adoc#jmock-extensions[JMock Extensions].
-<3> standard JUnit rule for writing tests that throw exceptions
-<4> to capture messages that require translation, as described in xref:userguide:btb:i18n.adoc[i18 support].
-
-All of these rules could be inlined in your own base class; as we say, they are a convenience.
-
-The class also provides a number of injected domain services,  notably
-xref:refguide:applib-svc:persistence-layer-api/RepositoryService.adoc[`RepositoryService`], xref:refguide:applib-svc:core-domain-api/FactoryService.adoc[`FactoryService`], xref:refguide:applib-svc:metadata-api/ServiceRegistry.adoc[`ServiceRegistry2`], xref:refguide:applib-svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`] (to wrap objects simulating interaction through the user interface), xref:refguide:applib-svc:application-layer-api/TransactionService.adoc[`TransactionSer [...]
-
-
-
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/bootstrapping.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/bootstrapping.adoc
deleted file mode 100644
index b895c5f..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/bootstrapping.adoc
+++ /dev/null
@@ -1,46 +0,0 @@
-[[bootstrapping]]
-= Bootstrapping
-: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 [...]
-
-
-Integration tests instantiate an Apache Isis "runtime" (as a singleton) within a JUnit test.
-Because (depending on the size of your app) it takes a little time to bootstrap Apache Isis, the framework caches the runtime on a thread-local from one test to the next.
-
-
-The recommended way to bootstrapping of integration tests is done using a xref:refguide:applib-cm:classes/AppManifest2-bootstrapping.adoc[`Module`] implementation, along with the `IntegrationTestAbstract3` superclass.
-
-For example, the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype]'s integration tests all inherit from this class:
-
-[source,java]
-----
-public abstract class DomainAppIntegTestAbstract extends IntegrationTestAbstract3 {
-
-    public DomainAppIntegTestAbstract() {
-        super(new DomainAppApplicationModule());
-    }
-}
-----
-
-where `DomainAppApplicationModule` in turn declares all the dependencies that make up the application.
-
-If required, the `Module` can be customised first using the various `withXxx(...)` methods to specify addition modules, domain services and configuration properties.
-
-
-== Faster Bootstrapping
-
-The `IntegrationTestAbstract3` superclass also allows the introspection mode to be specified, which can reduce the time to bootstrap the test.
-
-By default integration tests are run in "production" deployment mode, so with the `isis.reflector.introspection.mode` set to its default of "lazy_unless_production" this will actually result in full introspection of the Apache Isis metamodel.
-The _does_ have the benefit that the metamodel will be validated, but - as mentioned - with the corresponding downside of taking longer to bootstrap.
-
-To bootstrap lazily, override as follows:
-
-[source,java]
-----
-public abstract class DomainAppIntegTestAbstract extends IntegrationTestAbstract3 {
-
-    public DomainAppIntegTestAbstract() {
-        super(new DomainAppApplicationModule(), IntrospectionMode.LAZY);
-    }
-}
-----
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/configuration-properties.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/configuration-properties.adoc
deleted file mode 100644
index bccac85..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/configuration-properties.adoc
+++ /dev/null
@@ -1,90 +0,0 @@
-[[configuration-properties]]
-= Configuration Properties
-: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 recommended way to run integration tests is against an HSQLDB in-memory database.
-This can be done using the application's usual xref:refguide:applib-cm:classes/AppManifest-bootstrapping.adoc[`AppManifest`], and then overriding JDBC URL and similar.
-
-If inheriting from `IntegrationTestAbstract3`'s then these configuration properties are set up automatically:
-
-
-.Default Configuration Properties for Integration Tests
-[cols="2a,1,3a", options="header"]
-|===
-|Property
-|Value
-|Description
-
-|`isis.persistor.datanucleus.impl.` +
-`javax.jdo.option.ConnectionURL`
-|jdbc:hsqldb:mem:test
-|JDBC URL
-
-|`isis.persistor.datanucleus.impl.` +
-`javax.jdo.option.ConnectionDriverName`
-|org.hsqldb.jdbcDriver
-|JDBC Driver
-
-|`isis.persistor.datanucleus.impl.` +
-`javax.jdo.option.ConnectionUserName`
-|sa
-|Username
-
-|`isis.persistor.datanucleus.impl.` +
-`javax.jdo.option.ConnectionPassword`
-|<empty string>
-|Password, possibly encrypted (see `datanucleus.ConnectionPasswordEncrypter`, below).
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.ConnectionPasswordEncrypter`
-|<empty string>
-|Specify the `datanucleus.ConnectionPasswordDecrypter` implementation used to decrypt the password.
-
-See the link:http://www.datanucleus.org/products/accessplatform_4_1/persistence_properties.html#ConnectionPasswordDecrypter[DataNucleus documentation] for further details.
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.schema.autoCreateAll`
-|true
-|Recreate DB for each test run (an in-memory database)
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.schema.validateAll`
-|false
-|Disable validations (minimize bootstrap time)
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.persistenceByReachabilityAtCommit`
-|false
-|As per WEB-INF/persistor_datanucleus.properties
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.identifier.case`
-|MixedCase
-|As per WEB-INF/persistor_datanucleus.properties
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.cache.level2.type`
-|none
-|As per WEB-INF/persistor_datanucleus.properties
-
-|`isis.persistor.datanucleus.impl.` +
-`datanucleus.cache.level2.mode`
-|ENABLE_SELECTIVE
-|As per WEB-INF/persistor_datanucleus.properties
-
-|`isis.persistor.datanucleus.` +
-`install-fixtures`
-|true
-|Automatically install any fixtures that might have been registered
-
-|`isis.persistor.` +
-`enforceSafeSemantics`
-|false
-|
-
-|`isis.deploymentType`
-|server_prototype
-|
-|===
-
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/maven-configuration.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/maven-configuration.adoc
deleted file mode 100644
index 41a2be4..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/maven-configuration.adoc
+++ /dev/null
@@ -1,55 +0,0 @@
-[[maven-configuration]]
-= Maven Configuration
-: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 [...]
-
-
-Apache Isis' integration test support is automatically configured if you use the link:https://github.com/apache/isis-app-simpleapp[SimpleApp starter app].
-To set it up manually, update the `pom.xml` of your domain object model module:
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.isis.core</groupId>
-    <artifactId>isis-core-integtestsupport</artifactId>
-</dependency>
-<dependency>
-    <groupId>org.apache.isis.core</groupId>
-    <artifactId>isis-core-wrapper</artifactId>
-</dependency>
-----
-
-[NOTE]
-====
-This can also be done by adding a dependency to `org.apache.isis.mavendeps:isis-mavendeps-testing` module; see the link:https://github.com/apache/isis-app-simpleapp[SimpleApp starter app].
-====
-
-We also recommend that you configure the `maven-surefire-plugin` to pick up the following class patterns:
-
-[source,xml]
-----
-<plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-surefire-plugin</artifactId>
-    <version>2.10</version>
-    <configuration>
-        <includes>
-            <include>**/*Test.java</include>
-            <include>**/*Test_*.java</include>
-            <include>**/*Spec*.java</include>
-        </includes>
-        <excludes>
-            <exclude>**/Test*.java</exclude>
-            <exclude>**/*ForTesting.java</exclude>
-            <exclude>**/*Abstract*.java</exclude>
-        </excludes>
-        <useFile>true</useFile>
-        <printSummary>true</printSummary>
-        <outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
-    </configuration>
-</plugin>
-----
-
-[NOTE]
-====
-This can also be done using mavenmixins; see the link:https://github.com/apache/isis-app-simpleapp[SimpleApp starter app].
-====
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/typical-usage.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/typical-usage.adoc
deleted file mode 100644
index e6bc5f7..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/typical-usage.adoc
+++ /dev/null
@@ -1,124 +0,0 @@
-[[typical-usage]]
-= Typical Usage
-: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 example adapted from the link:http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp] (non-ASF).  The code we want to test (simplified) is:
-
-[source,java]
-----
-public class ToDoItem ... {
-
-    private boolean complete;
-    @Property( editing = Editing.DISABLED )
-    public boolean isComplete() {
-        return complete;
-    }
-    public void setComplete(final boolean complete) {
-        this.complete = complete;
-    }
-
-    @Action()
-    public ToDoItem completed() {
-        setComplete(true);
-        ...
-        return this;
-    }
-    public String disableCompleted() {
-        return isComplete() ? "Already completed" : null;
-    }
-    ...
-}
-----
-
-We typically put the bootstrapping of Apache Isis into a superclass (`AbstractToDoIntegTest` below), then subclass as required.
-
-For this test (of the "completed()" action) we need an instance of a `ToDoItem` that is not yet complete.  Here's the setup:
-
-[source,java]
-----
-public class ToDoItemIntegTest extends AbstractToDoIntegTest {
-
-    @Inject
-    FixtureScripts fixtureScripts;                              // <1>
-    @Inject
-    ToDoItems toDoItems;                                        // <2>
-    ToDoItem toDoItem;                                          // <3>
-
-    @Before
-    public void setUp() throws Exception {
-        RecreateToDoItemsForCurrentUser fixtureScript =         // <4>
-            new RecreateToDoItemsForCurrentUser();
-        fixtureScripts.runFixtureScript(fixtureScript, null);
-        final List<ToDoItem> all = toDoItems.notYetComplete();  // <5>
-        toDoItem = wrap(all.get(0));                            // <6>
-    }
-    ...
-}
-----
-<1> the xref:refguide:applib-cm:classes/super.adoc#FixtureScripts[`FixtureScripts`] domain service is injected, providing us with the ability to run fixture scripts
-<2> likewise, an instance of the `ToDoItems` domain service is injected.  We'll use this to lookup...
-<3> the object under test, held as a field
-<4> the fixture script for this test; it deletes all existing todo items (for the current user only) and then recreates them
-<5> we lookup one of the just-created todo items...
-<6> and then wrap it so that our interactions with it are as if through the UI
-
-
-
-The following code tests the happy case, that a not-yet-completed `ToDoItem` can be completed by invoking the `completed()` action:
-
-[source,java]
-----
-public class ToDoItemIntegTest ... {
-    ...
-    public static class Completed extends ToDoItemIntegTest { // <1>
-        @Test
-        public void happyCase() throws Exception {
-            // given
-            assertThat(toDoItem.isComplete()).isFalse();      // <2>
-            // when
-            toDoItem.completed();
-            // then
-            assertThat(toDoItem.isComplete()).isTrue();
-        }
-        ...
-    }
-}
-----
-<1> the idiom we follow is to use nested static classes to identify the class responsibility being tested
-<2> the http://github.com/isisaddons/isis-app-todoapp[todoapp] uses link:http://joel-costigliola.github.io/assertj[AssertJ].
-
-What about when a todo item is already completed?  The `disableCompleted()` method in the class says that it shouldn't be allowed (the action would be greyed out in the UI with an appropriate tooltip).  The following test verifies this:
-
-[source,java]
-----
-        @Test
-        public void cannotCompleteIfAlreadyCompleted() throws Exception {
-            // given
-            unwrap(toDoItem).setComplete(true);                     // <1>
-            // expect
-            expectedExceptions.expectMessage("Already completed");  // <2>
-            // when
-            toDoItem.completed();
-        }
-----
-<1> we unwrap the domain object in order to set its state directly
-<2> the expectedExceptions link:http://junit.org/junit4/javadoc/latest/org/junit/rules/ExpectedException.html[JUnit rule] (defined by a superclass) verifies that the appropiate exception is indeed thrown (in the "when")
-
-
-And what about the fact that the underlying "complete" property is annotated as being disabled?
-If the `ToDoItem` is put into edit mode in the UI, the complete checkbox should remain read-only.
-Here's a verify similar test that verifies this also:
-
-[source,java]
-----
-        @Test
-        public void cannotSetPropertyDirectly() throws Exception {
-            // expect
-            expectedExceptions.expectMessage("Always disabled");  // <1>
-            // when
-            toDoItem.setComplete(true);
-        }
-----
-<1> again we use the exceptedExceptions rule.
-
diff --git a/testing/integtestsupport/adoc/modules/integtestsupport/pages/wrapper-factory.adoc b/testing/integtestsupport/adoc/modules/integtestsupport/pages/wrapper-factory.adoc
deleted file mode 100644
index 514d48f..0000000
--- a/testing/integtestsupport/adoc/modules/integtestsupport/pages/wrapper-factory.adoc
+++ /dev/null
@@ -1,172 +0,0 @@
-[[wrapper-factory]]
-= Wrapper Factory
-: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:refguide:applib-svc:application-layer-api/WrapperFactory.adoc[`WrapperFactory`] service is responsible for wrapping a domain object in a dynamic proxy, of the same type as the object being proxied.
-And the role of this wrapper is to simulate the UI.
-
-[NOTE]
-====
-`WrapperFactory` uses link:http://www.javassist.org[javassist] to perform its magic; this is the same technology that ORMs such as link:http://hibernate.org/[Hibernate] use to manage lazy loading/dirty tracking (DataNucleus uses a different mechanism).
-====
-
-
-
-It does this by allowing through method invocations that would be allowed if the user were interacting with the domain object through one of the viewers, but throwing an exception if the user attempts to interact with the domain object in a way that would not be possible if using the UI.
-
-The mechanics are as follows:
-
-. the integration test calls the `WrapperFactory` to obtain a wrapper for the domain object under test.
-This is usually done in the test's `setUp()` method.
-
-. the test calls the methods on the wrapper rather than the domain object itself
-
-. the wrapper performs a reverse lookup from the method invoked (a regular `java.lang.reflect.Method` instance) into the Apache Isis metamodel
-
-. (like a viewer), the wrapper then performs the "see it/use it/do it" checks, checking that the member is visible, that it is enabled and (if there are arguments) that the arguments are valid
-
-. if the business rule checks pass, then the underlying member is invoked.
-Otherwise an exception is thrown.
-
-The type of exception depends upon what sort of check failed.
-It's straightforward enough: if the member is invisible then a `HiddenException` is thrown; if it's not usable then you'll get a `DisabledException`, if the args are not valid then catch an `InvalidException`.
-
-image::wrapper-factory.png[width="600px",link="{imagesdir}/wrapper-factory.png"]
-
-Let's look in a bit more detail at what the test can do with the wrapper.
-
-
-
-
-
-== Wrapping and Unwrapping
-
-Wrapping a domain object is very straightforward; simply call `WrapperFactory#wrap(...)`.
-
-For example:
-
-[source,java]
-----
-Customer customer = ...;
-Customer wrappedCustomer = wrapperFactory.wrap(wrappedCustomer);
-----
-
-
-Going the other way -- getting hold of the underlying (wrapped) domain object -- is just as easy; just call `WrapperFactory#unwrap(...)`.
-
-For example:
-
-[source,java]
-----
-Customer wrappedCustomer = ...;
-Customer customer = wrapperFactory.unwrap(wrappedCustomer);
-----
-
-If you prefer, you also can get the underlying object from the wrapper itself, by downcasting to `WrappingObject` and calling `__isis_wrapped()` method:
-
-[source,java]
-----
-Customer wrappedCustomer = ...;
-Customer customer = (Customer)((WrappingObject)wrappedCustomer).__isis_wrapped());
-----
-
-We're not sure that's any easier (in fact we're certain it looks rather obscure).  Stick with calling `unwrap(...)`!
-
-
-
-
-== Using the wrapper
-
-As the wrapper is intended to simulate the UI, only those methods that correspond to the "primary" methods of the domain object's members are allowed to be called.
-That means:
-
-* for *_object properties_* the test can call the getter or setter method
-
-* for *_object collections_* the test can call the getter.
-+
-If there is a supporting `addTo...()` or `removeFrom...()` method, then these can be called.
-It can also call `add(...)` or `remove(...)` on the collection (returned by the gettter) itself.
-+
-[NOTE]
-====
-In this respect the wrapper is more functional than the xref:vw:ROOT:about.adoc[Wicket viewer] (which does not expose the ability to mutate collections directly).
-====
-
-* for *_object actions_* the test can call the action method itself.
-
-As a convenience, we also allow the test to call any `default...()`,`choices...()` or `autoComplete...()` method.
-These are often useful for obtaining a valid value to use.
-
-What the test can't call is any of the remaining supporting methods, such as `hide...()`, `disable...()` or `validate...()`.
-That's because their value is implied by the exception being thrown.
-
-The wrapper _does_ also allow the object's `title()` method or its  `toString()` , however this is little use for objects whose title is built up using the `@Title` annotation.
-Instead, we recommend that your test verifies an object's title by calling `TitleService#titleOf(...)` method.
-
-
-
-
-
-== Firing Domain Events
-
-As well as enforcing business rules, the wrapper has another important feature, namely that it will cause domain events to be fired.
-
-For example, if we have an action annotated with `@Action(domainEvent=...`):
-
-[source,java]
-----
-public class ToDoItem ... {
-    @Action(
-            domainEvent =CompletedEvent.class
-    )
-    public ToDoItem completed() { /* ... */ }
-    ...
-}
-----
-
-then invoking the action through the proxy will cause the event (`CompletedEvent` above) to be fired to any subscribers.
-A test might therefore look like:
-
-[source,java]
-----
-public class SomeIntegratTest /* ... */ {
-    @Inject
-    private EventBusService eventBusService;                                       // <1>
-
-    @Test
-    public void subscriberReceivesEvents() {
-
-        // given
-        final ToDoItem.CompletedEvent[] evHolder = new ToDoItem.CompletedEvent[1]; // <2>
-        eventBusService.register(new Object() {
-            @org.springframework.context.event.EventListener(ToDoItem.CompletedEvent.class)
-            public void on(final ToDoItem.CompletedEvent ev) {                     // <3>
-                evHolder[0] = ev;
-            }
-        });
-
-        // when
-        toDoItem.completed();                                                      // <4>
-
-        // then
-        then(evHolder[0].getSource()).isEqualTo(unwrap(toDoItem));                 // <5>
-        then(evHolder[0].getIdentifier().getMemberName()).isEqualTo("completed");
-    }
-}
-----
-<1> inject xref:refguide:applib-svc:core-domain-api/EventBusService.adoc[`EventBusService`] into this test
-<2> holder for subscriber to capture event to
-<3> subscriber's callback, using Spring events
-<4> invoking the domain object using the wrapper
-<5> assert that the event was populated
-
-
-The wrapper will also fire domain events for properties (if annotated with `@Property(domainEvent=...)`) or collections (if annotated with `@Collection(domainEvent=...)`).
-
-
-[NOTE]
-====
-It isn't possible to use the `WrapperFactory` in a unit test, because there needs to be a running instance of Apache Isis that holds the metamodel.
-====
-
diff --git a/testing/specsupport/adoc/modules/specsupport/pages/about.adoc b/testing/specsupport/adoc/modules/specsupport/pages/about.adoc
index 3b0dd6b..578baca 100644
--- a/testing/specsupport/adoc/modules/specsupport/pages/about.adoc
+++ b/testing/specsupport/adoc/modules/specsupport/pages/about.adoc
@@ -10,7 +10,238 @@ There are many BDD tools out there; Apache Isis provides an integration with lin
 
 
 
+== How it works
 
-include::how-it-works.adoc[leveloffset=+1]
-include::writing-a-bdd-spec.adoc[leveloffset=+1]
-include::maven-configuration.adoc[leveloffset=+1]
+
+
+At a high level, here's how Cucumber works
+
+* specifications are written in the https://github.com/cucumber/cucumber/wiki/Gherkin[Gherkin] DSL, following the https://github.com/cucumber/cucumber/wiki/Given-When-Then["given/when/then"] format.
+
+* Cucumber-JVM itself is a JUnit runner, and searches for https://github.com/cucumber/cucumber/wiki/Feature-Introduction[feature files] on the classpath.
+
+* These in turn are matched to link:https://github.com/cucumber/cucumber/wiki/Step-Definitions[step definition]s through regular expressions. +
++
+It is the step definitions (the "glue") that exercise the system.
+
+The code that goes in step definitions is broadly the same as the code that goes in an integration test method.  One benefit of using step definitions (rather than integration tests) is that the step definitions are reusable across scenarios, so there may be less code overall to maintain.  For example, if you have a step definition that maps to "given an uncompleted todo item", then this can be used for all the scenarios that start with that as their precondition.
+
+
+
+== Writing a BDD spec
+
+
+
+
+BDD specifications contain:
+
+* a `XxxSpec.feature` file, describing the feature and the scenarios (given/when/then)s that constitute its acceptance criteria
+
+* a `RunSpecs.java` class file to run the specification (all boilerplate).
+This will run all `.feature` files in the same package or subpackages.
+
+* one or several `XxxGlue` constituting the step definitions to be matched against. +
++
+The "glue" (step definitions) are intended to be reused across features.
+We therefore recommend that they reside in a separate package, and are organized by the entity type upon which they act. +
++
+For example, given a feature that involves `Customer` and `Order`, have the step definitions pertaining to `Customer` reside in `CustomerGlue`, and the step definitions pertaining to `Order` reside in `OrderGlue`. +
++
+The `glue` attribute of the Cucumber-JVM JUnit runner allows you to indicate which package(s) should be recursively searched to find any glue.
+
++
+There also needs to be one glue class that is used to bootstrap the runtime.
+
+
+Here's an example of a feature from the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype]:
+
+[source,java]
+----
+@DomainAppDemo
+Feature: List and Create New Simple Objects
+
+  Scenario: Existing simple objects can be listed and new ones created
+    Given there are initially 10 simple objects
+    When  I create a new simple object
+    Then  there are 11 simple objects
+----
+
+The "@DomainAppDemo" is a custom tag we've specified to indicate the prerequisite fixtures to be loaded; more on this in a moment.
+
+[IMPORTANT]
+====
+BDD specs are assumed to run only as integration tests.
+====
+
+The `RunBddSpecs` class to run this feature (and any other features in this package or subpackages) is just boilerplate
+
+[source,java]
+----
+@RunWith(Cucumber.class)
+@CucumberOptions(
+        format = {
+                "html:target/cucumber-html-report"
+                ,"json:target/cucumber.json"
+        },
+        glue={
+                "classpath:domainapp.application.bdd.specglue",
+                "classpath:domainapp.modules.simple.specglue"
+        },
+        strict = true,
+        tags = { "~@backlog", "~@ignore" }
+)
+public class RunBddSpecs {
+    // intentionally empty
+}
+----
+
+The JSON formatter allows integration with enhanced reports.
+(Commented out) configuration for this is provided in the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype].
+
+The bootstrapping of Apache Isis itself lives in a `BootstrappingGlue` step definition:
+
+[source,java]
+----
+public class BootstrappingGlue
+                extends HeadlessWithBootstrappingAbstract { // <1>
+
+    public BootstrappingGlue() {
+        super(new DomainAppApplicationModule());            // <2>
+    }
+
+    @Before(order=100)                                      // <3>
+    public void beforeScenario() {
+        super.bootstrapAndSetupIfRequired();
+    }
+    @After
+    public void afterScenario(cucumber.api.Scenario sc) {
+        super.tearDownAllModules();
+    }
+}
+----
+<1> superclass contains much of the bootstrapping logic (and is also used by the integration testing framework)
+<2> the `Module` to use to bootstrap the application in headless mode.
+<3> remainder of the class is just boilerplate.
+
+[NOTE]
+====
+For BDD specs, the `CukeGlueBootstrappingAbstract` was previously provided (as a BDD counterpart to `IntegrationTestAbstract3`) to perform the relevant bootstrapping.
+_However_, it turns out that Cucumber does not allow subclassing of BDD specs.
+Therefore the bootstrapping boilerplate (that ideally would have been factored out into an abstract superclass) must be included within the BDD spec.
+====
+
+The fixture to run also lives in its own step definition, `CatalogOfFixturesGlue`:
+
+[source,java]
+----
+public class CatalogOfFixturesGlue extends CukeGlueAbstract2 {
+    @Before(value={"@DomainAppDemo"}, order=20000)
+    public void runDomainAppDemo() {
+        fixtureScripts.runFixtureScript(new DomainAppDemo(), null); // <1>
+    }
+}
+----
+<1> The `fixtureScripts` service is inherited from the superclass.
+
+This will only activate for feature files tagged with "@DomainAppDemo".
+
+Finally, the step definitions pertaining to `SimpleObject` domain entity then reside in the `SimpleObjectGlue` class.
+This is where the heavy lifting gets done:
+
+[source,java]
+----
+public class SimpleObjectMenuGlue extends CukeGlueAbstract2 {
+
+    @Given("^there are.* (\\d+) simple objects$")                           // <1>
+    public void there_are_N_simple_objects(int n) throws Throwable {
+        final List<SimpleObject> list = wrap(simpleObjectMenu).listAll();   // <2>
+        assertThat(list.size(), is(n));
+    }
+
+    @When("^.*create a .*simple object$")
+    public void create_a_simple_object() throws Throwable {
+        wrap(simpleObjectMenu).create(UUID.randomUUID().toString());
+    }
+
+    @Inject
+    SimpleObjectMenu simpleObjectMenu;                                      // <3>
+}
+----
+<1> regex to match to feature file specification
+<2> the inherited `wrap(...)` method delegates to `WrapperFactory#wrap(...)`
+<3> injected in the usual way
+
+[TIP]
+====
+The xref:refguide:applib-svc:core-domain-api/Scratchpad.adoc[`Scratchpad`] domain service is one way in which glue classes can pass state between each other.
+Or, for more type safety, you could develop your own custom domain services for each scenario, and inject these in as regular services.
+See link:http://www.thinkcode.se/blog/2017/04/01/sharing-state-between-steps-in-cucumberjvm-using-picocontainer[this blog] post for more details.
+====
+
+[TIP]
+====
+If using Java 8, note that Cucumber JVM supports a link:https://cucumber.io/docs/reference/jvm#java-8-lambdas[simplified syntax using lambdas].
+====
+
+
+
+== Maven Configuration
+
+Apache Isis' BDD spec support is most easily configured through a dependency on the `isis-mavendeps-testing` module:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.mavendeps</groupId>
+    <artifactId>isis-mavendeps-testing</artifactId>
+    <scope>test</scope>                             <!--1-->
+    <type>pom</type>
+</dependency>
+----
+<1> Normally `test`; usual Maven scoping rules apply.
+
+There is no need to specify the version if you inherit from from the xref:starters:parent-pom:about.adoc[starter app parent POM], then
+
+This will set up unit testing, integration testing and BDD specs support .
+
+include::starters:parent-pom:partial$surefire-configuration-caution.adoc[]
+
+If you just want to set up BDD spec support, then use:
+
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.isis.core</groupId>
+    <artifactId>isis-core-specsupport</artifactId>
+    <scope>test</scope>
+</dependency>
+----
+
+
+
+
+You may also find it more convenient to place the `.feature` files in `src/test/java`, rather than `src/test/resources`.
+If you wish to do this, then your integtest module's `pom.xml` must contain:
+
+[source,xml]
+----
+<build>
+    <testResources>
+        <testResource>
+            <filtering>false</filtering>
+            <directory>src/test/resources</directory>
+        </testResource>
+        <testResource>
+            <filtering>false</filtering>
+            <directory>src/test/java</directory>
+            <includes>
+                <include>**</include>
+            </includes>
+            <excludes>
+                <exclude>**/*.java</exclude>
+            </excludes>
+        </testResource>
+    </testResources>
+</build>
+----
diff --git a/testing/specsupport/adoc/modules/specsupport/pages/how-it-works.adoc b/testing/specsupport/adoc/modules/specsupport/pages/how-it-works.adoc
deleted file mode 100644
index ac32a88..0000000
--- a/testing/specsupport/adoc/modules/specsupport/pages/how-it-works.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-[[how-it-works]]
-= How it works
-: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 [...]
-
-
-
-At a high level, here's how Cucumber works
-
-* specifications are written in the https://github.com/cucumber/cucumber/wiki/Gherkin[Gherkin] DSL, following the https://github.com/cucumber/cucumber/wiki/Given-When-Then["given/when/then"] format.
-
-* Cucumber-JVM itself is a JUnit runner, and searches for https://github.com/cucumber/cucumber/wiki/Feature-Introduction[feature files] on the classpath.
-
-* These in turn are matched to link:https://github.com/cucumber/cucumber/wiki/Step-Definitions[step definition]s through regular expressions. +
-+
-It is the step definitions (the "glue") that exercise the system.
-
-The code that goes in step definitions is broadly the same as the code that goes in an integration test method.  One benefit of using step definitions (rather than integration tests) is that the step definitions are reusable across scenarios, so there may be less code overall to maintain.  For example, if you have a step definition that maps to "given an uncompleted todo item", then this can be used for all the scenarios that start with that as their precondition.
-
diff --git a/testing/specsupport/adoc/modules/specsupport/pages/maven-configuration.adoc b/testing/specsupport/adoc/modules/specsupport/pages/maven-configuration.adoc
deleted file mode 100644
index 9d27c19..0000000
--- a/testing/specsupport/adoc/modules/specsupport/pages/maven-configuration.adoc
+++ /dev/null
@@ -1,73 +0,0 @@
-[[maven-configuration]]
-= Maven Configuration
-: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 [...]
-
-
-
-
-Apache Isis' BDD spec support is automatically configured if you use the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype].
-To set it up manually, update the `pom.xml` of your domain object model module:
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.isis.core</groupId>
-    <artifactId>isis-core-specsupport</artifactId>
-    <scope>test</scope> // <1>
-</dependency>
-----
-<1> Normally `test`; usual Maven scoping rules apply.
-
-
-The configuration is wrapped up as maven mixins:
-
-[source,xml]
-----
-<plugins>
-    <plugin>
-        <groupId>com.github.odavid.maven.plugins</groupId>
-        <artifactId>mixin-maven-plugin</artifactId>
-        <version>0.1-alpha-39</version>
-        <extensions>true</extensions>
-        <configuration>
-            <mixins>
-                ...
-                <mixin>
-                    <groupId>com.danhaywood.mavenmixin</groupId>
-                    <artifactId>surefire</artifactId>
-                </mixin>
-                <mixin>
-                    <groupId>com.danhaywood.mavenmixin</groupId>
-                    <artifactId>cucumberreporting</artifactId>
-                </mixin>
-            </mixins>
-        </configuration>
-    </plugin>
-</plugins>
-
-----
-
-You may also find it more convenient to place the `.feature` files in `src/test/java`, rather than `src/test/resources`.
-If you wish to do this, then your integtest module's `pom.xml` must contain:
-
-[source,xml]
-----
-<build>
-    <testResources>
-        <testResource>
-            <filtering>false</filtering>
-            <directory>src/test/resources</directory>
-        </testResource>
-        <testResource>
-            <filtering>false</filtering>
-            <directory>src/test/java</directory>
-            <includes>
-                <include>**</include>
-            </includes>
-            <excludes>
-                <exclude>**/*.java</exclude>
-            </excludes>
-        </testResource>
-    </testResources>
-</build>
-----
diff --git a/testing/specsupport/adoc/modules/specsupport/pages/writing-a-bdd-spec.adoc b/testing/specsupport/adoc/modules/specsupport/pages/writing-a-bdd-spec.adoc
deleted file mode 100644
index a61eed6..0000000
--- a/testing/specsupport/adoc/modules/specsupport/pages/writing-a-bdd-spec.adoc
+++ /dev/null
@@ -1,157 +0,0 @@
-[[writing-a-bdd-spec]]
-= Writing a BDD spec
-: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 [...]
-
-
-
-
-BDD specifications contain:
-
-* a `XxxSpec.feature` file, describing the feature and the scenarios (given/when/then)s that constitute its acceptance criteria
-
-* a `RunSpecs.java` class file to run the specification (all boilerplate).
-This will run all `.feature` files in the same package or subpackages.
-
-* one or several `XxxGlue` constituting the step definitions to be matched against. +
-+
-The "glue" (step definitions) are intended to be reused across features.
-We therefore recommend that they reside in a separate package, and are organized by the entity type upon which they act. +
-+
-For example, given a feature that involves `Customer` and `Order`, have the step definitions pertaining to `Customer` reside in `CustomerGlue`, and the step definitions pertaining to `Order` reside in `OrderGlue`. +
-+
-The `glue` attribute of the Cucumber-JVM JUnit runner allows you to indicate which package(s) should be recursively searched to find any glue.
-
-+
-There also needs to be one glue class that is used to bootstrap the runtime.
-
-
-Here's an example of a feature from the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype]:
-
-[source,java]
-----
-@DomainAppDemo
-Feature: List and Create New Simple Objects
-
-  Scenario: Existing simple objects can be listed and new ones created
-    Given there are initially 10 simple objects
-    When  I create a new simple object
-    Then  there are 11 simple objects
-----
-
-The "@DomainAppDemo" is a custom tag we've specified to indicate the prerequisite fixtures to be loaded; more on this in a moment.
-
-[IMPORTANT]
-====
-BDD specs are assumed to run only as integration tests.
-====
-
-The `RunBddSpecs` class to run this feature (and any other features in this package or subpackages) is just boilerplate
-
-[source,java]
-----
-@RunWith(Cucumber.class)
-@CucumberOptions(
-        format = {
-                "html:target/cucumber-html-report"
-                ,"json:target/cucumber.json"
-        },
-        glue={
-                "classpath:domainapp.application.bdd.specglue",
-                "classpath:domainapp.modules.simple.specglue"
-        },
-        strict = true,
-        tags = { "~@backlog", "~@ignore" }
-)
-public class RunBddSpecs {
-    // intentionally empty
-}
-----
-
-The JSON formatter allows integration with enhanced reports.
-(Commented out) configuration for this is provided in the link:https://github.com/apache/isis-app-simpleapp[SimpleApp archetype].
-
-The bootstrapping of Apache Isis itself lives in a `BootstrappingGlue` step definition:
-
-[source,java]
-----
-public class BootstrappingGlue
-                extends HeadlessWithBootstrappingAbstract { // <1>
-
-    public BootstrappingGlue() {
-        super(new DomainAppApplicationModule());            // <2>
-    }
-
-    @Before(order=100)                                      // <3>
-    public void beforeScenario() {
-        super.bootstrapAndSetupIfRequired();
-    }
-    @After
-    public void afterScenario(cucumber.api.Scenario sc) {
-        super.tearDownAllModules();
-    }
-}
-----
-<1> superclass contains much of the bootstrapping logic (and is also used by the integration testing framework)
-<2> the `Module` to use to bootstrap the application in headless mode.
-<3> remainder of the class is just boilerplate.
-
-[NOTE]
-====
-For BDD specs, the `CukeGlueBootstrappingAbstract` was previously provided (as a BDD counterpart to `IntegrationTestAbstract3`) to perform the relevant bootstrapping.
-_However_, it turns out that Cucumber does not allow subclassing of BDD specs.
-Therefore the bootstrapping boilerplate (that ideally would have been factored out into an abstract superclass) must be included within the BDD spec.
-====
-
-The fixture to run also lives in its own step definition, `CatalogOfFixturesGlue`:
-
-[source,java]
-----
-public class CatalogOfFixturesGlue extends CukeGlueAbstract2 {
-    @Before(value={"@DomainAppDemo"}, order=20000)
-    public void runDomainAppDemo() {
-        fixtureScripts.runFixtureScript(new DomainAppDemo(), null); // <1>
-    }
-}
-----
-<1> The `fixtureScripts` service is inherited from the superclass.
-
-This will only activate for feature files tagged with "@DomainAppDemo".
-
-Finally, the step definitions pertaining to `SimpleObject` domain entity then reside in the `SimpleObjectGlue` class.
-This is where the heavy lifting gets done:
-
-[source,java]
-----
-public class SimpleObjectMenuGlue extends CukeGlueAbstract2 {
-
-    @Given("^there are.* (\\d+) simple objects$")                           // <1>
-    public void there_are_N_simple_objects(int n) throws Throwable {
-        final List<SimpleObject> list = wrap(simpleObjectMenu).listAll();   // <2>
-        assertThat(list.size(), is(n));
-    }
-
-    @When("^.*create a .*simple object$")
-    public void create_a_simple_object() throws Throwable {
-        wrap(simpleObjectMenu).create(UUID.randomUUID().toString());
-    }
-
-    @Inject
-    SimpleObjectMenu simpleObjectMenu;                                      // <3>
-}
-----
-<1> regex to match to feature file specification
-<2> the inherited `wrap(...)` method delegates to `WrapperFactory#wrap(...)`
-<3> injected in the usual way
-
-[TIP]
-====
-The xref:refguide:applib-svc:core-domain-api/Scratchpad.adoc[`Scratchpad`] domain service is one way in which glue classes can pass state between each other.
-Or, for more type safety, you could develop your own custom domain services for each scenario, and inject these in as regular services.
-See link:http://www.thinkcode.se/blog/2017/04/01/sharing-state-between-steps-in-cucumberjvm-using-picocontainer[this blog] post for more details.
-====
-
-[TIP]
-====
-If using Java 8, note that Cucumber JVM supports a link:https://cucumber.io/docs/reference/jvm#java-8-lambdas[simplified syntax using lambdas].
-====
-
diff --git a/testing/specsupport/applib/pom.xml b/testing/specsupport/applib/pom.xml
index 81d7900..0c3fa92 100644
--- a/testing/specsupport/applib/pom.xml
+++ b/testing/specsupport/applib/pom.xml
@@ -65,11 +65,6 @@
             <artifactId>junit-vintage-engine</artifactId>
         </dependency>
         
-        <dependency>
-           <groupId>org.jmock</groupId>
-           <artifactId>jmock</artifactId>
-        </dependency>
-
 		<!-- CUCUMBER -->
 		<dependency>
 		    <groupId>io.cucumber</groupId>
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/customisation/auto-refresh.adoc b/viewers/wicket/adoc/modules/ROOT/pages/customisation/auto-refresh.adoc
index 11d61b4..4bc14d6 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/customisation/auto-refresh.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/customisation/auto-refresh.adoc
@@ -15,9 +15,9 @@ Here's one (somewhat crude, but workable) way to accomplish this.
 [source,java]
 ----
 public class MyDomainObject {
-    // ...
+    ...
     public String cssClass() { return "my-special-auto-updating-entity"; }
-    // ...
+    ...
 }
 ----
 
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/extending/custom-bootstrap-theme.adoc b/viewers/wicket/adoc/modules/ROOT/pages/extending/custom-bootstrap-theme.adoc
index 5539c56..1af04b8 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/extending/custom-bootstrap-theme.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/extending/custom-bootstrap-theme.adoc
@@ -23,7 +23,7 @@ To make use of the custom `ITheme` the application should register it by subclas
 ----
 
 public void init() {
-    // ...
+    ...
     IBootstrapSettings settings = new BootstrapSettings();
     ThemeProvider themeProvider = new SingleThemeProvider(new MyTheme());
     settings.setThemeProvider(themeProvider);
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/features/titles-in-tables.adoc b/viewers/wicket/adoc/modules/ROOT/pages/features/titles-in-tables.adoc
index 2a9b46d..1e6d771 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/features/titles-in-tables.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/features/titles-in-tables.adoc
@@ -63,7 +63,7 @@ public class Order {
     @Title(sequence="1")
     @PropertyLayout(hidden=Where.REFERENCES_PARENT)
     public Customer getCustomer() { /* ... */ }
-    // ...
+    ...
 }
 ----
 
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/layout/annotation-based.adoc b/viewers/wicket/adoc/modules/ROOT/pages/layout/annotation-based.adoc
index afb8d19..4f3a96b 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/layout/annotation-based.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/layout/annotation-based.adoc
@@ -58,7 +58,7 @@ public class ToDoItem {
     public String getNotes() { /* ... */ }
     @MemberOrder(name="Misc", sequence="99")
     public Long getVersionSequence() { /* ... */ }
-    // ...
+    ...
 }
 ----
 
@@ -86,7 +86,7 @@ public class ToDoItem {
     public ToDoItem add(ToDoItem t) { /* ... */ }
     @MemberOrder(name="dependencies", sequence="2")
     public ToDoItem remove(ToDoItem t) { /* ... */ }
-    // ...
+    ...
 }
 ----
 
@@ -128,7 +128,7 @@ For example:
      middle="Detail"
  )
 public class ToDoItem {
-    // ...
+    ...
 }
 ----
 


[isis] 02/19: ISIS-2062: docs

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

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

commit a06c413c81bf122686cbdae7321900b7bb08f706
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jan 27 09:25:55 2020 +0000

    ISIS-2062: docs
---
 .gitignore                                                       | 2 ++
 antora/playbooks/{site-toc.yml => site-starters.yml}             | 4 ++--
 antora/playbooks/site-toc.yml                                    | 9 ---------
 antora/playbooks/site.yml                                        | 2 +-
 mavendeps/adoc/antora.yml                                        | 2 +-
 mavendeps/adoc/modules/mavendeps/nav.adoc                        | 2 +-
 mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc        | 1 +
 .../jdo/src/main/adoc/modules/ROOT/partials/module-nav.adoc      | 8 ++++----
 starters/adoc/antora.yml                                         | 2 --
 starters/adoc/modules/ROOT/nav.adoc                              | 2 +-
 starters/adoc/modules/ROOT/pages/about.adoc                      | 1 +
 starters/adoc/modules/ROOT/partials/component-nav.adoc           | 7 +++++++
 .../adoc/modules/ROOT/{nav.adoc => partials/module-nav.adoc}     | 0
 starters/adoc/modules/helloworld/nav.adoc                        | 3 +--
 starters/adoc/modules/helloworld/partials/module-nav.adoc        | 2 ++
 starters/adoc/modules/simpleapp/nav.adoc                         | 3 +--
 starters/adoc/modules/simpleapp/partials/module-nav.adoc         | 2 ++
 17 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/.gitignore b/.gitignore
index c2042d5..3d0c84e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,3 +51,5 @@ rebel.xml
 
 /site*.yml
 /.antora-cache-dir/
+
+_commit.sh
diff --git a/antora/playbooks/site-toc.yml b/antora/playbooks/site-starters.yml
similarity index 91%
copy from antora/playbooks/site-toc.yml
copy to antora/playbooks/site-starters.yml
index f062f5a..276e313 100644
--- a/antora/playbooks/site-toc.yml
+++ b/antora/playbooks/site-starters.yml
@@ -13,12 +13,12 @@ content:
 
 # mavendeps
     - url: .
-      start_path: mavendeps/adoc # toc
+      start_path: mavendeps/adoc # starters
       branches: HEAD
 
 # starters
     - url: .
-      start_path: starters/adoc # toc
+      start_path: starters/adoc # starters
       branches: HEAD
 
 
diff --git a/antora/playbooks/site-toc.yml b/antora/playbooks/site-toc.yml
index f062f5a..eb65104 100644
--- a/antora/playbooks/site-toc.yml
+++ b/antora/playbooks/site-toc.yml
@@ -11,15 +11,6 @@ content:
       start_path: antora/components/toc # toc
       branches: HEAD
 
-# mavendeps
-    - url: .
-      start_path: mavendeps/adoc # toc
-      branches: HEAD
-
-# starters
-    - url: .
-      start_path: starters/adoc # toc
-      branches: HEAD
 
 
 ui:
diff --git a/antora/playbooks/site.yml b/antora/playbooks/site.yml
index 9bdee76..5c49877 100644
--- a/antora/playbooks/site.yml
+++ b/antora/playbooks/site.yml
@@ -168,7 +168,7 @@ content:
 
 # mavendeps
     - url: .
-      start_path: mavendeps/adoc # toc
+      start_path: mavendeps/adoc # starters
       branches: HEAD
 
 # security
diff --git a/mavendeps/adoc/antora.yml b/mavendeps/adoc/antora.yml
index 92f67d2..8c24760 100644
--- a/mavendeps/adoc/antora.yml
+++ b/mavendeps/adoc/antora.yml
@@ -1,2 +1,2 @@
-name: toc
+name: starters
 version: master
diff --git a/mavendeps/adoc/modules/mavendeps/nav.adoc b/mavendeps/adoc/modules/mavendeps/nav.adoc
index 567a472..77d9496 100644
--- a/mavendeps/adoc/modules/mavendeps/nav.adoc
+++ b/mavendeps/adoc/modules/mavendeps/nav.adoc
@@ -1 +1 @@
-// unused - referenced directly by toc/nav.adoc
\ No newline at end of file
+include::starters:ROOT:partial$component-nav.adoc[]
diff --git a/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc b/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
new file mode 100644
index 0000000..f99271c
--- /dev/null
+++ b/mavendeps/adoc/modules/mavendeps/partials/module-nav.adoc
@@ -0,0 +1 @@
+* xref:starters:mavendeps:about.adoc[Maven Dependencies]
diff --git a/persistence/jdo/src/main/adoc/modules/ROOT/partials/module-nav.adoc b/persistence/jdo/src/main/adoc/modules/ROOT/partials/module-nav.adoc
index a0b16ee..5f95188 100644
--- a/persistence/jdo/src/main/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/persistence/jdo/src/main/adoc/modules/ROOT/partials/module-nav.adoc
@@ -1,4 +1,4 @@
-* xref:configuring.adoc[Configuring]
-* xref:jdo-mappings.adoc[JDO Mappings]
-* xref:db-schemas.adoc[DB Schemas]
-* xref:hints-and-tips.adoc[Hints-n-Tips]
+* xref:pjdo:ROOT:configuring.adoc[Configuring]
+* xref:pjdo:ROOT:jdo-mappings.adoc[JDO Mappings]
+* xref:pjdo:ROOT:db-schemas.adoc[DB Schemas]
+* xref:pjdo:ROOT:hints-and-tips.adoc[Hints-n-Tips]
diff --git a/starters/adoc/antora.yml b/starters/adoc/antora.yml
index 5bb5084..23ad419 100644
--- a/starters/adoc/antora.yml
+++ b/starters/adoc/antora.yml
@@ -4,5 +4,3 @@ version: master
 start_page: ROOT:about.adoc
 nav:
 - modules/ROOT/nav.adoc
-- modules/helloworld/nav.adoc
-- modules/simpleapp/nav.adoc
diff --git a/starters/adoc/modules/ROOT/nav.adoc b/starters/adoc/modules/ROOT/nav.adoc
index 579c69c..cf57def 100644
--- a/starters/adoc/modules/ROOT/nav.adoc
+++ b/starters/adoc/modules/ROOT/nav.adoc
@@ -1,4 +1,4 @@
-* xref:about.adoc[Starter Parent]
+include::starters:ROOT:partial$component-nav.adoc[]
 
 
 
diff --git a/starters/adoc/modules/ROOT/pages/about.adoc b/starters/adoc/modules/ROOT/pages/about.adoc
index e736389..dc813d2 100644
--- a/starters/adoc/modules/ROOT/pages/about.adoc
+++ b/starters/adoc/modules/ROOT/pages/about.adoc
@@ -3,3 +3,4 @@
 
 
 TODO: to document
+
diff --git a/starters/adoc/modules/ROOT/partials/component-nav.adoc b/starters/adoc/modules/ROOT/partials/component-nav.adoc
new file mode 100644
index 0000000..173b4df
--- /dev/null
+++ b/starters/adoc/modules/ROOT/partials/component-nav.adoc
@@ -0,0 +1,7 @@
+include::starters:ROOT:partial$module-nav.adoc[]
+include::starters:helloworld:partial$module-nav.adoc[]
+include::starters:simpleapp:partial$module-nav.adoc[]
+include::starters:mavendeps:partial$module-nav.adoc[]
+
+
+
diff --git a/starters/adoc/modules/ROOT/nav.adoc b/starters/adoc/modules/ROOT/partials/module-nav.adoc
similarity index 100%
copy from starters/adoc/modules/ROOT/nav.adoc
copy to starters/adoc/modules/ROOT/partials/module-nav.adoc
diff --git a/starters/adoc/modules/helloworld/nav.adoc b/starters/adoc/modules/helloworld/nav.adoc
index 557c8a5..77d9496 100644
--- a/starters/adoc/modules/helloworld/nav.adoc
+++ b/starters/adoc/modules/helloworld/nav.adoc
@@ -1,2 +1 @@
-* xref:about.adoc[Hello World]
-
+include::starters:ROOT:partial$component-nav.adoc[]
diff --git a/starters/adoc/modules/helloworld/partials/module-nav.adoc b/starters/adoc/modules/helloworld/partials/module-nav.adoc
new file mode 100644
index 0000000..f4129f8
--- /dev/null
+++ b/starters/adoc/modules/helloworld/partials/module-nav.adoc
@@ -0,0 +1,2 @@
+* xref:starters:helloworld:about.adoc[Hello World]
+
diff --git a/starters/adoc/modules/simpleapp/nav.adoc b/starters/adoc/modules/simpleapp/nav.adoc
index f63c990..77d9496 100644
--- a/starters/adoc/modules/simpleapp/nav.adoc
+++ b/starters/adoc/modules/simpleapp/nav.adoc
@@ -1,2 +1 @@
-* xref:about.adoc[SimpleApp]
-
+include::starters:ROOT:partial$component-nav.adoc[]
diff --git a/starters/adoc/modules/simpleapp/partials/module-nav.adoc b/starters/adoc/modules/simpleapp/partials/module-nav.adoc
new file mode 100644
index 0000000..ed5e981
--- /dev/null
+++ b/starters/adoc/modules/simpleapp/partials/module-nav.adoc
@@ -0,0 +1,2 @@
+* xref:starters:simpleapp:about.adoc[SimpleApp]
+


[isis] 11/19: ISIS-2062: docs

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

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

commit 2c989f593ecacf57552a5896b94ae705000d035c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 28 18:58:01 2020 +0000

    ISIS-2062: docs
---
 antora/supplemental-ui/index.html | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index 3a25b44..5e923e5 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -605,13 +605,13 @@ Examples
 
           <div class="row">
             <div class="col-lg-6 text-left text-lg-left">
-              <p class="cta-text text-center" style="margin-block-end: 0; margin-left: 20px; margin-top: 20px;">
+              <p class="cta-text text-center" style="margin-block-end: 0; ">
                 Learn about Apache Isis™ by running the minimal <a href="https://github.com/apache/isis-app-helloworld">helloworld</a>&nbsp;starter&nbsp;app.
               </p>
             </div>
             <div class="col-lg-6 text-left text-lg-left">
-              <p class="cta-text text-center" style="margin-block-end: 0; margin-left: 20px; margin-top: 20px;">
-                Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.</p>
+              <p class="cta-text text-center" style="margin-block-end: 0; ">
+                Develop your own Apache Isis™ app using the more structured <a href="https://github.com/apache/isis-app-simpleapp">simpleapp</a>&nbsp;starter&nbsp;app.
               </p>
             </div>
           </div>