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

[isis] branch ISIS-2444 updated: ISIS-2444: fixes links

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

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


The following commit(s) were added to refs/heads/ISIS-2444 by this push:
     new ff737e4  ISIS-2444: fixes links
ff737e4 is described below

commit ff737e4b368e64b09a61ae81ef9d8db4f1e1a43a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Mar 20 15:31:37 2021 +0000

    ISIS-2444: fixes links
---
 .../modules/ROOT/pages/verifying-releases.adoc     |  30 +++-
 .../pages/what-is-apache-isis/screencasts.adoc     | 168 ++++++++++-----------
 .../hooks/HintStore_020-examples-and-usage.adoc    |   5 +-
 .../applib-classes/pages/events/domainevent.adoc   |   1 +
 .../modules/applib-methods/pages/prefixes.adoc     |  20 ++-
 .../applib-methods/pages/prefixes/disable.adoc     |   1 -
 .../applib-methods/pages/prefixes/validate.adoc    |  11 ++
 .../how-to-implement-a-spellchecker.adoc           |   2 +-
 .../btb/pages/hints-and-tips/persisted-title.adoc  |   2 +-
 .../userguide/modules/btb/pages/i18n.adoc          |   2 +-
 .../fun/pages/business-rules/usability.adoc        |   4 +-
 .../modules/fun/pages/business-rules/validity.adoc |   4 +-
 .../fun/pages/business-rules/visibility.adoc       |   4 +-
 .../inject-services.adoc                           |   2 +-
 .../modules/fun/pages/drop-downs-and-defaults.adoc |   6 +-
 .../modules/fun/pages/object-members/actions.adoc  |   2 +-
 .../modules/fun/pages/overview/events.adoc         |   2 +-
 .../modules/fun/pages/ui/menubars-layout.adoc      |   2 +-
 .../modules/fun/pages/ui/object-layout.adoc        |   4 +-
 .../fun/pages/ui/object-titles-and-icons.adoc      |  10 +-
 .../modules/fun/partials/_deployment-options.adoc  |  34 +++--
 .../customui/vm/WhereInTheWorldVm-description.adoc |   2 +-
 .../disabling-persistence-by-reachability.adoc     |   2 +-
 .../modules/ROOT/pages/configuring/properties.adoc |  96 +-----------
 .../hints-and-tips/overriding-jdo-annotations.adoc |   2 +-
 scripts/verify-isis-release.sh                     |   4 +-
 testing/adoc/modules/ROOT/pages/about.adoc         |   3 +-
 .../pages/fixture-scripts/api-and-usage.adoc       |   1 +
 .../fixtures/pages/services/FixtureScripts.adoc    |   2 +-
 .../adoc/modules/unittestsupport/pages/about.adoc  |   2 +-
 .../hints-and-tips/restful-image-property.adoc     |   2 +-
 .../adoc/modules/ROOT/pages/layout-resources.adoc  |   3 +-
 .../ROOT/pages/features/blob-attachments.adoc      |   2 +-
 33 files changed, 200 insertions(+), 237 deletions(-)

diff --git a/antora/components/comguide/modules/ROOT/pages/verifying-releases.adoc b/antora/components/comguide/modules/ROOT/pages/verifying-releases.adoc
index 43ddafa..fef3fbf 100644
--- a/antora/components/comguide/modules/ROOT/pages/verifying-releases.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/verifying-releases.adoc
@@ -61,26 +61,44 @@ in other words, to confirm that the release was created by an Apache Isis commit
 
 * builds the framework code from source
 
-* downloads and builds the helloworld starter apps (from the correct release branch)
+* downloads and builds the helloworld starter app (for the `jdo` branch and also for the `jpa` branch)
 
 * ditto for the simpleapp starter app
 
-Assuming this completes successfully, you can then test the two starter applications:
+Assuming this completes successfully, you can then test the starter applications:
 
-* Test out helloworld using:
+* Test out helloworld (jdo) using:
 +
 [source,bash]
 ----
-pushd test-helloworld/isis-app-helloworld
+pushd isis-app-helloworld-jdo
 mvn spring-boot:run
 popd
 ----
 
-* Test out simpleapp using:
+* Test out helloworld (jpa) using:
 +
 [source,bash]
 ----
-pushd test-simpleapp/isis-app-simpleapp
+pushd isis-app-helloworld-jpa
+mvn spring-boot:run
+popd
+----
+
+* Test out simpleapp (jdo) using:
++
+[source,bash]
+----
+pushd isis-app-simpleapp-jdo
+mvn -pl webapp spring-boot:run
+popd
+----
+
+* Test out simpleapp (jpa) using:
++
+[source,bash]
+----
+pushd isis-app-simpleapp-jpa
 mvn -pl webapp spring-boot:run
 popd
 ----
diff --git a/antora/components/docs/modules/ROOT/pages/what-is-apache-isis/screencasts.adoc b/antora/components/docs/modules/ROOT/pages/what-is-apache-isis/screencasts.adoc
index 0da375d..ae33ea6 100644
--- a/antora/components/docs/modules/ROOT/pages/what-is-apache-isis/screencasts.adoc
+++ b/antora/components/docs/modules/ROOT/pages/what-is-apache-isis/screencasts.adoc
@@ -31,7 +31,7 @@ Finally, you can also find some screencasts for earlier versions of the framewor
 
 
 
-[cols="2a,1a,1a,1a,1a,1a,1a,1a,1a,1a,1a,1a"]
+[cols="3a,1a,1a,1a,1a,1a,1a,1a,1a,1a,1a,1a"]
 |===
 
 
@@ -46,31 +46,31 @@ include::screencasts/playlists.adoc[]
 
 //|https://www.youtube.com/watch?v=RQ_FFYd7npU[000^] +
 //Searching and using the Apache Isis docs
-//|x||||||||||
+//|X||||||||||
 
 
 //|link:https://www.youtube.com/watch?v=OTNHR5EdAs8[001^] +
 //Generating an app using the xref:docs:starters:simpleapp.adoc[SimpleApp archetype]
 //
-//|x||||||||||
+//|X||||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=6GPtec5Hu5Q[002^] +
-Importing the generated app into an xref:setupguide:ROOT:ide.adoc[IDE] +
+Importing the generated app into an xref:setupguide:ROOT:about.adoc[IDE] +
 
-|x||x||||||||
+|X||X||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=xVTjtiJM8XM[003^] +
 Walking through the main classes that make up the SimpleApp: `SimpleObject` persistent entity, `HomePageViewModel`xref:userguide:fun:view-models.adoc[view model] and `SimpleObjects` domain service (repository).
-||||x|||||||
+||||X|||||||
 
 
 |link:https://www.youtube.com/watch?v=KCJ1ZPPB3pA[004^] +
 Using the optional `Xxx.layout.xml` file to provide xref:userguide:fun:ui.adoc#object-layout[layout metadata] to dynamically render a domain object using the link:http://getbootstrap.com[Bootstrap 3] grid system.
-||x|||||||||
+||X|||||||||
 
 
 
@@ -85,24 +85,24 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=pH02g0l2GKY[005^] +
 Using xref:testing:fixtures:about.adoc[fixture scripts] to initialize the database, eg while prototyping and for demos
-||x|||||||||
+||X|||||||||
 
 
 
 
 |link:https://www.youtube.com/watch?v=dXtmxmYxa30[006^] +
 Implementing xref:userguide:fun:business-rules.adoc[business rules]for domain object members, using supporting methods ("see it, use it, do it")
-|x||||||||||
+|X||||||||||
 
 |link:https://www.youtube.com/watch?v=imHfxQGUgV8[007^] +
 Writing xref:testing:unittestsupport:about.adoc[unit tests] for a domain object responsibility
-||x|||||||||
+||X|||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=-lAt4UWiBjE[008^] +
 Writing end-to-end xref:testing:integtestsupport:about.adoc[integration tests] for a domain object responsibility
-||x|||||||||
+||X|||||||||
 
 
 
@@ -114,14 +114,14 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=lkZxRSS0Zwg[009^] +
 Using the Swagger UI to access the xref:vro:ROOT:about.adoc[REST API] automatically exposed for domain services, entities, and/or view models
-||||||||||x|
+||||||||||X|
 
 
 
 // FIXME: currently removed in v2, may reinstate
 //|link:https://www.youtube.com/watch?v=yOh3WphhR1E[010^].
 //Using the xref:refguide:mvn:about.adoc[Apache Isis maven plugin] to validate domain object models during the build process (rather than at runtime).
-//||||||||x|||
+//||||||||X|||
 
 
 
@@ -139,7 +139,7 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=dfRZeYqzMtI[012^] +
 Implementing business logic using a (no-arg) action, and associating with a property using either the xref:refguide:applib:index/annotation/MemberOrder.adoc[@MemberOrder] annotations or using xref:userguide:fun:ui.adoc#object-layout[dynamic (XML) layouts].
-|x||||||||x||
+|X||||||||X||
 
 
 
@@ -153,14 +153,15 @@ include::screencasts/playlists.adoc[]
 
 
 |link:https://www.youtube.com/watch?v=CwM430UH5WE[014^] +
-Using the xref:refguide:applib-cm:methods.adoc#title[title()], xref:refguide:applib-cm:methods.adoc#iconName[iconName()] and xref:refguide:applib-cm:methods.adoc#cssclass[cssClass()] so that end-users can distinguish domain objects within the UI.
-|x||x||||||x||
+
+Using the xref:refguide:applib-methods:ui-hints.adoc#title[title()], xref:refguide:applib-methods:ui-hints.adoc#iconName()] and xref:refguide:applib-methods:ui-hints.adoc#cssclass[cssClass()] so that end-users can distinguish domain objects within the UI.
+|X||X||||||X||
 
 
 
 |link:https://www.youtube.com/watch?v=7ToRKBOeemM[015^] +
-Moving the responsibility to specify the icon for a domain object out and into a subscriber, using the xref:refguide:applib-cm:classes/uievent.adoc#IconUiEvent[IconUiEvent] as per the xref:refguide:applib:index/annotation/DomainObjectLayout.adoc#iconUiEvent[@DomainObjectLayout#iconUiEvent()] annotation
-||||||x|||||
+Moving the responsibility to specify the icon for a domain object out and into a subscriber, using the xref:refguide:applib-classes:events.adoc#lifecycle-events[IconUiEvent] as per the xref:refguide:applib:index/annotation/DomainObjectLayout.adoc#iconUiEvent[@DomainObjectLayout#iconUiEvent()] annotation
+||||||X|||||
 
 
 
@@ -171,7 +172,7 @@ Moving the responsibility to specify the icon for a domain object out and into a
 
 |link:https://www.youtube.com/watch?v=ckT8Lt20SE4[016^] +
 How to implement a derived collection on a domain object.
-|||||||||x||
+|||||||||X||
 
 
 
@@ -182,7 +183,7 @@ How to implement a derived collection on a domain object.
 
 |link:https://www.youtube.com/watch?v=l_oZymgb65I[017^] +
 Extending a xref:testing:fixtures:about.adoc[fixture script] to more easily demonstrate new functionality.
-||x|||||||||
+||X|||||||||
 
 
 
@@ -193,7 +194,7 @@ Extending a xref:testing:fixtures:about.adoc[fixture script] to more easily demo
 
 |link:https://www.youtube.com/watch?v=39Hpd7C4Kvo[018^] +
 Using xref:userguide:fun:ui.adoc#object-layout[dynamic (XML) layouts] to specify the page size for a domain object's collection.
-||||x|||||||
+||||X|||||||
 
 
 
@@ -207,20 +208,20 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=0d713-V4vrg[019^] +
 Demonstrates how Apache Isis' xref:vw:ROOT:about.adoc[Wicket viewer] remembers the state of rendered domain objects, and how the end-user of the
- application can clear these UI hints using the (framework-provided) xref:refguide:applib-cm:classes.adoc#clearHints["clear hints"] action.
-|||x||||||||
+ application can clear these UI hints using the (framework-provided) xref:refguide:viewer:index/wicket/viewer/mixins/Object_clearHints.adoc["clear hints"] mixin action.
+|||X||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=Kqch-XNlBMA[020^] +
 Demonstrates how the end-user can copy and share URLs for domain objects - including UI hints - using Apache Isis' xref:vw:ROOT:about.adoc[Wicket viewer].
-|||x||||||||
+|||X||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=a0QQLT_16To[021^] +
 Demonstrates how the end-user can use bookmarks and breadcrumbs within Apache Isis' xref:vw:ROOT:about.adoc[Wicket viewer], and how the developer can ensure that xref:refguide:applib:index/annotation/DomainObjectLayout.adoc#bookmarking[domain objects] and (xref:refguide:applib:index/annotation/Action.adoc#semantics[query-only]) xref:refguide:applib:index/annotation/ActionLayout.adoc#bookmarking[actions] can be bookmarked.
-|||x||||||||
+|||X||||||||
 
 
 
@@ -235,26 +236,25 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=Wn5215K7_Jg[022^] +
 Shows how to refactor a domain object to move an action implementation out of the domain object itself, and instead implement as a xref:userguide:fun:overview.adoc#mixins[mixin] (useful for decoupling).
-|x|||||x|||||
+|X|||||X|||||
 
 
 
 |link:https://www.youtube.com/watch?v=m633OEBpWqQ[023^] +
 Shows how to refactor a domain object to move (derived) collections out of the domain object and reimplement as a xref:userguide:fun:overview.adoc#mixins[mixin].
-||||||x|||||
+||||||X|||||
 
 
 
 |link:https://www.youtube.com/watch?v=-AQJb9GtIqI[024^] +
-Using a domain event subscriber to xref:userguide:fun:overview.adoc#domain-events[decouple] and abstract business rules (xref:refguide:applib-cm:methods.adoc#validate[validation]).
-||||||x|||||
+Using a xref:refguide:applib-classes:events/domainevent.adoc[domain event] subscriber to xref:userguide:fun:overview.adoc#domain-events[decouple] and abstract business rules for validation.
+||||||X|||||
 
 
 
 |link:https://www.youtube.com/watch?v=6GjLW0hlrm4[025^] +
-Using a domain event subscriber to hide functionality, in this
-  case the xref:refguide:applib-cm:classes.adoc#clearHints["clear hints"] action automatically provided by the framework.
-||||||||||x|
+Using a domain event subscriber to hide functionality, in this case the xref:refguide:viewer:index/wicket/viewer/mixins/Object_clearHints.adoc["clear hints"] action automatically provided by the framework.
+||||||||||X|
 
 
 
@@ -265,8 +265,8 @@ Using a domain event subscriber to hide functionality, in this
 
 
 |link:https://www.youtube.com/watch?v=qj4bMkQRBUY[026^] +
-Using the xref:refguide:applib:index/annotation/Title.adoc[@Title] annotation (instead of the xref:refguide:applib-cm:methods.adoc#title[title()] reserved method) to obtain the title of a domain object, so that the end-user can distinguish one object from another.
-|x||||||||x||
+Using the xref:refguide:applib:index/annotation/Title.adoc[@Title] annotation (instead of the xref:refguide:applib-methods:ui-hints.adoc#title[title()] reserved method) to obtain the title of a domain object, so that the end-user can distinguish one object from another.
+|X||||||||X||
 
 
 
@@ -279,7 +279,7 @@ Using the xref:refguide:applib:index/annotation/Title.adoc[@Title] annotation (i
 
 |link:https://www.youtube.com/watch?v=yi52Gbd3lmY[027^] +
 How to write an xref:testing:integtestsupport:about.adoc[integration test] for a mixin.
-||x|||||||||
+||X|||||||||
 
 
 
@@ -295,7 +295,7 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=SLJPBruFMKY[028^] +
 Using link:https://projectlombok.org/[Project Lombok] to remove boilerplate from your domain objects (getters and setters).
-||||||||x|||
+||||||||X|||
 
 
 
@@ -313,14 +313,14 @@ include::screencasts/playlists.adoc[]
 
 
 |link:https://www.youtube.com/watch?v=ORoEYlg6XFM[030^] +
-How to validate action parameters using a supporting xref:refguide:applib-cm:methods.adoc#validate[validateNXxx()] method.
-|x||||||||x||
+How to validate action parameters using a supporting xref:refguide:applib-methods:prefixes.adoc#validate[validate...()] method.
+|X||||||||X||
 
 
 
 |link:https://www.youtube.com/watch?v=1Vlzob89pYI[031^] +
 How to validate action parameters using the xref:refguide:applib:index/annotation/Parameter.adoc#mustSatisfy[@Parameter#mustSatisfy()]  and the Specification interface.
-|||||||||x||
+|||||||||X||
 
 
 
@@ -333,7 +333,7 @@ How to validate action parameters using the xref:refguide:applib:index/annotatio
 
 |link:https://www.youtube.com/watch?v=fYJjXAepWAs[032^] +
 How to instantiate/initialize objects using xref:refguide:applib:index/services/repository/RepositoryService.adoc[RepositoryService], xref:refguide:applib:index/services/registry/ServiceRegistry.adoc[ServiceRegistry] and/or xref:refguide:applib:index/services/factory/FactoryService.adoc[FactoryService].
-|x||||||||x||
+|X||||||||X||
 
 
 
@@ -346,26 +346,26 @@ include::screencasts/playlists.adoc[]
 
 
 |link:https://www.youtube.com/watch?v=cQ06PoMNDPw[033^] +
-How to provide a set of xref:refguide:applib-cm:methods.adoc#choices[choices] (a drop-down list) when editing a property.
-|x||||||||x||
+How to provide a set of xref:refguide:applib-methods:prefixes.adoc#choices[choices] (a drop-down list) when editing a property.
+|X||||||||X||
 
 
 
 |link:https://www.youtube.com/watch?v=afEnYKljBQs[034^] +
-How to provide a set of xref:refguide:applib-cm:methods.adoc#choices[choices] (a drop-down list) when invoking an action.
-|||||||||x||
+How to provide a set of xref:refguide:applib-methods:prefixes.adoc#choices[choices] (a drop-down list) when invoking an action.
+|||||||||X||
 
 
 
 |link:https://www.youtube.com/watch?v=fKo6aTPK-gk[035^] +
-How to use the xref:refguide:applib-cm:methods.adoc#choices[choices] supporting methods as a source for default values within a xref:testing:fixtures:about.adoc[fixture script].
-||x|||||||x||
+How to use the xref:refguide:applib-methods:prefixes.adoc#choices[choices] supporting methods as a source for default values within a xref:testing:fixtures:about.adoc[fixture script].
+||X|||||||X||
 
 
 
 |link:https://www.youtube.com/watch?v=ZWOzmwCJVzA[036^] +
 How to use an enum for choices (drop down list) for both a property or an action parameter.
-|||||||||x||
+|||||||||X||
 
 
 
@@ -379,12 +379,12 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=1SCyBlMM2Bo[037^] +
 How to hide properties as columns in tables (parented collections or standalone collections), using the dynamic XML layout (equivalent to xref:refguide:applib:index/annotation/PropertyLayout.adoc#hidden[@PropertyLayout#hidden()]).
-||||x|||||||
+||||X|||||||
 
 
 |link:https://www.youtube.com/watch?v=H11yby1Xkbc[038^] +
 How to hide properties as columns in tables, using CSS.
-||||x|||||||
+||||X|||||||
 
 
 
@@ -397,14 +397,14 @@ include::screencasts/playlists.adoc[]
 
 
 |link:https://www.youtube.com/watch?v=NKaR7ZedI8E[039^] +
-Using the xref:refguide:applib-cm:classes/super.adoc#FixtureScript[FixtureScript] `defaultParam(...)` method to reflectively default parameters to fixture scripts that have not been set by the caller.
-||x|||||||||
+Using the xref:testing:fixtures:about.adoc#fixturescript[FixtureScript] `defaultParam(...)` method to reflectively default parameters to fixture scripts that have not been set by the caller.
+||X|||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=-jMiD9n1L5U[040^] +
 Using the (non-ASF) link:https://platform.incode.org[Incode Platform^]'s fakedata module's `FakeDataService` to provide fake (random) names within a fixture script.
-||x|||x||||||
+||X|||X||||||
 
 
 
@@ -417,14 +417,14 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=esujf_DFeWA[041^] +
 Using BigDecimal as a property within a domain object, also demonstrating the "summary" view within the xref:vw:ROOT:about.adoc[Wicket viewer].
-|||||||x||x|x|
+|||||||X||X|X|
 
 
 
 
 |link:https://www.youtube.com/watch?v=n9Oy0m2bplw[042^] +
 How to use the xref:refguide:applib-ant:Digits.adoc[@Digits] annotation for action parameters of type ``java.math.BigDecimal``.
-|||||||||x||
+|||||||||X||
 
 
 
@@ -437,23 +437,23 @@ include::screencasts/playlists.adoc[]
 
 
 |link:https://www.youtube.com/watch?v=Rt4JoV4ssVY[043^] +
-How to use the supporting xref:refguide:applib-cm:methods.adoc#default[defaultXxx(...)] supporting method to provide a default argument value for action parameters.
-|x||||||||x||
+How to use the supporting xref:refguide:applib-methods:prefixes.adoc#default[defaultXxx(...)] supporting method to provide a default argument value for action parameters.
+|X||||||||X||
 
 
 |link:https://www.youtube.com/watch?v=qAJDGxztWIQ[044^] +
 How to use xref:refguide:applib:index/annotation/DomainObject.adoc#bounding[@DomainObject#bounding()] so that a drop-down list is automatically provided for any parameters to actions that are for (domain entity) reference types.
-|||||||||x||
+|||||||||X||
 
 
 |link:https://www.youtube.com/watch?v=0ro_YhXOpJU[045^] +
-How to use the xref:refguide:applib-cm:methods.adoc#choices[choicesXxx(...)] supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).
-|||||||||x||
+How to use the xref:refguide:applib-methods:prefixes.adoc#choices[choicesXxx(...)] supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).
+|||||||||X||
 
 
 |link:https://www.youtube.com/watch?v=K36IJQ_hDfs[046^] +
-How to use the xref:refguide:applib-cm:methods.adoc#autoComplete[autoCompleteXxx(...)] supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).
-|||||||||x||
+How to use the xref:refguide:applib-methods:prefixes.adoc#autoComplete[autoCompleteXxx(...)] supporting method to provide a drop-down list for parameters to actions that are for reference types (domain entities or view models).
+|||||||||X||
 
 
 
@@ -467,32 +467,32 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=SoREp-8MQz0[047^] +
 Configuring an Apache Isis app to allow tables of objects to be downloaded as an Excel spreadsheet, using the (non-ASF) link:https://platform.incode.org[Incode Platform^]'s excel wicket component.
-|||||x||||||
+|||||X||||||
 
 
 |link:https://www.youtube.com/watch?v=bqjLx8gMOEw[048^] +
 Configuring an Apache Isis app to allow tables of domain objects with date information to be rendered on a full-page
 calendar, using the (non-ASF) link:https://platform.incode.org[Incode Platform^]'s fullcalendar2 wicket
 component.
-|||||x||||||
+|||||X||||||
 
 
 |link:https://www.youtube.com/watch?v=0YoFa44Xr6M[049^] +
 Using the xref:refguide:applib:index/annotation/Programmatic.adoc[@Programmatic] annotation to exclude methods from a domain object
 (eg implementing methods of an interface as defined by the (non-ASF) link:https://platform.incode.org[Incode Platform^]'s fullcalendar2 wicket component) that would
 otherwise be part of the Apache Isis metamodel (and thus show up in the UI).
-||||||||||x|
+||||||||||X|
 
 
 |link:https://www.youtube.com/watch?v=mIwptdeZ67Q[050^] +
 Configuring an Apache Isis app to allow tables of domain objects with location information to be rendered on map,
  using the (non-ASF) link:https://platform.incode.org[Incode Platform^]'s gmap3 wicket component.
-|||||x||||||
+|||||X||||||
 
 
 |link:https://www.youtube.com/watch?v=3n_70HJ23uY[051^] +
 Using derived properties to persist value types (such as gmap3's Location value type) as regular primitive datatypes.
-|||||||x||||
+|||||||X||||
 
 
 
@@ -506,22 +506,22 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=puG-pzxRSd0[052^] +
 How to write a xref:userguide:fun:view-models.adoc#jaxb[(JAXB) view model], holding references to two domain objects.
-|x||||||||x||
+|X||||||||X||
 
 
 |link:https://www.youtube.com/watch?v=tdBkmA2CCZY[053^] +
 Updating the title, icon and layout of a xref:userguide:fun:view-models.adoc#jaxb[(JAXB) view model].
-||||x|||||||
+||||X|||||||
 
 
 |link:https://www.youtube.com/watch?v=TKF0FB_od00[054^] +
 How to expose information from underlying domain entities referenced by a xref:userguide:fun:view-models.adoc#jaxb[(JAXB) view model] using derived properties
-||||||||||x|
+||||||||||X|
 
 
 |link:https://www.youtube.com/watch?v=TMMeVhRNi8A[055^] +
 Adding an action to a xref:userguide:fun:view-models.adoc#jaxb[(JAXB) view model], and adjusting the layout using custom CSS.
-||||x|||||||
+||||X|||||||
 
 
 
@@ -535,31 +535,31 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=BYmSlgJP5KY[056^] +
 The (very simple) steps required to rename a domain entity class.
-|x||||||||||
+|X||||||||||
 
 
 
 |link:https://www.youtube.com/watch?v=J5xobU6X0ng[057^] +
 How to rename a menu (on the top-level menubar) as rendered in the  xref:vw:ROOT:about.adoc[Wicket viewer].
-|x||||||||||
+|X||||||||||
 
 
 |link:https://www.youtube.com/watch?v=mgHqRxQrp28[058^] +
 How to rename various elements (collections, title) of the xref:refguide:applib:index/annotation/HomePage.adoc[home page] view model,
 for an improved initial page.
-||||||||||x|
+||||||||||X|
 
 
 
 |link:https://www.youtube.com/watch?v=1i6N4wES6iw[059^] +
 How to rename the application name as it appears in the header.
-||||||||||x|
+||||||||||X|
 
 
 
 |link:https://www.youtube.com/watch?v=9nfDyhqCSvA[060^] +
 Updating the logo for the application as it appears in the header.
-||||||||||x|
+||||||||||X|
 
 
 
@@ -572,12 +572,12 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=vntv_5Z8Ros[061^] +
 Refactoring a mixin action, teasing out its separate responsibilities in order to decouple the code and uncover new concepts.
-||||||x|||||
+||||||X|||||
 
 
 |link:https://www.youtube.com/watch?v=Fgo2zFhRVco[062^] +
 Separating out the responsibilities of the persistent domain entities from those of view models that act upon those domain entities.
-||||||x|||||
+||||||X|||||
 
 
 
@@ -591,22 +591,22 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=9PgOSqf7rYE[063^] +
 How to implement a bidirectional 1-to-many association between two domain entities.
-|||||||x||||
+|||||||X||||
 
 
 |link:https://www.youtube.com/watch?v=0fbVg8xJ9sE[064^] +
 How domain entities can be automatically persisted just by being associated with an already persistent entity.
-|||||||x||||
+|||||||X||||
 
 
 |link:https://www.youtube.com/watch?v=FwzuCSlLLRM[065^] +
 How bidirectional relationships between domain entities can be automatically maintained.
-|||||||x||||
+|||||||X||||
 
 
 |link:https://www.youtube.com/watch?v=IzZPbNYNJl4[066^] +
 How deleting one persistent entity can, if required, automatically delete another associated entity.
-|||||||x||||
+|||||||X||||
 
 
 
@@ -619,7 +619,7 @@ include::screencasts/playlists.adoc[]
 
 |link:https://www.youtube.com/watch?v=kdhwMc0f7_k[067^] +
 Improving the layout of domain entities by adding a metadata fieldset.
-||||x|||||||
+||||X|||||||
 
 
 //12+| *for Contributors and Committers*
@@ -629,12 +629,12 @@ Improving the layout of domain entities by adding a metadata fieldset.
 //
 //|https://www.youtube.com/watch?v=RQ_FFYd7npU[068^] +
 //Contributing to the documentation
-//|||||||||||x
+//|||||||||||X
 //
 //
 //|https://youtu.be/CKSLZBBHjME[069^] +
 //Merging pull requests
-//|||||||||||x
+//|||||||||||X
 
 
 |===
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_020-examples-and-usage.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_020-examples-and-usage.adoc
index b139286..6eaa29a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_020-examples-and-usage.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/hint/hooks/HintStore_020-examples-and-usage.adoc
@@ -11,9 +11,8 @@ An alternative implementation might be more sophisticated (eg implementing an MR
 
 == See Also
 
-* The xref:vw:ROOT:about.adoc[Wicket viewer] exposes theclear hints"mixin action
-(`o.a.i.viewer.wicket.viewer.mixins.Object_clearHints`)
+* The xref:vw:ROOT:about.adoc[Wicket viewer] exposes the  xref:refguide:viewer:index/wicket/viewer/mixins/Object_clearHints.adoc["clear hints"] mixin action
 that is for use by end-users of the application to clear any UI hints that have accumulated for a domain object.
 
-* Mutable view models should implement the xref:HintIdProvider.adoc[] interface in order for hints to work.
+* Mutable view models should implement the xref:refguide:applib:index/services/hint/HintIdProvider.adoc[] in order for hints to work.
 
diff --git a/antora/components/refguide/modules/applib-classes/pages/events/domainevent.adoc b/antora/components/refguide/modules/applib-classes/pages/events/domainevent.adoc
index abbd34b..ec4aa60 100644
--- a/antora/components/refguide/modules/applib-classes/pages/events/domainevent.adoc
+++ b/antora/components/refguide/modules/applib-classes/pages/events/domainevent.adoc
@@ -1,3 +1,4 @@
+[#domain-event-classes]
 = Domain Event Classes
 
 :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/antora/components/refguide/modules/applib-methods/pages/prefixes.adoc b/antora/components/refguide/modules/applib-methods/pages/prefixes.adoc
index 1672bdb..f2dd528 100644
--- a/antora/components/refguide/modules/applib-methods/pages/prefixes.adoc
+++ b/antora/components/refguide/modules/applib-methods/pages/prefixes.adoc
@@ -62,10 +62,10 @@ See also xref:refguide:applib-methods:prefixes.adoc#autoComplete[autoComplete...
 |xref:refguide:applib-methods:prefixes.adoc#disable[disable...()]
 |Y
 |Y
+|
 |Y
 |Y
-|
-|Disables (makes read-only) a property, a collection or an action.
+|Disables (makes read-only) a property, an action or (dynamically) an action parameter.
 
 |xref:refguide:applib-methods:prefixes.adoc#get[get...()]
 |
@@ -82,17 +82,26 @@ See also xref:refguide:applib-methods:prefixes.adoc#set[set...()].
 |Y
 |Y
 |Y
-|
-|Hides a property, a collection or an action.
+|Y
+|Hides a property, a collection, an action or (dynamically) an action parameter.
 
 
 |xref:refguide:applib-methods:prefixes.adoc#set[set...()]
 |
 |Y
+|
+|
+|
+|Sets the value of a property.
+
+
+|xref:refguide:applib-methods:prefixes.adoc#validate[validate...()]
+|
 |Y
 |
 |
-|Sets the value of a property or a collection.
+|Y
+|Validate the proposed value of a property or an action parameter.
 
 
 |===
@@ -114,3 +123,4 @@ include::prefixes/disable.adoc[leveloffset=+1]
 include::prefixes/get.adoc[leveloffset=+1]
 include::prefixes/hide.adoc[leveloffset=+1]
 include::prefixes/set.adoc[leveloffset=+1]
+include::prefixes/validate.adoc[leveloffset=+1]
diff --git a/antora/components/refguide/modules/applib-methods/pages/prefixes/disable.adoc b/antora/components/refguide/modules/applib-methods/pages/prefixes/disable.adoc
index 556e8a1..d9f74b9 100644
--- a/antora/components/refguide/modules/applib-methods/pages/prefixes/disable.adoc
+++ b/antora/components/refguide/modules/applib-methods/pages/prefixes/disable.adoc
@@ -5,7 +5,6 @@
 
 
 
-
 The `disable...()` supporting method is called for properties, actions and action parameters.
 It allows the modification of the property to be vetoed (ie made read-only) and to prevent the invocation of the action ("grey it out").
 For parameters, it disables the entry into the parameter; this is for actions with dependencies between the parameters.
diff --git a/antora/components/refguide/modules/applib-methods/pages/prefixes/validate.adoc b/antora/components/refguide/modules/applib-methods/pages/prefixes/validate.adoc
new file mode 100644
index 0000000..f76c118
--- /dev/null
+++ b/antora/components/refguide/modules/applib-methods/pages/prefixes/validate.adoc
@@ -0,0 +1,11 @@
+[[validate]]
+= `validate...()`
+
+: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 `validate...()` supporting method is called for properties, actions and action parameters.
+
+WARNING: TODO: v2 - need to document
diff --git a/antora/components/userguide/modules/btb/pages/hints-and-tips/how-to-implement-a-spellchecker.adoc b/antora/components/userguide/modules/btb/pages/hints-and-tips/how-to-implement-a-spellchecker.adoc
index 8ba70af..08b77bf 100644
--- a/antora/components/userguide/modules/btb/pages/hints-and-tips/how-to-implement-a-spellchecker.adoc
+++ b/antora/components/userguide/modules/btb/pages/hints-and-tips/how-to-implement-a-spellchecker.adoc
@@ -13,7 +13,7 @@ From this link:http://isis.markmail.org/thread/dduarjscrbnodfsi[thread] on the A
 
 One way to implement is to use the xref:refguide:applib:index/services/eventbus/EventBusService.adoc[event bus]:
 
-* Set up a xref:refguide:applib-cm:classes/domainevent.adoc[domain event] subscriber that can veto the changes.
+* Set up a xref:refguide:applib-classes:events.adoc#domain-event-classes[domain event] subscriber that can veto the changes.
 
 * if the change is made through an action, you can use xref:refguide:applib:index/annotation/Action.adoc#domainEvent[@Action#domainEvent].
 
diff --git a/antora/components/userguide/modules/btb/pages/hints-and-tips/persisted-title.adoc b/antora/components/userguide/modules/btb/pages/hints-and-tips/persisted-title.adoc
index 033a793..5448f6a 100644
--- a/antora/components/userguide/modules/btb/pages/hints-and-tips/persisted-title.adoc
+++ b/antora/components/userguide/modules/btb/pages/hints-and-tips/persisted-title.adoc
@@ -9,7 +9,7 @@
 Normally the title of an object is not persisted to the database, rather it is recomputed automatically from underlying properties.
 On occasion though you might want the title to also be persisted; either to make things easier for the DBA, or for an integration scenario, or to support full-text search.
 
-We can implement this feature by either overriding the  xref:refguide:applib-cm:methods/lifecycle.adoc[lifecycle methods] or (probably better) subscribing to the xref:refguide:applib-cm:classes/lifecycleevent.adoc[lifecycle events].
+We can implement this feature by either overriding the  xref:refguide:applib-methods:lifecycle.adoc[lifecycle methods] or (probably better) subscribing to the xref:refguide:applib-classes:events.adoc#lifecycle-events[lifecycle events].
 
 In the design we discuss here we make it a responsibility of the entities to persist the title as a property, by implementing a `ObjectWithPersistedTitle` interface:
 
diff --git a/antora/components/userguide/modules/btb/pages/i18n.adoc b/antora/components/userguide/modules/btb/pages/i18n.adoc
index b3b12c7..8b76a8e 100644
--- a/antora/components/userguide/modules/btb/pages/i18n.adoc
+++ b/antora/components/userguide/modules/btb/pages/i18n.adoc
@@ -7,7 +7,7 @@
 
 Apache Isis' support for internationlization (i18n) allows every element of the domain model (the class names, property names, action names, parameter names and so forth) to be translated.
 
-It also supports translations of messages raised imperatively, by which we mean as the result of a call to `title()` to obtain an object's title, or messages resulting from any business rule violations (eg xref:refguide:applib-cm:methods.adoc#disable[disable...()] or xref:refguide:applib-cm:methods.adoc#validate[validate...()], and so on.
+It also supports translations of messages raised imperatively, by which we mean as the result of a call to `title()` to obtain an object's title, or messages resulting from any business rule violations (eg xref:refguide:applib-methods:prefixes.adoc#disable[disable...()] or xref:refguide:applib-methods:prefixes.adoc#validate[validate...()], and so on.
 
 The xref:vw:ROOT:about.adoc[Wicket viewer] (that is, its labels and messages) is also internationalized using the same mechanism.
 If no translations are available, then the Wicket viewer falls back to using Wicket resource bundles.
diff --git a/antora/components/userguide/modules/fun/pages/business-rules/usability.adoc b/antora/components/userguide/modules/fun/pages/business-rules/usability.adoc
index 9efe0be..b93074ad 100644
--- a/antora/components/userguide/modules/fun/pages/business-rules/usability.adoc
+++ b/antora/components/userguide/modules/fun/pages/business-rules/usability.adoc
@@ -113,7 +113,7 @@ A non-`null` return string is taken as the _reason_ why the action argument cann
 
 == For more information
 
-For more information, see  xref:refguide:applib-cm:methods.adoc#disable[disable...()] section in the appropriate reference guide.
+For more information, see  xref:refguide:applib-methods:prefixes.adoc#disable[disable...()] section in the appropriate reference guide.
 
-It's also possible to return xref:userguide:btb:i18n.adoc#imperative-messages[locale-specific] strings, by returning xref:refguide:applib-cm:classes.adoc#TranslatableString[TranslatableString] instead of `java.lang.String`.
+It's also possible to return xref:userguide:btb:i18n.adoc#imperative-messages[locale-specific] strings, by returning xref:refguide:applib:index/services/i18n/TranslatableString.adoc[TranslatableString] instead of `java.lang.String`.
 
diff --git a/antora/components/userguide/modules/fun/pages/business-rules/validity.adoc b/antora/components/userguide/modules/fun/pages/business-rules/validity.adoc
index adb1255..17cae78 100644
--- a/antora/components/userguide/modules/fun/pages/business-rules/validity.adoc
+++ b/antora/components/userguide/modules/fun/pages/business-rules/validity.adoc
@@ -61,9 +61,9 @@ The framework validates each argument separately; only if all are valid does it
 
 == For more information
 
-For more information, see the xref:refguide:applib-cm:methods.adoc#validate[validate...()] section in the appropriate reference guide.
+For more information, see the xref:refguide:applib-methods:prefixes.adoc#validate[validate...()] section in the appropriate reference guide.
 The reference guide also explains how to define validation declaratively, using the xref:refguide:applib:index/annotation/Parameter.adoc#mustSatisfy[@Parameter#mustSatisfy()] or xref:refguide:applib:index/annotation/Property.adoc#mustSatisfy[@Property#mustSatisfy()] attributes.
 
-It's also possible to return xref:userguide:btb:i18n.adoc#imperative-messages[locale-specific] strings, by returning xref:refguide:applib-cm:classes.adoc#TranslatableString[TranslatableString] instead of `java.lang.String`.
+It's also possible to return xref:userguide:btb:i18n.adoc[locale-specific] strings, by returning xref:refguide:applib:index/services/i18n/TranslatableString.adoc[TranslatableString] instead of `java.lang.String`.
 
 
diff --git a/antora/components/userguide/modules/fun/pages/business-rules/visibility.adoc b/antora/components/userguide/modules/fun/pages/business-rules/visibility.adoc
index a650656..75c4c64 100644
--- a/antora/components/userguide/modules/fun/pages/business-rules/visibility.adoc
+++ b/antora/components/userguide/modules/fun/pages/business-rules/visibility.adoc
@@ -86,9 +86,9 @@ In this case, the user can use the `shipTo(...)` action to specify where to ship
 However, if they check the first boolean parameter (ie, to ship the `Order` to the billing address already held on file), then the remaining parameters will all be hidden.
 
 
-== For more information
+== See also
 
-For more information, see the xref:refguide:applib-cm:methods.adoc#hide[hide...()] section in the appropriate reference guide.
+* xref:refguide:applib-methods:prefixes.adoc#hide[hide...()] method prefix
 
 
 
diff --git a/antora/components/userguide/modules/fun/pages/domain-entities-and-services/inject-services.adoc b/antora/components/userguide/modules/fun/pages/domain-entities-and-services/inject-services.adoc
index e51c6d9..5c04206 100644
--- a/antora/components/userguide/modules/fun/pages/domain-entities-and-services/inject-services.adoc
+++ b/antora/components/userguide/modules/fun/pages/domain-entities-and-services/inject-services.adoc
@@ -18,7 +18,7 @@ It is also possible to use Spring's own link:https://docs.spring.io/spring-frame
 Since the two annotations are effectively equivalent, we recommend using the JEE standard.
 ====
 
-However, not only does Apache Isis use Spring to autowire domain services into other services, the framework _also_ ensures that services are injected into any domain object (eg xref:overview.adoc#domain-entities[entity], xref:overview.adoc#view-models[view model], xref:overview.adoc#mixins[mixins], xref:testing:fixtures:about.adoc#fixture-scripts[fixture script], xref:refguide:applib-cm:classes.adoc#specification[specification] etc).
+However, not only does Apache Isis use Spring to autowire domain services into other services, the framework _also_ ensures that services are injected into any domain object (eg xref:overview.adoc#domain-entities[entity], xref:overview.adoc#view-models[view model], xref:overview.adoc#mixins[mixins], xref:testing:fixtures:about.adoc#fixture-scripts[fixture script], xref:refguide:applib:index/spec/Specification.adoc[specification] etc).
 This is key enabler to place functionality in the "right place", eg in a domain entity/view model itself, or in a mixin.
 
 
diff --git a/antora/components/userguide/modules/fun/pages/drop-downs-and-defaults.adoc b/antora/components/userguide/modules/fun/pages/drop-downs-and-defaults.adoc
index 6c27565..dc496a1 100644
--- a/antora/components/userguide/modules/fun/pages/drop-downs-and-defaults.adoc
+++ b/antora/components/userguide/modules/fun/pages/drop-downs-and-defaults.adoc
@@ -7,16 +7,16 @@
 Invoking an action whose parameters are primitives or values (int, date, string etc) is simple: the user can just type in or use a date picker.
 Invoking an action with a parameter of reference type (such as `Customer` or `Order`) requires the viewer to provide some mechanism by which the end-user can select the relevant instance.
 
-If the list of available options is fixed then the developer can provided a list a xref:refguide:applib-cm:methods.adoc#choices[choices...()] supporting method (for either and action parameter or when editing a property).
+If the list of available options is fixed then the developer can provided a list a xref:refguide:applib-methods:prefixes.adoc#choices[choices...()] supporting method (for either and action parameter or when editing a property).
 These are rendered in a drop-down.
 
-If the list of available options is much larger, then the developer can use an xref:refguide:applib-cm:methods.adoc#autoComplete[autoComplete...()] supporting method.
+If the list of available options is much larger, then the developer can use an xref:refguide:applib-methods:prefixes.adoc#autoComplete[autoComplete...()] supporting method.
 The user user enters a few characters and this is used to search for matching reference(s), again rendered in a drop-down.
 
 Similarly, when invoking an action, there may well be suitable defaults for the action arguments.
 For example, if placing an `Order` then -- even if the `Product` argument might not have a sensible default -- the quantity argument could reasonably be defaulted to 1.
 Or, the `Product` might indeed have a default, say the product previously placed by this user.
-The developer indicates this using a xref:refguide:applib-cm:methods.adoc#default[default...()] supporting method.
+The developer indicates this using a xref:refguide:applib-methods:prefixes.adoc#default[default...()] supporting method.
 
 
 == Choices and Default
diff --git a/antora/components/userguide/modules/fun/pages/object-members/actions.adoc b/antora/components/userguide/modules/fun/pages/object-members/actions.adoc
index 933a4e9..0759b38 100644
--- a/antora/components/userguide/modules/fun/pages/object-members/actions.adoc
+++ b/antora/components/userguide/modules/fun/pages/object-members/actions.adoc
@@ -58,7 +58,7 @@ In such a case the xref:refguide:applib:index/annotation/ParameterLayout.adoc[@P
 Parameter types can be value types or reference types.
 In the case of primitive types, the end-user can just enter the value directly through the parameter field.
 In the case of reference types however (such as `Product`), a drop-down must be provided from which the end-user to select.
-This is done using either a supporting xref:refguide:applib-cm:methods.adoc#choices[choices] or xref:refguide:applib-cm:methods.adoc#autoComplete[autoComplete] method.
+This is done using either a supporting xref:refguide:applib-methods:prefixes.adoc#choices[choices] or xref:refguide:applib-methods:prefixes.adoc#autoComplete[autoComplete] method.
 The "choices" is used when there is a limited set of options, while "autoComplete" is used when there are large set of options such that the end-user must provide some characters to use for a search.
 
 For example, the `addToBasket(...)` action shown above might well have an autocomplete supporting method :
diff --git a/antora/components/userguide/modules/fun/pages/overview/events.adoc b/antora/components/userguide/modules/fun/pages/overview/events.adoc
index 182581a..f8f4c48 100644
--- a/antora/components/userguide/modules/fun/pages/overview/events.adoc
+++ b/antora/components/userguide/modules/fun/pages/overview/events.adoc
@@ -42,7 +42,7 @@ For example, a cascade delete could be implemented here.
 +
 For example, a business audit event could be implemented here.
 
-For more details on the actual domain event classes, see the xref:refguide:applib-cm:classes/domainevent.adoc[domain event] section of the relevant reference guide.
+For more details on the actual domain event classes, see the xref:refguide:applib-classes:events.adoc#domain-event-classes[domain event] section of the relevant reference guide.
 
 == UI Events
 
diff --git a/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc b/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
index 375803a..0127c94 100644
--- a/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
@@ -97,7 +97,7 @@ There are some disadvantages to using file-based layouts:
 
 * they also suffer from syntactic fragility: an invalid XML document could result in no metadata for the entire class.
 
-The `menubars.layout.xml` file is just the serialized form of a xref:refguide:applib-cm:layout.adoc[MenuBars] layout class defined within Apache Isis' applib.
+The `menubars.layout.xml` file is just the serialized form of a xref:refguide:applib-classes:layout/menubars.adoc[MenuBars] layout class defined within Apache Isis' applib.
 These are JAXB-annotated classes with corresponding XSD schemas; the upshot of that
 is that IDEs such as IntelliJ and Eclipse can provide "intellisense", making it easy to author such layout files.
 
diff --git a/antora/components/userguide/modules/fun/pages/ui/object-layout.adoc b/antora/components/userguide/modules/fun/pages/ui/object-layout.adoc
index 40299b0..a46561c 100644
--- a/antora/components/userguide/modules/fun/pages/ui/object-layout.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui/object-layout.adoc
@@ -24,7 +24,7 @@ There are some downsides, though:
 
 * there is no notion of inheritance, so a `.layout.xml` is required for all concrete classes and also for any abstract classes (if used as a collection type).
 
-The `Xxx.layout.xml` file is just the serialized form of a xref:refguide:applib-cm:layout.adoc[Grid] layout class defined within Apache Isis' applib.
+The `Xxx.layout.xml` file is just the serialized form of a xref:refguide:applib-classes:layout/object-layout.adoc[Grid] layout class defined within Apache Isis' applib.
 These are JAXB-annotated classes with corresponding XSD schemas; the upshot of that is that IDEs such as IntelliJ and Eclipse can provide "intellisense", making iteasy to author such layout files.
 
 == Grids vs Components
@@ -36,7 +36,7 @@ The layout file distinguishes between two types of element:
 
 * those that define common components, of: fieldsets (previously called member groups or property groups), properties, collections, actions and also the title/icon of the domain object itself.
 
-More information about these classes can be found in xref:refguide:applib-cm:layout.adoc[the reference guide].
+More information about these classes can be found in xref:refguide:applib-classes:layout/object-layout.adoc[the reference guide].
 More information on Bootstrap 3's grid system can be found link:http://getbootstrap.com/css/#grid[here].
 
 == By Example
diff --git a/antora/components/userguide/modules/fun/pages/ui/object-titles-and-icons.adoc b/antora/components/userguide/modules/fun/pages/ui/object-titles-and-icons.adoc
index 748af89..5e7484f 100644
--- a/antora/components/userguide/modules/fun/pages/ui/object-titles-and-icons.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui/object-titles-and-icons.adoc
@@ -97,7 +97,7 @@ could return "Arthur C. Clarke".
 
 === Imperative style
 
-Alternatively, the title can be provided simply by implementing the xref:refguide:applib-cm:methods.adoc#title[title()] reserved method.
+Alternatively, the title can be provided simply by implementing the xref:refguide:applib-methods:ui-hints.adoc#title[title()] reserved method.
 
 For example:
 
@@ -200,7 +200,7 @@ public class InvoiceRun {
 
 === Imperative style
 
-To customise the icon on an instance-by-instance basis, we implement the reserved xref:refguide:applib-cm:methods.adoc#iconName[iconName()] method.
+To customise the icon on an instance-by-instance basis, we implement the reserved xref:refguide:applib-methods:ui-hints.adoc#iconName[iconName()] method.
 
 For example:
 
@@ -262,7 +262,7 @@ public class OrderSubscriptions {
 
 == Object CSS Styling
 
-It is also possible for an object to return a xref:refguide:applib-cm:methods.adoc#cssclass[CSS class].
+It is also possible for an object to return a xref:refguide:applib-methods:ui-hints.adoc#cssclass[CSS class].
 In conjunction with a viewer-specific customisation of CSS (eg for the xref:vw:ROOT:about.adoc[Wicket Viewer], seexref:vw:ROOT:customisation.adoc#tweaking-css-classes[here]) this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour.
 
 === Declarative style
@@ -278,7 +278,7 @@ One possible use case would be to render the most important object types with a
 
 === Imperative style
 
-To specify a CSS class on an instance-by-instance basis, we implement the reserved xref:refguide:applib-cm:methods.adoc#cssclass[cssClass()] method.
+To specify a CSS class on an instance-by-instance basis, we implement the reserved xref:refguide:applib-methods:ui-hints.adoc#cssclass[cssClass()] method.
 
 For example:
 
@@ -353,7 +353,7 @@ More generally, for a given domain object `Xxx`, if it has specified a layout `y
 
 === Imperative style
 
-To specify the layout on an instance-by-instance basis, we implement the reserved xref:refguide:applib-cm:methods.adoc#layout[layout()] method.
+To specify the layout on an instance-by-instance basis, we implement the reserved xref:refguide:applib-methods:ui-hints.adoc#layout[layout()] method.
 
 For example:
 
diff --git a/antora/components/userguide/modules/fun/partials/_deployment-options.adoc b/antora/components/userguide/modules/fun/partials/_deployment-options.adoc
index c8ebb4f..e27c6cf 100644
--- a/antora/components/userguide/modules/fun/partials/_deployment-options.adoc
+++ b/antora/components/userguide/modules/fun/partials/_deployment-options.adoc
@@ -11,24 +11,29 @@ By focusing just on the domain, you'll also find that you start to develop a ubi
 
 If you wish, you could combine this with BDD - the framework integrates with xref:testing:specsupport:about.adoc[Cucumber].
 
-Once you've sketched out your domain model, you can then either start-over using your preferred framework, or you might choose to take the domain model forward into more formal specification and testing.
+Once you've sketched out your domain model, you can then either start-over and deploy with one of the deployment options listed below.
 
 
 == Deploy with a generic UI
 
-One of the original motivations for Apache Isis itself was to be able automatically generate a user interface for a domain object model.
+One of the original motivations for Apache Isis was to be able automatically generate a user interface for a domain object model.
+The framework's architecture allows for different user interface technologies.
+The principal implementation is the xref:vw:ROOT:about.adoc[Wicket viewer], which as well as providing an appealing default user interface also has the ability to be customized the user interface by writing new link:http://wicket.apache.org[Apache Wicket] components.
+The framework provides a xref:extensions:ROOT:about.adoc[number of these].
 
-Apache Isis' has a pluggable architecture allowing different user interface technologies.
- The principal implementation is the xref:vw:ROOT:about.adoc[Wicket viewer].
+Deploying on Apache Isis means that the framework also manages object persistence.
+Again this is pluggable.
+There are two implementations, either xref:pjdo:ROOT:about.adoc[JDO (DataNucleus)] or xref:pjpa:ROOT:about.adoc[JPA (EclipseLink)].
+These are normally used with an RDBMS, though in principle could be used with NoSQL databases.
+JDO/DataNucleus historically has link:https://www.datanucleus.org/products/accessplatform/datastores/datastores.html[extensive support] for NoSQL, though JPA/EclipseLink also has link:https://wiki.eclipse.org/EclipseLink/FAQ/NoSQL[some support] also.
 
-This provides an appealing default user interface, with the ability to customize the user interface by writing new link:http://wicket.apache.org[Apache Wicket] components.
-The framework provides a number of xref:extensions:ROOT:about.adoc[Extensions].
 
-Deploying on Apache Isis means that the framework also manages object persistence.
-Again this is pluggable, but the principal implementation is the xref:pjdo:ROOT:about.adoc[JDO/DataNucleus object store].
-Because JDO supports both SQL and NoSQL databases, you can then deploy on a variety of platforms, normally relational but also databases such as link:http://neo4j.com/[Neo4J].
+== Deploy with custom controllers
 
+If the xref:vw:ROOT:about.adoc[Wicket viewer]'s extensions are too restrictive, another option is to deploy custom controllers/views for specific use cases _alongside_ the generic viewer.
+This way you can use the generic viewer to deliver the majority of the app's functionality, but you can justify the additional effort of writing a custom controller for those specialised/high volume use cases where a different flow is needed.
 
+Because Apache Isis runs on top of link:https://spring.io/projects/spring-boot[Spring Boot], you can easily integrate any of the UI technologies supported by Spring, or of course use Apache Wicket for a similar look-n-feel.
 
 
 == Deploy as a REST API
@@ -67,15 +72,18 @@ It is perfectly possible to deploy the RESTful API alongside an auto-generated w
 
 == Deploy on your own platform
 
-The programming model defined by Apache Isis deliberately minimizes the dependencies on the rest of the framework.
+You may be happy to use Apache Isis for prototyping, but have your own proprietary application framework to actually build production apps.
+
+Apache Isis supports this, because the programming model defined by Apache Isis deliberately minimizes the dependencies on the rest of the framework.
 In fact, the only hard dependency that the domain model classes have on Apache Isis is through the `org.apache.isis.applib` classes, mostly to pick up annotations such as xref:refguide:applib:index/annotation/Action.adoc[@Action] and xref:refguide:applib:index/annotation/Property.adoc[@Property].
 It's therefore relatively easy to take a domain object prototyped and/or tested using Apache Isis, but to deploy on some other framework's runtime.
 
 If you are interested in taking this approach, then you will need to provide your own implementations of any framework-provided services used by your code.
 
-Under the covers, Apache Isis itself runs on top of link:https://spring.io/projects/spring-boot[Spring Boot].
-So an alternative option is to develop a custom UI using one of the regular Spring technologies and run that alongside Apache Isis.
-In other words, Apache Isis continues to manage the object lifecycle and persistence as a thin layer on top of Spring, but your custom UI renders the domain objects as you require.
+If your own application framework is based on link:https://spring.io/projects/spring-boot[Spring Boot] and with JPA or JDO, then there is another option.
+As noted above, Apache Isis itself runs on top of Spring Boot.
+You could therefore develop a complete custom UI using one of the regular Spring technologies and run that alongside Apache Isis - in effect the option described <<deploy-with-custom-controllers,earlier>> but for every use case, not just selected ones.
+Apache Isis continues to manage the object lifecycle and persistence as a thin layer on top of Spring, but your custom UI renders the domain objects exactly as you require.
 
 
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm-description.adoc
index 72b8e1c..a0b55f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm-description.adoc
@@ -41,7 +41,7 @@ There are various subclasses available; as we want to replace the component for
 [source,java]
 .WhereInTheWorldPanelFactory.java
 ----
-include::../wicket/WhereInTheWorldPanelFactory.java[tags=class]
+include::../../../../webapp/wicket/ui/custom/WhereInTheWorldPanelFactory.java[tags=class]
 ----
 <.> the framework use the chain-of-responsibility pattern to look for a component factory to render the domain object.
 This `@Order` precedence ensures that this custom implementation is consulted early on.
diff --git a/persistence/jdo/adoc/modules/ROOT/pages/configuring/disabling-persistence-by-reachability.adoc b/persistence/jdo/adoc/modules/ROOT/pages/configuring/disabling-persistence-by-reachability.adoc
index 2f9e98f..aaee4d1 100644
--- a/persistence/jdo/adoc/modules/ROOT/pages/configuring/disabling-persistence-by-reachability.adoc
+++ b/persistence/jdo/adoc/modules/ROOT/pages/configuring/disabling-persistence-by-reachability.adoc
@@ -16,7 +16,7 @@ DataNucleus' persistence-by-reachability may cause performance issues.
 We strongly recommend that you disable it.
 ====
 
-One scenario in particular where this performance issues can arise is if your entities implement the `java.lang.Comparable` interface, and you have used Apache Isis' xref:refguide:applib-cm:classes/utility.adoc#ObjectContracts[ObjectContracts] utility class.
+One scenario in particular where this performance issues can arise is if your entities implement the `java.lang.Comparable` interface, and you have used Apache Isis' xref:refguide:applib:index/util/ObjectContracts.adoc[ObjectContracts] utility class.
 The issue here is that `ObjectContracts` implementation can cause DataNucleus to recursively rehydrate a larger number of associated entities.
 (More detail below).
 
diff --git a/persistence/jdo/adoc/modules/ROOT/pages/configuring/properties.adoc b/persistence/jdo/adoc/modules/ROOT/pages/configuring/properties.adoc
index d2a250c..73c7a87 100644
--- a/persistence/jdo/adoc/modules/ROOT/pages/configuring/properties.adoc
+++ b/persistence/jdo/adoc/modules/ROOT/pages/configuring/properties.adoc
@@ -3,97 +3,13 @@
 
 :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:config:about.adoc[Configuration Guide] includes a xref:refguide:config:sections/jdo-datanucleus.adoc[section] for JDO/Persistence object store, and another xref:refguide:config:sections/jdo-datanucleus-conf.adoc[section] for configuration that is passed through to DataNucleus unchanged.
+The connection to the database is specified using Spring's link:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-connect-to-production-database-configuration[datasource properties]: `spring.datasource.url` and its kin.
 
-WARNING: TODO - v2 - detail on original config properties (not yet reviewed) currently commented out.
 
+DataNucleus configuration properties can be specified and are passed through directly.
+Some of the most common can be found through "intellisense" on `application.properties` or `application.yml`, if your IDE supports it.
+These are listed in the xref:refguide:config:sections/datanucleus.adoc[datanucleus section] of the xref:refguide:config:about.adoc[Configuration Guide].
 
-== Configuration Properties for Apache Isis itself
-
-.JDO/DataNucleus Objectstore Configuration Properties
-[cols="2a,2a,2a", options="header"]
-|===
-|Property
-|Value +
-(_default value_)
-|Description
-
-|`isis.persistor.` +
-`datanucleus.` +
-`standaloneCollection.` +
-`bulkLoad`
-|`true`, `false` +
-(`false`)
-|Enables bulk load of standalone collections.
-
-Further xref:pjdo:ROOT:configuring.adoc#bulk-load[discussion below].
-
-|`isis.persistor.` +
-`datanucleus.` +
-`classMetadataLoadedListener`
-|fully qualified class name +
-(`o.a.i.os.` +
-`jdo.dn.` +
-`CreateSchemaObject` +
-`FromClassMetadata`)
-|The default implementation creates a DB schema object.
-
-There generally is no need to change this from its default.
-
-|`isis.persistor.` +
-`datanucleus.` +
-`RegisterEntities.` +
-`packagePrefix`
-|fully qualified package names, CSV
-|This property is derived automatically derived from the set of modules provided in the xref:refguide:applib-cm:classes/super.adoc#AppManifest[AppManifest], and so does not need to be specified explicitly.
-
-It holds the set of packages to search so that DataNucleus builds its metamodel eagerly rather than lazily.
-
-
-
-|===
-
-
-Also:
-
-
-[cols="2a,1,3a", options="header"]
-|===
-|Property
-|Value +
-(default value)
-|Description
-
-|`isis.persistor.` +
-`disable` +
-`ConcurrencyChecking`
-|`true`,`false` +
-(`false`)
-| Disables concurrency checking globally.  +
-
-Only intended for "emergency use" as a workaround while pending fix/patch to Apache Isis itself.  (Note that there is no "datanucleus" in the property).
-
-|===
-
-
-== Configuration Properties passed through directly to DataNucleus.
-
-.JDO/DataNucleus Objectstore Configuration Properties
-[cols="2a,1,3a", options="header"]
-|===
-|Property
-|Value +
-(_default value_)
-|Description
-
-|`datanucleus.*` and `javax.jdo.*`
-|
-| Passed through directly to Datanucleus
-
-|`datanucleus.persistenceByReachabilityAtCommit`
-|`false`
-|We recommend this setting is disabled.  +
-Further xref:pjdo:ROOT:configuring.adoc#disabling-persistence-by-reachability[discussion below].
-
-|===
+There are also some configuration properties that Apache Isis defines that applies to both JDO and JPA.
+These can be found in the xref:refguide:config:sections/isis.persistence.schema.adoc[isis.persistence.schema] section of the Configuratoin Guide.
 
diff --git a/persistence/jdo/adoc/modules/ROOT/pages/hints-and-tips/overriding-jdo-annotations.adoc b/persistence/jdo/adoc/modules/ROOT/pages/hints-and-tips/overriding-jdo-annotations.adoc
index b2ed645..3093b0e 100644
--- a/persistence/jdo/adoc/modules/ROOT/pages/hints-and-tips/overriding-jdo-annotations.adoc
+++ b/persistence/jdo/adoc/modules/ROOT/pages/hints-and-tips/overriding-jdo-annotations.adoc
@@ -19,7 +19,7 @@ The idea here is simply to use XML as the means by which metadata is specified.
 The idea here is to accommodate for subtle differences in support for SQL between vendors.
 A good example is the default schema for a table: `dbo` for SQL Server, `public` for HSQLDB, `sys` for Oracle, and so on.
 
-If you want to use the first approach (the `.jdo` file), you'll find that you can download the effective XML representation of domain entities using the xref:refguide:applib-cm:classes.adoc#downloadJdoMetadata[downloadJdoMetadata()] mixin action available in prototyping mode.
+If you want to use the first approach (the `.jdo` file), you'll find that you can download the effective XML representation of domain entities using the xref:refguide:persistence:index/jdo/datanucleus/mixins/Persistable_downloadJdoMetadata.adoc[downloadJdoMetadata()] mixin action available in prototyping mode.
 This then needs to be renamed and placed in the appropriate location on the classpath; see the link:http://www.datanucleus.org[DataNucleus documentation] for details.
 
 However, using this first approach does create a maintenance effort; if the domain entity's class structure changes over time, then the XML metadata file will need to be updated.
diff --git a/scripts/verify-isis-release.sh b/scripts/verify-isis-release.sh
index adc7b49..2cc7589 100755
--- a/scripts/verify-isis-release.sh
+++ b/scripts/verify-isis-release.sh
@@ -168,12 +168,12 @@ popd
 
 # Test out simpleapp (jdo) using:
 pushd isis-app-simpleapp-jdo
-mvn spring-boot:run
+mvn -pl webapp spring-boot:run
 popd
 
 # Test out simpleapp (jpa) using:
 pushd isis-app-simpleapp-jpa
-mvn spring-boot:run
+mvn -pl webapp spring-boot:run
 popd
 
 EOF
diff --git a/testing/adoc/modules/ROOT/pages/about.adoc b/testing/adoc/modules/ROOT/pages/about.adoc
index a1074c0..0c0b540 100644
--- a/testing/adoc/modules/ROOT/pages/about.adoc
+++ b/testing/adoc/modules/ROOT/pages/about.adoc
@@ -116,8 +116,7 @@ In the previous section we discussed using given/when/then as a form of organizi
 For integration tests though it can be difficult to keep the "given" short; there could be a lot of prerequisite data that needs to exist before you can actually exercise your system.
 Moreover, however we do set up that data, but we also want to do so in a way that is resilient to the system changing over time.
 
-The solution that Apache Isis provides is
-xref:testing:fixtures:about.adoc[fixture scripts], supported by a domain service (also) called xref:refguide:applib-cm:classes/super.adoc#FixtureScripts[Fixture Scripts].
+The solution that Apache Isis provides is xref:testing:fixtures:about.adoc[fixture scripts], supported by a domain service (also) called xref:testing:fixtures:services/FixtureScripts.adoc[FixtureScripts].
 This defines a pattern (command pattern and composite pattern) with supporting classes to help ensure that the "data setup" for your tests are reusable and maintainable over time.
 
 == Fake data
diff --git a/testing/fixtures/adoc/modules/fixtures/pages/fixture-scripts/api-and-usage.adoc b/testing/fixtures/adoc/modules/fixtures/pages/fixture-scripts/api-and-usage.adoc
index 0fd738e..110c4bb 100644
--- a/testing/fixtures/adoc/modules/fixtures/pages/fixture-scripts/api-and-usage.adoc
+++ b/testing/fixtures/adoc/modules/fixtures/pages/fixture-scripts/api-and-usage.adoc
@@ -89,6 +89,7 @@ You are free, of course, to add additional "convenience" actions into it if you
 
 Let's now look at the `FixtureScript` class, where there's a bit more going on.
 
+[#fixturescript]
 == `FixtureScript`
 
 A fixture script is ultimately just a block of code that can be executed, so it's up to you how you implement it to set up the system.
diff --git a/testing/fixtures/adoc/modules/fixtures/pages/services/FixtureScripts.adoc b/testing/fixtures/adoc/modules/fixtures/pages/services/FixtureScripts.adoc
index cecc5cb..2b40620 100644
--- a/testing/fixtures/adoc/modules/fixtures/pages/services/FixtureScripts.adoc
+++ b/testing/fixtures/adoc/modules/fixtures/pages/services/FixtureScripts.adoc
@@ -1,5 +1,5 @@
 [[FixtureScripts]]
-= `FixtureScripts`
+= FixtureScripts
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :page-partial:
diff --git a/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc b/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
index 5585210..05890a7 100644
--- a/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
+++ b/testing/unittestsupport/adoc/modules/unittestsupport/pages/about.adoc
@@ -43,7 +43,7 @@ If using an RDBMS for persistence then we strongly recommend that you implement
 
 * 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.
+The xref:refguide:applib:index/util/ObjectContracts.adoc[ObjectContracts]  utility class substantially simplifies the task of implementing `Comparable` in your domain classes.
 
 * third, if the relationship is bidirectional then the ORM (JDO/DataNucleus) will automatically maintain the relationship.
 
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/restful-image-property.adoc b/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/restful-image-property.adoc
index c8e7f62..a84cfca 100644
--- a/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/restful-image-property.adoc
+++ b/viewers/restfulobjects/adoc/modules/ROOT/pages/hints-and-tips/restful-image-property.adoc
@@ -19,6 +19,6 @@ This is in the form:
 
     (filename):(mime type):(binary data in base64)
 
-This is basically the xref:refguide:applib-cm:value-types.adoc#Blob[Blob] value type, in string form.
+This is basically the xref:refguide:applib:index/value/Blob.adoc[Blob] value type, in string form.
 
 To use, split the parts then format the mime type and base64 data correctly before using as source in an `<img>` tag.
diff --git a/viewers/restfulobjects/adoc/modules/ROOT/pages/layout-resources.adoc b/viewers/restfulobjects/adoc/modules/ROOT/pages/layout-resources.adoc
index b1283a5..2e81adb 100644
--- a/viewers/restfulobjects/adoc/modules/ROOT/pages/layout-resources.adoc
+++ b/viewers/restfulobjects/adoc/modules/ROOT/pages/layout-resources.adoc
@@ -124,7 +124,8 @@ The representation returned by the domain object resource (section 14.4 of the R
 }
 ----
 
-Note that because of dynamic icons (the xref:refguide:applib-cm:methods.adoc#iconName[iconName()] supporting method) the image returned can vary on an instance-by-instance basis.
+Note that because of dynamic icons (the
+xref:refguide:applib-methods:ui-hints.adoc#iconName[iconName()] supporting method) the image returned can vary on an instance-by-instance basis.
 
 == Domain Object Layout
 
diff --git a/viewers/wicket/adoc/modules/ROOT/pages/features/blob-attachments.adoc b/viewers/wicket/adoc/modules/ROOT/pages/features/blob-attachments.adoc
index 2f674d4..cbba397 100644
--- a/viewers/wicket/adoc/modules/ROOT/pages/features/blob-attachments.adoc
+++ b/viewers/wicket/adoc/modules/ROOT/pages/features/blob-attachments.adoc
@@ -5,7 +5,7 @@
 
 
 
-The Apache Isis application library provides the xref:refguide:applib-cm:value-types.adoc#Blob[Blob] value type (binary large objects) and also the xref:refguide:applib-cm:value-types.adoc#Clob[Clob]
+The Apache Isis application library provides the xref:refguide:applib:index/value/Blob.adoc[Blob] value type (binary large objects) and also the xref:refguide:applib:index/value/Clob.adoc[Clob]
 value type (character large object), each of which also includes metadata about the data (specifically the filename and mime type).
 
 A class can define a property using either of these types, for example: