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 2018/08/05 18:33:00 UTC

[isis] 01/01: ISIS-1810: working on migration notes for 2.0.0-M1

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

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

commit a3b5b9530741cdd294b7caefe742403dbb0fdb78
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Aug 5 19:32:25 2018 +0100

    ISIS-1810: working on migration notes for 2.0.0-M1
---
 adocs/documentation/pom.xml                        |  11 +-
 .../guides/cgcom/_cgcom_cutting-a-release.adoc     |   7 +-
 ...cgcom_release-process-for-interim-releases.adoc |   4 +-
 .../guides/rgant/_rgant-Collection_editing.adoc    |   5 +-
 .../main/asciidoc/guides/rgant/_rgant-Column.adoc  |  12 +-
 .../guides/rgant/_rgant-Property_editing.adoc      |   6 +-
 .../main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc |   6 +-
 .../main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc   | 135 ++---
 adocs/documentation/src/main/asciidoc/index.html   |  69 ++-
 .../_migration-notes_1.16.0-to-2.0.0-M1.adoc       | 541 +++++++++++++++++++++
 .../_migration-notes_1.16.0-to-2.0.0.adoc          | 223 ---------
 .../release-notes/_release-notes_2.0.0-M1.adoc     | 139 ++++++
 .../release-notes/_release-notes_2.0.0.adoc        |   9 -
 .../main/asciidoc/release-notes/release-notes.adoc |   9 +
 core/applib/pom.xml                                |  36 --
 scripts/verify-isis-release.sh                     | 108 ----
 todo-deprecation-list.txt                          | 144 +-----
 17 files changed, 855 insertions(+), 609 deletions(-)

diff --git a/adocs/documentation/pom.xml b/adocs/documentation/pom.xml
index 8da6604..ef23534 100644
--- a/adocs/documentation/pom.xml
+++ b/adocs/documentation/pom.xml
@@ -53,9 +53,10 @@
         <build.dir>${project.basedir}/target/site</build.dir>
 
 	<!-- expected isis-site to be checked out to /c/ASF/isis/isis-site, vs /c/github/apache/isis -->
-        <isis-site-latest.dir>../../../../../ASF/isis/isis-site/latest</isis-site-latest.dir>
-        <isis-site-content.dir>../../../../../ASF/isis/isis-site/content</isis-site-content.dir>
-        <isis-site-search.dir>../../../../../ASF/isis/isis-site/search</isis-site-search.dir>
+        <isis-site.dir>../../../../../ASF/isis/isis-site</isis-site.dir>
+        <isis-site-latest.dir>${isis-site.dir}/latest</isis-site-latest.dir>
+        <isis-site-content.dir>${isis-site.dir}/content</isis-site-content.dir>
+        <isis-site-search.dir>${isis-site.dir}/search</isis-site-search.dir>
         <message>updating content (built from adocs/documentation in isis.git repo)</message>
     </properties>
 
@@ -224,7 +225,7 @@
                                         <delete includeemptydirs="true">
                                             <fileset dir="${isis-site-latest.dir}" includes="**/*"/>
                                         </delete>
-
+p
                                         <echo message=""/>
                                         <echo message=""/>
                                         <mkdir 
@@ -415,7 +416,7 @@
                                         <echo message=""/>
                                         <echo message="TO COMPLETE:"/>
                                         <echo message=""/>
-                                        <echo message="   cd ../../../isis-site"/>
+                                        <echo message="   cd ${isis-site.dir}"/>
                                         <echo message="   sh preview.sh"/>
                                         <echo message="   git commit -am 'some message'"/>
                                         <echo message="   git push"/>
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
index 638b343..291ee95 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
@@ -823,9 +823,12 @@ Once the artifacts have been uploaded, you can call a vote.
 In all cases, votes last for 72 hours and require a +3 (binding) vote from members.
 
 [[__cgcom_cutting-a-release_voting-start-voting-thread]]
-=== Start voting thread on link:mailto:&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g[&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g]
+=== Start voting thread on dev mailing list
 
-The following boilerplate is for a release of the Apache Isis Core. Adapt as required:
+That is, link:mailto:dev@apache.isis.org[]
+
+The following boilerplate is for a release of the Apache Isis Core.
+Adapt as required:
 
 Use the following subject, eg:
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
index 8f6e891..d59a787 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
@@ -9,8 +9,8 @@
 The intent of an "interim" release is to allow a developer team to release their application based on a `-SNAPSHOT` version of the framework.
 Since `-SNAPSHOT` changes on a day-to-day basis, the idea is to tag a particular revision and to release this, thereby providing stability/traceability for the application being developed.
 
-Whereas xref:../cgcom/cgcom.adoc#_cgcom_cutting-a-release.adoc[formal release]s and xref:../cgcom/cgcom.adoc#_cgcom_release-process-for-snapshots.adoc[snapshot release]s are public (released through the Maven repository maintained by Apache Software Foundation), interim releases are non-public and rely on infrastructure provided by a developer team.
-The tagged release resides _not_ in the xref:../../downloads.adoc#__downloads_source_code[official Apache Isis git repository], but instead in a fork/clone maintained by the developer team.
+Whereas xref:../cgcom/cgcom.adoc#\_cgcom_cutting-a-release.adoc[formal release]s and xref:../cgcom/cgcom.adoc#\_cgcom_release-process-for-snapshots.adoc[snapshot release]s are public (released through the Maven repository maintained by Apache Software Foundation), interim releases are non-public and rely on infrastructure provided by a developer team.
+The tagged release resides __not__ in the xref:../../downloads.adoc#\__downloads_source_code[official Apache Isis git repository], but instead in a fork/clone maintained by the developer team.
 
 [NOTE]
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
index c578545..ab7d6f6 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
@@ -21,11 +21,12 @@ Whether a collection is enabled or disabled depends upon these factors:
 
 * whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
 
-* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's collections (and properties) are *not* editable
+* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#\_rgcfg_configuring-core[configuration property] `isis.objects.editing`.
+If set to `false`, then the object's collections (and properties) are *not* editable
 
 * else, then the value of the `@Collection(editing=...)` attribute itself.
 
-* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
+* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#\_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
 
 
 Thus, to make a collection read-only even if the object would otherwise be editable, use:
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
index 08451f0..3691d6a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
@@ -19,7 +19,7 @@ Moreover, while JDO/DataNucleus will recognize annotations on either the field o
 This section identifies which attributes of `@Column` are recognized and used by Apache Isis.
 
 
-
+[[_rgant-Column_allowsNull]]
 == Nullability
 
 The `allowsNull()` attribute is used to specify if a property is mandatory or is optional.
@@ -42,6 +42,7 @@ In the vast majority of cases you should be fine just to add the `@Column#allows
 
 
 
+[[_rgant-Column_length]]
 == Length for ``String``s
 
 The `length()` attribute is used to specify the length of `java.lang.String` property types as they map to `varchar(n)` columns.
@@ -66,6 +67,7 @@ Isis also provides xref:../rgant/rgant.adoc#_rgant-Property_maxLength[`@Property
 
 
 
+[[_rgant-Column_length-scale]]
 == Length/scale for ``BigDecimal``s
 
 
@@ -81,18 +83,21 @@ public class Customer {
     public void setTotalOrdersToDate(BigDecimal totalOrdersToDate) { ... }
 ----
 
-For ``BigDecimal``s it is also possible to specify the xref:../rgant/rgant.adoc#_rgant-Digits[`@Digits`] annotation, whose form is `@Digits(integer, fraction)`.  There is a subtle difference here: while `@Column#scale()` corresponds to `@Digits#fraction()`, the value of `@Column#length()` (ie the precision) is actually the _sum_ of the `@Digits`' `integer()` and `fraction()` parts.
+For ``BigDecimal``s it is also possible to specify the xref:../rgant/rgant.adoc#\_rgant-Digits[`@Digits`] annotation, whose form is `@Digits(integer, fraction)`.
+There is a subtle difference here: while `@Column#scale()` corresponds to `@Digits#fraction()`, the value of `@Column#length()` (ie the precision) is actually the __sum__ of the `@Digits`' `integer()` and `fraction()` parts.
 
 If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.
 
 
 
 
+[[_rgant-Column_hints-and-tips]]
 == Hints and Tips
 
 This seems to be a good place to describe some additional common mappings that use `@Column`.  Unlike the sections above, the attributes specified in these hints and tips aren't actually part of Apache Isis metamodel.
 
 
+[[_rgant-Column_hints-and-tips_mapping-foreign-keys]]
 === Mapping foreign keys
 
 The `name()` attribute can be used to override the name of the column.  References to other objects are generally mapped as foreign key columns.  If there are multiple references to a given type, then you will want to override the name that JDO/DataNucleus would otherwise default.
@@ -114,7 +119,8 @@ public class PartyRelationship {
 
 
 
-== Mapping ``Blob``s and ``Clob``s
+[[_rgant-Column_hints-and-tips_mapping-blobs-and-clobs]]
+=== Mapping ``Blob``s and ``Clob``s
 
 Isis provides custom value types for xref:../rgcms/rgcms.adoc#_rgcms_classes_value-types_Blob[`Blob`]s and xref:../rgcms/rgcms.adoc#_rgcms_classes_value-types_Clob[`Clob`]s.  These value types have multiple internal fields, meaning that they corresponding to multiple columns in the database.  Mapping this correctly requires using  `@Column` within JDO's `@Persistent` annotation.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
index 2740d17..e565f7e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
@@ -11,13 +11,13 @@ The related `editingDisabledReason()` attribute specifies the a hard-coded reaso
 
 Whether a property is enabled or disabled depends upon these factors:
 
-* whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
+* whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#\_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
 
-* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's properties (and collections) are _not_ editable
+* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#\_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's properties (and collections) are __not__ editable
 
 * else, then the value of the `@Property(editing=...)` attribute itself
 
-* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
+* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#\_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
 
 
 Thus, to make a property read-only even if the object would otherwise be editable, use:
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
index 2b8ea74..ad03819 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
@@ -54,15 +54,15 @@ Note that the discriminator overrides the object type that may otherwise be infe
 
 |xref:../rgant/rgant.adoc#_rgant-PersistenceCapable[`@javax.jdo.annotations.` +
 `PersistenceCapable`]
-|Used to build Apache Isis' own internal identifier for objects. +
+|Used to build Apache Isis' own internal identifier for objects.
 
-If the `schema()` attribute is specified (and if xref:../rgant/rgant.adoc#_rgant-Discriminator[`@Discriminator`] _hasn't_ been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] and elsewhere.
+If the `schema()` attribute is specified (and if xref:../rgant/rgant.adoc#\_rgant-Discriminator[`@Discriminator`] __hasn't__ been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] and elsewhere.
 
 |Domain / persistence
 |Class
 
 
-|xref:../rgant/rgant.adoc#_rgant-PrimaryKey[`@javax.jdo.annotations.` +
+|xref:../rgant/rgant.adoc#\_rgant-PrimaryKey[`@javax.jdo.annotations.` +
 `PrimaryKey`]
 |Used to ensure Apache Isis does not overwrite application-defined primary keys, and to ensure is read-only in the UI.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
index 407a933..b67dfc8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
@@ -10,40 +10,36 @@
 [[__rgsvc_intro_types-of-domain-services]]
 == Types of Domain Service
 
-The domain services also group into various broad categories.  Many support functionality of the various layers of the
-system (presentation layer, application layer, core domain, persistence layer); others exist to allow the domain objects
-to integrate with other bounded contexts, or provide various metadata (eg for development-time tooling).  The diagram
-below shows these categories:
+The domain services also group into various broad categories.
+Many support functionality of the various layers of the system (presentation layer, application layer, core domain, persistence layer); others exist to allow the domain objects to integrate with other bounded contexts, or provide various metadata (eg for development-time tooling).
+The diagram below shows these categories:
 
 image::{_imagesdir}reference-services/categories.png[width="600px",link="{_imagesdir}reference-services/categories.png"]
 
 
-A small number of domain services can be considered both API and SPI; a good example is the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_EmailService[`EmailService`] that is of direct use for domain objects wishing to send out emails,
-but is also used by the framework to support the xref:../ugvw/ugvw.adoc#_ugvw_features_user-registration[user registration]
-functionality supported by the xref:../ugvw/ugvw.adoc#[Wicket viewer].   The same is true of the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`]; this can be used by domain objects to broadcast arbitrary events,
-but is also used by the framework to automatically emit events for
+A small number of domain services can be considered both API and SPI; a good example is the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_EmailService[`EmailService`] that is of direct use for domain objects wishing to send out emails, but is also used by the framework to support the xref:../ugvw/ugvw.adoc#_ugvw_features_user-registration[user registration]
+functionality supported by the xref:../ugvw/ugvw.adoc#[Wicket viewer].
+The same is true of the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`]; this can be used by domain objects to broadcast arbitrary events, but is also used by the framework to automatically emit events for
 xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] etc.
 
-For these hybrid services we have categorized the service as an "API" service.  This chapter therefore contains only
-the strictly SPI services.
+For these hybrid services we have categorized the service as an "API" service.
+This chapter therefore contains only the strictly SPI services.
 
-This rest of this guide is broken out into several chapters, one for each of the various types/categories of domain
-service.
+This rest of this guide is broken out into several chapters, one for each of the various types/categories of domain service.
 
 
 
 [[__rgsvc_intro_public-api]]
 == Public API vs Internal Services
 
-The vast majority of Apache Isis' domain services are defined in Apache Isis' applib (`o.a.i.core:isis-core-applib`
-module) as stable, public classes.  Importantly, this also minimizes the coupling between your code and Apache Isis,
-allowing you to easily mock out these services in your unit tests.
+The vast majority of Apache Isis' domain services are defined in Apache Isis' applib (`o.a.i.core:isis-core-applib` module) as stable, public classes.
+Importantly, this also minimizes the coupling between your code and Apache Isis, allowing you to easily mock out these services in your unit tests.
 
 
-The framework also defines a number of "internal" services.  These are not part of the framework's formal API, in that
-they use classes that are outside of the applib.  These internal framework services should be thought of as part of the
-internal design of the framework, and are liable to change from release to release.  The internal framework services 
-are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] guide.
+The framework also defines a number of "internal" services.
+These are not part of the framework's formal API, in that they use classes that are outside of the applib.
+These internal framework services should be thought of as part of the internal design of the framework, and are liable to change from release to release.
+The internal framework services are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] guide.
 
 
 
@@ -51,8 +47,7 @@ are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] gui
 [[__rgsvc_intro_using-the-services]]
 == Using the services
 
-Apache Isis includes an extensive number of domain services for your domain objects to use; simply define the service
-as an annotated field and Apache Isis will inject the service into your object.
+Apache Isis includes an extensive number of domain services for your domain objects to use; simply define the service as an annotated field and Apache Isis will inject the service into your object.
 
 For example:
 
@@ -78,13 +73,9 @@ public class Customer {
 For objects that are already persisted, the service is automatically injected just after the object is rehydrated by
 JDO/DataNucleus.
 
-For transient objects (instantiated programmatically), the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService`]'s
-``instantiate()`` method (or the deprecated xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s
-``newTransientInstance()`` method) will automatically inject the services.
+For transient objects (instantiated programmatically), the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService`]'s ``instantiate()`` method (or the deprecated xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s ``newTransientInstance()`` method) will automatically inject the services.
 
-Alternatively the object can be instantiated simply using `new`, then services injected using
-xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`]'s ``injectServicesInto(...)`` method (or the deprecated
-xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s ``injectServicesInto(...)`` method).
+Alternatively the object can be instantiated simply using `new`, then services injected using xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`]'s ``injectServicesInto(...)`` method (or the deprecated xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s ``injectServicesInto(...)`` method).
 
 
 
@@ -92,23 +83,23 @@ xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObj
 [[__rgsvc_intro_overriding-the-services]]
 == Overriding the services
 
-The framework provides default implementations for many of the domain services.  This is convenient, but sometimes you
-will want to replace the default implementation with your own service implementation.
+The framework provides default implementations for many of the domain services.
+This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
 
 The trick is to use the xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`]
 attribute, specifying a low number (typically `"1"`).
 
 [NOTE]
 ====
-For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern),
-not just the first one.  The services in question are:
+For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern), not just the first one.
+The services in question are:
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ContentMappingService[`ContentMappingService`],
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_GridSystemService[`GridSystemService`], and
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_RoutingService[`RoutingService`].
 ====
 
-For example, suppose you wanted to provide your own implementation of
-xref:../rgsvc/rgsvc.adoc#_rgsvc_api_LocaleProvider[`LocaleProvider`].  Here's how:
+For example, suppose you wanted to provide your own implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_api_LocaleProvider[`LocaleProvider`].
+Here's how:
 
 [source,java]
 ----
@@ -128,9 +119,8 @@ public class MyLocaleProvider implements LocaleProvider {
 <1> takes precedence over the default implementation.
 
 
-It's also quite common to want to decorate the existing implementation (ie have your own implementation delegate to the
-default); this is also possible and quite easy (if using `1.10.0` or later).  The idea is to have the framework
-inject all implementations of the service, and then to delegate to the first one that isn't "this" one:
+It's also quite common to want to decorate the existing implementation (ie have your own implementation delegate to the default); this is also possible and quite easy (if using `1.10.0` or later).
+The idea is to have the framework inject all implementations of the service, and then to delegate to the first one that isn't "this" one:
 
 [source,java]
 ----
@@ -162,14 +152,11 @@ The above code could be improved by caching the delegateLocaleProvider once loca
 [[__rgsvc_intro_commands-and-events]]
 == Command and Events
 
-A good number of the domain services manage the execution of action invocations/property edits, along with the state
-of domain objects that are modified as a result of these.  These services capture information which can then be used
-for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the
-execution be performed in the background at some later date.
+A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these.
+These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.
 
-The diagram below shows how these services fit together.  The outline boxes are services while the coloured boxes
-represent data structures - defined in the applib and therefore accessible to domain applications - which hold various
-information about the executions.
+The diagram below shows how these services fit together.
+The outline boxes are services while the coloured boxes represent data structures - defined in the applib and therefore accessible to domain applications - which hold various information about the executions.
 
 image::{_imagesdir}reference-services/commands-and-events.png[width="960px",link="{_imagesdir}reference-services/commands-and-events.png"]
 
@@ -179,67 +166,49 @@ To explain:
 * the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_CommandContext[`CommandContext`] captures the user's intention to
 invoke an action or edit a property; this is held by the `Command` object.
 
-* if a xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] has been configured, then this will be used to
-create the `Command` object implementation, generally so that it can then also be persisted. +
+* if a xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] has been configured, then this will be used to create the `Command` object implementation, generally so that it can then also be persisted.
 +
-If the action or property is annotated to be invoked in the background (using
-xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command...()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_command[`@Property#command...()`]) then no further work is done. But,
-if the action/property is to be executed in the foreground, then the interaction continues.
-
-* the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service acts as a
-factory for the ``Interaction`` object, which keeps track of the call-graph of executions (``Interaction.Execution``)
-of either action invocations or property edits.  In the majority of cases there is likely to be just a single top-level
-node of this graph, but for applications that use the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`]
-extensively each successive call results in a new child execution.
-
-* before and after each action invocation/property edit, a xref:../rgcms/rgcms.adoc#_rgcms_classes_domainevent[domain event] is
-may be broadcast to all subscribers.  Whether this occurs depends on whether the action/property has been annotated
-(using xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_domainEvent[`@Property#domainEvent()`]). +
+If the action or property is annotated to be invoked in the background (using xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command...()`] or xref:../rgant/rgant.adoc#_rgant-Property_command[`@Property#command...()`]) then no further work is done.
+But, if the action/property is to be executed in the foreground, then the interaction continues.
+
+* the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service acts as a factory for the ``Interaction`` object, which keeps track of the call-graph of executions (``Interaction.Execution``) of either action invocations or property edits.
+In the majority of cases there is likely to be just a single top-level node of this graph, but for applications that use the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] extensively each successive call results in a new child execution.
+
+* before and after each action invocation/property edit, a xref:../rgcms/rgcms.adoc#_rgcms_classes_domainevent[domain event] is may be broadcast to all subscribers.
+Whether this occurs depends on whether the action/property has been annotated (using xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] or xref:../rgant/rgant.adoc#_rgant-Property_domainEvent[`@Property#domainEvent()`]).
 +
 (Note that susbcribers will also receive events for vetoing the action/property; this is not shown on the diagram).
 
-* As each execution progresses, and objects that are modified are "enlisted" into the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service.  Metrics as
-to which objects are merely loaded into memory are also captured using the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] (not shown on the diagram).
+* As each execution progresses, and objects that are modified are "enlisted" into the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service.
+Metrics as to which objects are merely loaded into memory are also captured using the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] (not shown on the diagram).
 
 * At the end of each execution, details of that execution are published through the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service.  This is only done for
-actions/properties annotated appropriate (with xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`]).  +
+xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service.  This is only done for actions/properties annotated appropriate (with xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`] or xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`]).
 +
 The internal service delegates in turn to any registered xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`]s (there may be more than one).
 
-* At the end of each transaction, details of all changed objects are published, again through the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] to any registered `PublisherService` implementations.
+* At the end of each transaction, details of all changed objects are published, again through the (internal) xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] to any registered `PublisherService` implementations.
 Only domain objects specified to be published with
 xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`] are published. +
 +
 [NOTE]
 ====
-Note that it's possible for there to be more than one transaction per top-level interaction, by virtue of the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_TransactionService[`TransactionService`].
+Note that it's possible for there to be more than one transaction per top-level interaction, by virtue of the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_TransactionService[`TransactionService`].
 ====
 
 * Also at the end of each transaction, details of all changed properties are passed to any registered
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`](s) by way of the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] domain service.
+xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`](s) by way of the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] domain service.
 
-Implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can use the `Command#getMemento()`
-method to obtain a XML equivalent of that `Command`, reified using the xref:../rgcms/rgcms.adoc#_rgcms_schema-cmd[`cmd.xsd`]
-schema. This can be converted back into a `CommandDto` using the `CommandDtoUtils` utility class (part of the applib).
+Implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can use the `Command#getMemento()` method to obtain a XML equivalent of that `Command`, reified using the xref:../rgcms/rgcms.adoc#_rgcms_schema-cmd[`cmd.xsd`] schema.
+This can be converted back into a `CommandDto` using the `CommandDtoUtils` utility class (part of the applib).
 
-Similarly, implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] can use the
-`InteractionDtoUtils` utility class to obtain a `InteractionDto` representing the interaction, either just for a single
-execution or for the entire call-graph.  This can be converted into XML in a similar fashion.
+Similarly, implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] can use the `InteractionDtoUtils` utility class to obtain a `InteractionDto` representing the interaction, either just for a single execution or for the entire call-graph.
+This can be converted into XML in a similar fashion.
 
-Likewise, the `PublishedObjects` class passed to the `PublisherService` at the end of the interaction provides the
-`PublishedObjects#getDto()` method which returns a `ChangesDto` instance.  This can be converted into XML using the
-`ChangesDtoUtils` utility class.
+Likewise, the `PublishedObjects` class passed to the `PublisherService` at the end of the interaction provides the `PublishedObjects#getDto()` method which returns a `ChangesDto` instance.
+This can be converted into XML using the `ChangesDtoUtils` utility class.
 
 One final point: multiple xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] implementations are supported because different implementations may have different responsibilities.
 For example, the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication.
 However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling.
-The framework provides a default `PublisherServiceLogging` implementation that logs this using SLF4J.
+The framework provides a default `PublisherServiceLogging` implementation that logs this using SLF4J.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/index.html b/adocs/documentation/src/main/asciidoc/index.html
index 64a863a..f70bd89 100644
--- a/adocs/documentation/src/main/asciidoc/index.html
+++ b/adocs/documentation/src/main/asciidoc/index.html
@@ -254,10 +254,16 @@ table.CodeRay td.code>pre{padding:0}
     <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Versions<span class="caret"></span></a>
      <ul class="dropdown-menu">
       <li><a href="documentation.html">1.16.2 (current)</a></li>
+      <!--
       <li role="separator" class="divider"></li>
-      <li><a href="versions/SNAPSHOT/documentation.html">1.16.3-M1-SNAPSHOT</a></li>
+      <li><a href="versions/SNAPSHOT/documentation.html">2.0.0-M2-SNAPSHOT</a></li>
+      -->
+      <li role="separator" class="divider"></li>
+      <li class="dropdown-header">2.0.0 Milestones</li>
+      <li><a href="versions/2.0.0-M1/documentation.html">2.0.0-M1</a></li>
       <li role="separator" class="divider"></li>
       <li class="dropdown-header">Archive</li>
+      <li><a href="versions/1.16.2/documentation.html">1.16.2</a></li>
       <li><a href="versions/1.16.1/documentation.html">1.16.1</a></li>
       <li><a href="versions/1.16.0/documentation.html">1.16.0</a></li>
       <li><a href="versions/1.15.1/documentation.html">1.15.1</a></li>
@@ -628,11 +634,19 @@ table.CodeRay td.code>pre{padding:0}
         <div class="col-sm-12">
          <h4>Getting started</h4>
          <br/>
-         <p>Start developing your own Apache Isis application using either the minimal <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a> or alternatively with the more structured <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a>.  With the *nix bash shell, use:</p>
+         <p>Start developing your own Apache Isis application using either the minimal <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a> or alternatively with the more structured <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a>.
+          </p>
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-12">
+          To use the current production 1.x version (from a *nix bash shell):
+         <br/>
+         <br/>
         </div>
        </div>
        <div class="row">
-        <div class="col-sm-6">
+        <div class="col-sm-5">
          <div class=panel>
                 <pre>
 mvn archetype:generate  \
@@ -645,7 +659,10 @@ mvn archetype:generate  \
     -B</pre>
          </div>
         </div>
-        <div class="col-sm-6">
+        <div class="col-sm-1">
+         <p>or</p>
+        </div>
+        <div class="col-sm-5">
          <div class=panel>
                 <pre>
 mvn archetype:generate  \
@@ -658,10 +675,52 @@ mvn archetype:generate  \
     -B</pre>
          </div>
         </div>
+        <div class="col-sm-1">
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-12">
+         To use the beta 2.x milestone release, use:
+         <br/>
+         <br/>
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-5">
+         <div class=panel>
+                <pre>
+mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=helloworld-archetype \
+    -D archetypeVersion=2.0.0-M1 \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B</pre>
+         </div>
+        </div>
+        <div class="col-sm-1">
+         <p>or</p>
+        </div>
+        <div class="col-sm-5">
+         <div class=panel>
+                <pre>
+mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=simpleapp-archetype \
+    -D archetypeVersion=2.0.0-M1 \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B</pre>
+         </div>
+        </div>
+        <div class="col-sm-1">
+        </div>
        </div>
        <div class="row">
         <div class="col-sm-12">
-          <p>Adjust as necessary if using Windows `cmd.exe` or Powershell.</p>
+          <p>Adjust as necessary if using Windows.</p>
         </div>
        </div>
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0-M1.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0-M1.adoc
new file mode 100644
index 0000000..84f1647
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0-M1.adoc
@@ -0,0 +1,541 @@
+[[_migration-notes_1.15.0-to-1.16.0]]
+= From v1.16.x to 1.16.0
+: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 [...]
+:_basedir: ../
+:_imagesdir: images/
+
+
+
+
+
+
+
+[[__migration-notes_1.15.0-to-1.16.0_meta-annotations]]
+== Meta annotations
+
+TODO: document
+
+
+
+[[__migration-notes_1.15.0-to-1.16.0_updated-annotations]]
+== Updated annotations
+
+Prior to v2.0.0, several annotation attributes were defined as booleans.
+In order to support xref:migration-notes.adoc#__migration-notes_1.15.0-to-1.16.0_meta-annotations[meta annotations], these have been replaced by enums which also include a `NOT_SPECIFIED` value.
+Other enums have been extended (where necessary) to also have a `NOT_SPECIFIED` value.
+In all cases `NOT_SPECIFIED` is the new default.
+
+
+
+[cols="1a,1a,3a", options="header"]
+|===
+
+| Annotation
+| Modified attribute
+| Change
+
+.7+|xref:../guides/rgant/rgant.adoc#_rgant-Action[`@Action`]
+
+|xref:../guides/rgant/rgant.adoc#_rgant-Action_command[`command`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_hidden[`hidden`]
+| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_invokeOn[`invokeOn`]
+| Default changed from `OBJECT_ONLY` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_publishing[`publishing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_publishing[`publishing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_restrictTo[`restrictTo`]
+| Default changed from `NO_RESTRICTIONS` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Action_semantics[`semantics`]
+| Default changed from `NON_IDEMPOTENT` to `NOT_SPECIFIED`.
+
+
+
+.3+|xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout[`@ActionLayout`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_bookmarking[`bookmarking`]
+| Default changed from `NEVER` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_contributed[`contributed`]
+| Default changed from `AS_BOTH` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_position[`position`]
+| Default changed from `BELOW` to `NOT_SPECIFIED`.
+
+
+.3+|xref:../guides/rgant/rgant.adoc#_rgant-Collection[`@Collection`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Collection_hidden[`hidden`]
+| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Collection_editing[`editing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Collection_mementoSerialization[`mementoSerialization`]
+| Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+
+
+.4+|xref:../guides/rgant/rgant.adoc#_rgant-DomainObject[`@DomainObject`]
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_auditing[`auditing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_bounding[`bounding`]
+| Replaces `bounded`, taking values of `BOUNDED`, `UNBOUNDED` and `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_editing[`editing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_publishing[`publishing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+
+
+.1+|xref:../guides/rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-DomainObjectLayout_bookmarking[`bookmarking`]
+| Default changed from `NEVER` to `NOT_SPECIFIED`.
+
+
+.1+|xref:../guides/rgant/rgant.adoc#_rgant-Parameter[`@Parameter`]
+[cols="1a,3a", options="header"]
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Parameter_optionality[`optionality`]
+| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
+
+
+
+.2+|xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout[`@ParameterLayout`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout_labelPosition[`labelPosition`]
+| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout_renderDay[`renderDay`]
+| Replaces `renderedAsDayBefore`, taking values of `AS_DAY`, `AS_DAY_BEFORE` or `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+
+.6+|xref:../guides/rgant/rgant.adoc#_rgant-Property[`@Property`]
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_commandReification[`commandReification`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_editing[`editing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_hidden[`hidden`]
+| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_mementoSerialization[`mementoSerialization`]
+| Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_optionality[`optionality`]
+| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
+
+| xref:../guides/rgant/rgant.adoc#_rgant-Property_publishing[`publishing`]
+| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
+
+
+
+.5+|xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout[`@PropertyLayout`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[`labelPosition`]
+| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`promptStyle`]
+| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_renderDay[`renderDay`]
+| Replaces `notPersisted`, taking values of `AS_DAY`, `AS_DAY_BEFORE` or `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+
+| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_repainting[`repainting`]
+| Replaces `unchanging`, taking values of `REPAINT`, `NO_REPAINT` or `NOT_SPECIFIED`.
+Defaults to `NOT_SPECIFIED`.
+
+
+
+.1+|xref:../guides/rgant/rgant.adoc#_rgant-ViewModelLayout[`@ViewModelLayout`]
+
+| xref:../guides/rgant/rgant.adoc#_rgant-ViewModelLayout_bookmarking[`bookmarking`]
+| adds new NOT_SPECIFIED value
+
+
+|===
+
+
+
+
+[[__migration-notes_1.15.0-to-1.16.0_removed-annotations]]
+== Removed annotations/attributes
+
+[cols="1l,1l,3a", options="header"]
+|===
+
+| Annotation
+| Attribute
+| Use instead
+
+|@Action
+|publishingPayloadFactory()
+|Removed, use the simpler xref:../guides/rgsvc/rgsvc.adoc#PublisherService[PublisherService] SPI instead.
+
+
+|@ActionInteraction
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_domainEvent[`@Action#domainEvent()`]
+
+|@ActionOrder
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_MemberOrder[`@MemberOrder()`]
+
+|@Aggregated
+|
+|Never implemented internally in Isis 1.x so no replacement.
+
+|@Audited
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_audited[`@DomainObject#auditing()`]
+
+|@AutoComplete
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_autoComplete[`@DomainObject#autoComplete()`]
+
+|@ActionSemantics
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_semantics[`@Action#semantics()`]
+
+|@Bookmarkable
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_bookmarking[`@DomainObject#bookmarking()`]
+
+|@Bounded
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_bounding[`@DomainObject#bounding()`]
+
+|@Bulk
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_invokeOn[`@Action#invokeOn()`]
+
+Similarly, the `Bulk.InteractionContext` domain service is replaced with the xref:../guides/rgsvc/rgsvc.adoc#ActionInvocationContext[ActionInvocationContext] domain service.
+
+
+|@Collection
+| notPersisted
+| Removed, replaced with xref:../guides/rgant/rgant.adoc#_rgant_Collection_mementoSerialization[`@Collection#mementoSerialization()`]
+
+|@CollectionInteraction
+|
+| xref:../guides/rgant/rgant.adoc#_rgant_Collection_domainEvent[`@Collection
+#domainEvent()`]
+
+|@CollectionLayout
+|render()
+|xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_defaultView[`@CollectionLayout#defaultView()`]
+
+|@Command
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_command[`@Action#command()`]
+
+|@CssClass
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_cssClass[`@ActionLayout#cssClass()`], xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_cssClass[`@PropertyLayout#cssClass()`], xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_cssClass[`@CollectionLayout#cssClass()`], xref:../guides/rgant/rgant.adoc#_rgant_ParameterLayout_cssClass[`@ParameterLayout#cssClass()`], xref:../guides/rgant/rgant.adoc#_rgant_DomainObjectLayout_cssClass[`@DomainObjectLayout#cssClass()`] or xr [...]
+
+|@CssClassFa
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_cssClassFa[`@ActionLayout#cssClassFa()`], xref:../guides/rgant/rgant.adoc#_rgant_DomainObjectLayout_cssClassFa[`@DomainObjectLayout#cssClassFa()`] or xref:../guides/rgant/rgant.adoc#_rgant_ViewModelLayout_cssClassFa[`@ViewModelLayout#cssClassFa()`].
+
+|@Debug
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_restrictTo[`@Action#restrictTo()`]
+
+|@DescribedAs
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_describedAs[`@ActionLayout#describedAs()`], xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_describedAs[`@PropertyLayout#describedAs()`], xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_describedAs[`@CollectionLayout#describedAs()`], xref:../guides/rgant/rgant.adoc#_rgant_ParameterLayout_describedAs[`@ParameterLayout#describedAs()`], xref:../guides/rgant/rgant.adoc#_rgant_DomainObjectLayout_describedAs[`@DomainObje [...]
+
+|@Disabled
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Property_editingDisabledReason[`@Property#editingDisabledReason()`]
+
+.2+|@DomainObject
+|bounded
+|Deleted (was a boolean attribute), replaced by xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_bounding[`@Property#bounding`]
+
+|publishingPayloadFactory
+|Removed, use the simpler xref:../guides/rgsvc/rgsvc.adoc#PublisherService[PublisherService] SPI instead.
+
+
+
+|@Exploration
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_restrictTo[`@Action#restrictTo()`]
+
+|@FieldOrder
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_MemberOrder[`@MemberOrder()`]
+
+|@Hidden
+|
+|For actions by either xref:../guides/rgant/rgant.adoc#_rgant_Action_hidden[`@Action#hidden()`] or xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_hidden[`@ActionLayout#hidden()`], for properties by either xref:../guides/rgant/rgant.adoc#_rgant_Property_hidden[`@Property#hidden()`] or xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_hidden[`@PropertyLayout#hidden()`], for collections by either xref:../guides/rgant/rgant.adoc#_rgant_Collection_hidden[`@Collection#hidden()`] or xr [...]
+
+|@Idempotent
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_semantics[`@Action#semantics()`]
+
+|@Ignore
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Programmatic[`@Programmatic`]
+
+|@Immutable
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_editing[`@DomainObject#editing()`]
+
+|@Mandatory
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_optionality[`@Property#optionality()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_optionality[`@Parameter#optionality()`].
+
+For properties, can also use xref:../guides/rgant/rgant.adoc#_rgant_Column_allowsNull[`@Column#allowsNull()`]
+Can also use xref:../guides/rgant/rgant.adoc#_rgant_Nullable[`@Nullable`] for either properties or parameters.
+
+|@Mask
+|
+|Removed, never implemented internally in Isis 1.x so no replacement.
+
+|@MaxLength
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_maxLength[`@Property#maxLength()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_maxLength[`@Parameter#maxLength()`].
+
+For properties, can also use xref:../guides/rgant/rgant.adoc#_rgant_Column_length[`@Column#length()`]
+
+|@MemberGroups
+|
+|xref:../guides/ugvw/ugvw.adoc#_ugvw_layout_file-based[.layout.xml] file instead.
+
+|@MultiLine
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_multiLine[`@PropertyLayout#multiLine()`] or xref:../guides/rgant/rgant.adoc#_rgant_ParameterLayout_multiLine[`@ParameterLayout#multiLine()`].
+
+|@MustSatisfy
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_mustSatisfy[`@Property#mustSatisfy()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_mustSatisfy[`@Parameter#mustSatisfy()`].
+
+|@NotPersisted
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Property_notPersisted[`@Property#notPersisted()`].
+
+|@Optional
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_optionality[`@Property#optionality()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_optionality[`@Parameter#optionality()`].
+
+For properties, can also use xref:../guides/rgant/rgant.adoc#_rgant_Column_allowsNull[`@Column#allowsNull()`]
+Can also use xref:../guides/rgant/rgant.adoc#_rgant_Nullable[`@Nullable`] for either properties or parameters.
+
+|@Named
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_named[`@ActionLayout#named()`], xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_named[`@PropertyLayout#named()`], xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_named[`@CollectionLayout#named()`], xref:../guides/rgant/rgant.adoc#_rgant_ParameterLayout_named[`@ParameterLayout#named()`], xref:../guides/rgant/rgant.adoc#_rgant_DomainObjectLayout_named[`@DomainObjectLayout#named()`] or xref:../guides/rgant/rgant.adoc# [...]
+
+|@NotInServiceMenu
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainService_nature[`@DomainService#nature()`]
+
+Specify nature of `VIEW_CONTRIBUTIONS_ONLY`.
+Alternatively, use a xref:../guides/rgant/rgant.adoc#_rgant_Mixin[mixin].
+
+|@NotContributed
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainService_nature[`@DomainService#nature()`]
+
+Specify nature of `VIEW_MENU_ONLY`.
+
+|@NotPersistable
+|
+|Never implemented internally in Isis 1.x so no replacement.
+
+|@ObjectType
+|
+|Removed, xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_objectType[`@DomainObject#objectType()`] or xref:../guides/rgant/rgant.adoc#_rgant_DomainService_objectType[`@DomainService#objectType()`]
+
+Alternatively, for domain entities either:
+
+* the xref:../guides/rgant/rgant.adoc#_rgant_Discriminator[`@Discriminator`] annotation can be specified; the value is used as the object type, or
+* the xref:../guides/rgant/rgant.adoc#_rgant_PersistenceCapable_schema[`@PersistenceCapable#schema()`] can be specified; the value is used as the concatenated with the class name to create a two part object type.
+
+|@Parameter
+|minLength()
+|Never implemented internally in Isis 1.x so no replacement.
+
+Note that the xref:../guides/rgant/rgant.adoc#_rgant_MinLength[`@MinLength`] annotation is for use with autocomplete supporting methods (specifying the minimum number of characters to enter before an auto-complete search is performed).
+
+
+|@Paged
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_paged[`@CollectionLayout#paged()`] (for parented collections), or xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_paged[`@DomainObject#paged()`] (for standalone collections)
+
+|@ParameterLayout
+| renderedAsDayBefore
+|Deleted (was a boolean attribute), replaced by xref:../guides/rgant/rgant.adoc#_rgant_ParameterLayout_renderDay[`@ParameterLayout#renderDay`].
+
+
+|@Plural
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObjectLayout_plural[`@DomainObjectLayout#plural()`]
+
+|@PostsAction
+InvokedEvent
+|
+| xref:../guides/rgant/rgant.adoc#_rgant_Action_domainEvent[`@Action#domainEvent()`]
+
+|@PostsCollection
+AddedToEvent
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Collection_domainEvent[`@Collection#domainEvent()`]
+
+|@PostsCollection
+RemovedFromEvent
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Collection_domainEvent[`@Collection#domainEvent()`]
+
+|@PostsProperty
+ChangedEvent
+|
+| xref:../guides/rgant/rgant.adoc#_rgant_Property_domainEvent[`@Property#domainEvent()`]
+
+|@Property
+| notPersisted
+| Removed, replaced with xref:../guides/rgant/rgant.adoc#_rgant_Collection_mementoSerialization[`@Collection#mementoSerialization()`]
+
+|@PropertyInteraction
+|
+| xref:../guides/rgant/rgant.adoc#_rgant_Property_domainEvent[`@Property#domainEvent()`]
+
+.2+|@PropertyLayout
+| renderedAsDayBefore
+|Deleted (was a boolean attribute), replaced by xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_renderDay[`@PropertyLayout#renderDay`].
+
+| unchanging
+| Deleted (was a boolean attribute), replaced by by xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_repainting[`@PropertyLayout#repainting`].
+
+
+|@Prototype
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_restrictTo[`@Action#restrictTo()`]
+
+|@PublishedAction
+|
+|Removed, use xref:../guides/rgant/rgant.adoc#_rgant-Action_publishing[@Action#publishing()]
+
+|@PublishedObject
+|
+|Removed, use xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_publishing[@DomainObject#publishing()]
+
+|@PublishingPayload
+FactoryForAction
+|
+|Removed, use the simpler xref:../guides/rgsvc/rgsvc.adoc#PublisherService[PublisherService] SPI instead.
+
+|PublishingPayload
+FactoryForObject
+|
+|Removed, use the simpler xref:../guides/rgsvc/rgsvc.adoc#PublisherService[PublisherService] SPI instead.
+
+|@QueryOnly
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_Action_semantics[`@Action#semantics()`]
+
+|@Regex
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_regexPattern[`@Property#regexPattern()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_regexPattern[`@Parameter#regexPattern()`].
+
+|@Render
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_defaultView[`@CollectionLayout#defaultView()`]
+
+Supporting `RenderType` enum also removed.
+
+|@RenderedAs
+DayBefore
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_Property_renderDay[`@Property#renderDay()`] or xref:../guides/rgant/rgant.adoc#_rgant_Parameter_renderDay[`@Parameter#renderDay()`].
+
+|@Resolve
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_defaultView[`@CollectionLayout#defaultView()`]
+
+|@SortedBy
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_sortedBy[`@CollectionLayout#sortedBy()`]
+
+|@TypeOf
+|
+|Either xref:../guides/rgant/rgant.adoc#_rgant_CollectionLayout_typeOf[`@CollectionLayout#typeOf()`] (for parented collections), or xref:../guides/rgant/rgant.adoc#_rgant_ActionLayout_typeOf[`@ActionLayout#typeOf()`] (for actions returning a standalone collection).
+
+|@TypicalLength
+|
+|xref:../guides/rgant/rgant.adoc#_rgant_PropertyLayout_typicalLength[`@PropertyLayout#typicalLength()`].
+
+
+|===
+
+
+[[__migration-notes_1.15.0-to-1.16.0_removed-interfaces]]
+== Removed interfaces
+
+[cols="1a,3a", options="header"]
+|===
+
+| Removed interface
+| Replaced with
+
+|`Auditable` +
+(JDO applib)
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_audited[`@DomainObject#auditing()`]
+
+|`Bounded` +
+(JDO applib)
+|xref:../guides/rgant/rgant.adoc#_rgant_DomainObject_bounding[`@DomainObject#bounding()`]
+
+|`NotPersistable` +
+(JDO applib)
+|Never implemented internally in Isis 1.x so no replacement.
+
+|`ProgramPersistable` +
+(JDO applib)
+|Never implemented fully in Isis 1.x so no replacement.
+
+|`AlwaysImmutable` +
+(JDO applib)
+|Never implemented fully in Isis 1.x so no replacement.
+
+|`ImmutableOncePersisted` +
+(JDO applib)
+|Never implemented fully in Isis 1.x so no replacement.
+
+|`ImmutableUntilPersisted` +
+(JDO applib)
+|Never implemented fully in Isis 1.x so no replacement.
+
+|`NeverImmutable` +
+(JDO applib)
+|Never implemented fully in Isis 1.x so no replacement.
+
+
+|===
+
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0.adoc
deleted file mode 100644
index 3e073ca..0000000
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.16.0-to-2.0.0.adoc
+++ /dev/null
@@ -1,223 +0,0 @@
-[[_migration-notes_1.15.0-to-1.16.0]]
-= From v1.16.x to 1.16.0
-: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 [...]
-:_basedir: ../
-:_imagesdir: images/
-
-
-
-
-
-
-== Removed annotations
-
-TODO: document
-
-== Meta annotations
-
-TODO: document
-
-== Updated annotations
-
-Prior to v2.0.0, several annotation attributes were defined as booleans.
-In order to support meta annotations, these have been replaced by enums which also include a `NOT_SPECIFIED` value.
-Other enums have been extended (where necessary) to also have a `NOT_SPECIFIED` value.
-In all cases `NOT_SPECIFIED` is the new default.
-
-
-.xref:../guides/rgant/rgant.adoc#_rgant-Action[`@Action`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| Modified attribute
-| Change
-
-|xref:../guides/rgant/rgant.adoc#_rgant-Action_command[`command`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Action_hidden[`hidden`]
-| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Action_invokeOn[`invokeOn`]
-| Default changed from `OBJECT_ONLY` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Action_publishing[`publishing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Action_restrictTo[`restrictTo`]
-| Default changed from `NO_RESTRICTIONS` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Action_semantics[`semantics`]
-| Default changed from `NON_IDEMPOTENT` to `NOT_SPECIFIED`.
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout[`@ActionLayout`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_bookmarking[`bookmarking`]
-| Default changed from `NEVER` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_contributed[`contributed`]
-| Default changed from `AS_BOTH` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout_position[`position`]
-| Default changed from `BELOW` to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-Collection[`@Collection`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Collection_hidden[`hidden`]
-| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Collection_editing[`editing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Collection_mementoSerialization[`mementoSerialization`]
-| Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-| `notPersisted`
-| Removed, replaced with `mementoSerialization`
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-DomainObject[`@DomainObject`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_auditing[`auditing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| `bounded`
-| Deleted (was a boolean attribute), replaced by `bounding` (below)
-
-| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_bounding[`bounding`]
-| Replaces `bounded`, taking values of `BOUNDED`, `UNBOUNDED` and `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_editing[`editing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_publishing[`publishing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-DomainObjectLayout_bookmarking[`bookmarking`]
-| Default changed from `NEVER` to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-Parameter[`@Parameter`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Parameter_optionality[`optionality`]
-| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout[`@ParameterLayout`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout_labelPosition[`labelPosition`]
-| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
-
-| `renderedAsDayBefore`
-| Deleted (was a boolean attribute), replaced by `renderDay`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ParameterLayout_renderDay[`renderBay`]
-| Replaces `notPersisted`, taking values of `AS_DAY`, `AS_DAY_BEFORE` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-Property[`@Property`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_commandReification[`commandReification`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_editing[`editing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_hidden[`hidden`]
-| Default changed from `NOWHERE` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_mementoSerialization[`mementoSerialization`]
-| Replaces `notPersisted`, taking values of `INCLUDED`, `EXCLUDED` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-| `notPersisted`
-| Removed, replaced with `mementoSerialization`
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_optionality[`optionality`]
-| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-Property_publishing[`publishing`]
-| Default changed from `AS_CONFIGURED` to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout[`@PropertyLayout`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[`labelPosition`]
-| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
-
-
-| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`promptStyle`]
-| Default changed from `DEFAULT` to `NOT_SPECIFIED`.
-
-
-| `renderedAsDayBefore`
-| Deleted (was a boolean attribute), replaced by `renderDay`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_renderDay[`renderBay`]
-| Replaces `notPersisted`, taking values of `AS_DAY`, `AS_DAY_BEFORE` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-
-| `unchanging`
-| Deleted (was a boolean attribute), replaced by `repainting`.
-
-| xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout_repainting[`repainting`]
-| Replaces `unchanging`, taking values of `REPAINT`, `NO_REPAINT` or `NOT_SPECIFIED`.
-Defaults to `NOT_SPECIFIED`.
-
-
-|===
-
-.xref:../guides/rgant/rgant.adoc#_rgant-ViewModelLayout[`@ViewModelLayout`] attributes
-[cols="1a,3a", options="header"]
-|===
-
-| xref:../guides/rgant/rgant.adoc#_rgant-ViewModelLayout[`@ViewModelLayout`]
-| xref:../guides/rgant/rgant.adoc#_rgant-ViewModelLayout_bookmarking[`bookmarking`]
-| adds new NOT_SPECIFIED value
-
-
-|===
-
-
diff --git a/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0-M1.adoc b/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0-M1.adoc
new file mode 100644
index 0000000..8bcc0c3
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0-M1.adoc
@@ -0,0 +1,139 @@
+[[_release-notes_2.0.0-M1]]
+= 2.0.0-M1
+: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 [...]
+:_basedir: ../
+:_imagesdir: images/
+:toc: right
+
+
+
+
+This is the first milestone release for Apache Isis 2.0
+
+Apache Isis 2.0 upgrades the framework to require Java 8 and above, and along the way upgrades DataNucleus ORM to 5.1 and Wicket to 8.0.
+
+Notable new features include support for meta-annotations (both Apache Isis annotations and DataNucleus).
+
+Features deprecated in Apache Isis 1.x (most notably, domain services and annotations) have been removed.
+The most significant domain service removed is `DomainObjectContainer`.
+
+
+
+== New Feature
+
+* link:https://issues.apache.org/jira/browse/ISIS-1969[ISIS-1969] - Distribute Isis as a Docker image, with the libraries in Tomcat's lib/ folder (skinny wars)
+* link:https://issues.apache.org/jira/browse/ISIS-1809[ISIS-1809] - Convenience adapter implementations of UrlEncodingService
+* link:https://issues.apache.org/jira/browse/ISIS-1740[ISIS-1740] - New Feature: Where am I
+* link:https://issues.apache.org/jira/browse/ISIS-1726[ISIS-1726] - Support DataNucleus meta annotations for @PersistenceCapable.
+* link:https://issues.apache.org/jira/browse/ISIS-1632[ISIS-1632] - Support meta annotations for @Property/@Collection/@Action + @XxxLayout
+* link:https://issues.apache.org/jira/browse/ISIS-1056[ISIS-1056] - [DUPLICATE] Support user-defined annotations (as per Spring and JSR-303 etc).
+
+
+== Improvement
+
+* link:https://issues.apache.org/jira/browse/ISIS-1961[ISIS-1961] - ResourceCachingFilter: Suppress 'client connection abort' exceptions.
+* link:https://issues.apache.org/jira/browse/ISIS-1959[ISIS-1959] - Update to Wicket 8
+* link:https://issues.apache.org/jira/browse/ISIS-1958[ISIS-1958] - Integration Tests: HSQL-DB is forced upon users
+* link:https://issues.apache.org/jira/browse/ISIS-1956[ISIS-1956] - Remove dependencies on guava from unittestsupport
+* link:https://issues.apache.org/jira/browse/ISIS-1955[ISIS-1955] - Allow for ErrorReportingService Tickets to render arbitrary HTML
+* link:https://issues.apache.org/jira/browse/ISIS-1954[ISIS-1954] - JUnit 5 support
+* link:https://issues.apache.org/jira/browse/ISIS-1950[ISIS-1950] - Add a ByteBuddy plugin implementing proxy-factory mechanics
+* link:https://issues.apache.org/jira/browse/ISIS-1949[ISIS-1949] - Make proxy-factory mechanics a plugin (Javassist)
+* link:https://issues.apache.org/jira/browse/ISIS-1948[ISIS-1948] - Remove Javassist as a dependency
+* link:https://issues.apache.org/jira/browse/ISIS-1942[ISIS-1942] - New Facet: XmlAccessorTypeFacet
+* link:https://issues.apache.org/jira/browse/ISIS-1935[ISIS-1935] - Remove the requirement for event-bus plugins to implement QueryResultCacheControl
+* link:https://issues.apache.org/jira/browse/ISIS-1932[ISIS-1932] - Consolidation of Collection Utility classes
+* link:https://issues.apache.org/jira/browse/ISIS-1931[ISIS-1931] - ServicesInjector: Reduce Heap Pollution
+* link:https://issues.apache.org/jira/browse/ISIS-1930[ISIS-1930] - PersistenceSession: Reduce Heap Pollution
+* link:https://issues.apache.org/jira/browse/ISIS-1928[ISIS-1928] - Don't log ERROR if fail to authenticate (INFO is enough)
+* link:https://issues.apache.org/jira/browse/ISIS-1911[ISIS-1911] - TranslationServicePo: new config option to disable the service
+* link:https://issues.apache.org/jira/browse/ISIS-1910[ISIS-1910] - Rename IsisJdoSupport0 back to its original name
+* link:https://issues.apache.org/jira/browse/ISIS-1906[ISIS-1906] - Programming Model: @Parent needs replacement
+* link:https://issues.apache.org/jira/browse/ISIS-1904[ISIS-1904] - gitlab setup, supporting CI/CD builds with externalized version
+* link:https://issues.apache.org/jira/browse/ISIS-1897[ISIS-1897] - applib: the new ObjectContracts needs backward compatibility
+* link:https://issues.apache.org/jira/browse/ISIS-1896[ISIS-1896] - Swagger-UI: provide a link for convenient login to restful API
+* link:https://issues.apache.org/jira/browse/ISIS-1891[ISIS-1891] - Make jax-rs provider (resteasy) a plugin
+* link:https://issues.apache.org/jira/browse/ISIS-1881[ISIS-1881] - Package swagger-ui web-content with metamodel module
+* link:https://issues.apache.org/jira/browse/ISIS-1846[ISIS-1846] - Code deduplication (new Internal API)
+* link:https://issues.apache.org/jira/browse/ISIS-1844[ISIS-1844] - API cleanup: make any unchecked casts explicit
+* link:https://issues.apache.org/jira/browse/ISIS-1843[ISIS-1843] - remove occurences of Thread.currentThread().getContextClassLoader()
+* link:https://issues.apache.org/jira/browse/ISIS-1842[ISIS-1842] - API cleanup: add generic type arguments where missing
+* link:https://issues.apache.org/jira/browse/ISIS-1830[ISIS-1830] - Eliminate dependence on any JDK internal APIs (jdeps JDK 9)
+* link:https://issues.apache.org/jira/browse/ISIS-1827[ISIS-1827] - Remove dependencies on guava from isis-core-applib (public API)
+* link:https://issues.apache.org/jira/browse/ISIS-1823[ISIS-1823] - Config property for disabling footer entirly
+* link:https://issues.apache.org/jira/browse/ISIS-1818[ISIS-1818] - new config property: max navigable parent chain length
+* link:https://issues.apache.org/jira/browse/ISIS-1817[ISIS-1817] - new config property that allows to disable the where-am-i feature
+* link:https://issues.apache.org/jira/browse/ISIS-1779[ISIS-1779] - Transition to JAX-RS 2.0 Client API
+* link:https://issues.apache.org/jira/browse/ISIS-1775[ISIS-1775] - Context-Path support for SwaggerService
+* link:https://issues.apache.org/jira/browse/ISIS-1763[ISIS-1763] - Change @DomainObject#bounded (a boolean) to @DomainObject#bounding (an enum)
+* link:https://issues.apache.org/jira/browse/ISIS-1762[ISIS-1762] - Java 8+ Miscellaneous Utilities
+* link:https://issues.apache.org/jira/browse/ISIS-1756[ISIS-1756] - JEE Support - proper life-cycling
+* link:https://issues.apache.org/jira/browse/ISIS-1755[ISIS-1755] - JEE Support - let CDI ignore certain beans
+* link:https://issues.apache.org/jira/browse/ISIS-1753[ISIS-1753] - Plugable support for guava and axon event bus implementation.
+* link:https://issues.apache.org/jira/browse/ISIS-1744[ISIS-1744] - Update DataNucleus to the latest version (5.1.5 or later)
+* link:https://issues.apache.org/jira/browse/ISIS-1742[ISIS-1742] - Remove deprecated annotations, methods etc.
+* link:https://issues.apache.org/jira/browse/ISIS-1727[ISIS-1727] - Minor internal refactorings from upgrade to JDK 8
+* link:https://issues.apache.org/jira/browse/ISIS-1725[ISIS-1725] - Simplify bootstrapping logic by requiring an AppManifest to be supplied, remoev cfg property
+* link:https://issues.apache.org/jira/browse/ISIS-1724[ISIS-1724] - Remove JDO applib's IsisJdoSupport
+* link:https://issues.apache.org/jira/browse/ISIS-1723[ISIS-1723] - Remove JDO applib's Auditable interface and @Auditable annotation
+* link:https://issues.apache.org/jira/browse/ISIS-1683[ISIS-1683] - Move org.apache.isis.applib.services.timestamp.Timestampable to mixins.timestamp
+* link:https://issues.apache.org/jira/browse/ISIS-1682[ISIS-1682] - Move org.apache.isis.applib.services.layout.Object_downloadLayoutXml mixins out of services.layout and into mixins.layout
+* link:https://issues.apache.org/jira/browse/ISIS-1681[ISIS-1681] - Move wrapper factory events (eg org.apache.isis.applib.events.AccessEvent) to subpackage of services.wrapper
+* link:https://issues.apache.org/jira/browse/ISIS-1680[ISIS-1680] - Move event classes (eg org.apache.isis.applib.services.eventbus.AbstractDomainEvent) out of services.eventbus and into applib.events (subpackages thereof)
+* link:https://issues.apache.org/jira/browse/ISIS-1679[ISIS-1679] - Move org.apache.isis.applib.services.dto.Dto to org.apache.isis.applib.mixins
+
+
+== Bug
+
+* link:https://issues.apache.org/jira/browse/ISIS-1963[ISIS-1963] - Wicket UI: IllegalArgumentExceptions after persistent field update using AJAX
+* link:https://issues.apache.org/jira/browse/ISIS-1957[ISIS-1957] - ServiceInjector fails to handle Generic Types in target fields of type List
+* link:https://issues.apache.org/jira/browse/ISIS-1946[ISIS-1946] - Running with o.a.i.WebServer throws exception due to empty context path.
+* link:https://issues.apache.org/jira/browse/ISIS-1941[ISIS-1941] - [NOT A PROBLEM] Metamodel: XmlJavaTypeAdapterFacetFactory broken somehow
+* link:https://issues.apache.org/jira/browse/ISIS-1940[ISIS-1940] - MultiSelect Action Invocation throws IllegalArgumentException
+* link:https://issues.apache.org/jira/browse/ISIS-1939[ISIS-1939] - Internal API: Memento deserialization requires proper class-loader
+* link:https://issues.apache.org/jira/browse/ISIS-1929[ISIS-1929] - Skinny WAR Redeployment: Isis Core Plugins might not be resolved
+* link:https://issues.apache.org/jira/browse/ISIS-1887[ISIS-1887] - Metamodel: restore java.sql.Timestamp support
+* link:https://issues.apache.org/jira/browse/ISIS-1880[ISIS-1880] - LocalResourcePath: new value type for local URLs
+* link:https://issues.apache.org/jira/browse/ISIS-1870[ISIS-1870] - Fix JUnit Tests previously not picked up by surefire
+* link:https://issues.apache.org/jira/browse/ISIS-1869[ISIS-1869] - Surefire does not pick up all relevant tests
+* link:https://issues.apache.org/jira/browse/ISIS-1868[ISIS-1868] - Eclipse fails to build the schema module
+* link:https://issues.apache.org/jira/browse/ISIS-1866[ISIS-1866] - Metamodel: 38 JUnit Test Failures
+* link:https://issues.apache.org/jira/browse/ISIS-1865[ISIS-1865] - Wicket-Impl: Some JUnit tests are failing
+* link:https://issues.apache.org/jira/browse/ISIS-1852[ISIS-1852] - Iterating over query result list with parallelStream produces next exception
+* link:https://issues.apache.org/jira/browse/ISIS-1821[ISIS-1821] - Metadata validation failure when no @Nullable is present
+* link:https://issues.apache.org/jira/browse/ISIS-1736[ISIS-1736] - ConfigurationServiceDefault is inconsistent
+* link:https://issues.apache.org/jira/browse/ISIS-1721[ISIS-1721] - Isis should optionally not override the default values of entities.
+* link:https://issues.apache.org/jira/browse/ISIS-1599[ISIS-1599] - "Set" interface does not work as an action parameter's collection type
+* link:https://issues.apache.org/jira/browse/ISIS-1531[ISIS-1531] - Possible memory leak
+* link:https://issues.apache.org/jira/browse/ISIS-1506[ISIS-1506] - tomcat shutdown - threads in PARK state
+* link:https://issues.apache.org/jira/browse/ISIS-1172[ISIS-1172] - Logo in wicket viewer should be calculated relative to context root
+
+
+== Dependency upgrade
+
+* link:https://issues.apache.org/jira/browse/ISIS-1276[ISIS-1276] - Update DN to 5.1.x (from DN 4.1.x)
+
+== Task
+
+* link:https://issues.apache.org/jira/browse/ISIS-1903[ISIS-1903] - Update helloworld/simpleapp for Isis version 2
+* link:https://issues.apache.org/jira/browse/ISIS-1871[ISIS-1871] - Pull changes, that do not conflict with DN-4, from M2 into M1
+* link:https://issues.apache.org/jira/browse/ISIS-1828[ISIS-1828] - Jdeps analysis of core code-base In preparation for Java 9+
+* link:https://issues.apache.org/jira/browse/ISIS-1810[ISIS-1810] - Release tasks for 2.0.0-M1
+
+== Sub-task
+
+* link:https://issues.apache.org/jira/browse/ISIS-1951[ISIS-1951] - Move objenesis dependency to plugin codegen-javassist
+* link:https://issues.apache.org/jira/browse/ISIS-1915[ISIS-1915] - Migration Notes: We have core plugins now
+* link:https://issues.apache.org/jira/browse/ISIS-1909[ISIS-1909] - Migration Notes: Moved and Deprecated Classes
+* link:https://issues.apache.org/jira/browse/ISIS-1908[ISIS-1908] - Mirgation Notes: swagger-ui is now packed with metamodel
+* link:https://issues.apache.org/jira/browse/ISIS-1907[ISIS-1907] - Migration Notes: Apply workaround for DN plugins
+* link:https://issues.apache.org/jira/browse/ISIS-1893[ISIS-1893] - fix mvn build issues
+* link:https://issues.apache.org/jira/browse/ISIS-1890[ISIS-1890] - configure surefire for all new plugins
+* link:https://issues.apache.org/jira/browse/ISIS-1889[ISIS-1889] - Backport datanucleus specific commits from M2 into M1.
+* link:https://issues.apache.org/jira/browse/ISIS-1886[ISIS-1886] - Port QueryResultCache back into applib
+* link:https://issues.apache.org/jira/browse/ISIS-1885[ISIS-1885] - Re-invent ObjectContracts' JUnit Tests
+* link:https://issues.apache.org/jira/browse/ISIS-1819[ISIS-1819] - Documentation (guide) of where-am-i feature
+* link:https://issues.apache.org/jira/browse/ISIS-1816[ISIS-1816] - Specify framework's behavior if multiple @Parent annotations or parent() methods are resolved in the object's hierarchy
+* link:https://issues.apache.org/jira/browse/ISIS-1754[ISIS-1754] - JEE Support - Investigate Class Loading on Payara 4.1.2
+
+
diff --git a/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0.adoc b/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0.adoc
deleted file mode 100644
index 913436e..0000000
--- a/adocs/documentation/src/main/asciidoc/release-notes/_release-notes_2.0.0.adoc
+++ /dev/null
@@ -1,9 +0,0 @@
-[[_release-notes_2.0.0]]
-= 2.0.0
-: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 [...]
-:_basedir: ../
-:_imagesdir: images/
-:toc: right
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/release-notes/release-notes.adoc b/adocs/documentation/src/main/asciidoc/release-notes/release-notes.adoc
index 9766c86..622762e 100644
--- a/adocs/documentation/src/main/asciidoc/release-notes/release-notes.adoc
+++ b/adocs/documentation/src/main/asciidoc/release-notes/release-notes.adoc
@@ -21,6 +21,14 @@ This table summarises all releases of Apache Isis to date.
 | Bugs
 | JIRA relnotes
 
+| xref:release-notes.adoc#_release-notes_2.0.0-M1[2.0.0-M1]
+| 31-07-2018
+| First milestone release for Apache Isis 2.0.0: Java 8 support, DataNucleus 5.1, Wicket 8, meta-annotations, breadcrumbs
+| XXX
+| XXX
+| XXX
+| https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311171&version=XXXXXX[Release notes for 2.0.0-M1]
+
 | xref:release-notes.adoc#_release-notes_1.16.2[1.16.2]
 | 05-03-2018
 | RO viewer support, performance improvement, fix of severe bug for parented checkboxes
@@ -321,6 +329,7 @@ This table summarises all releases of Apache Isis to date.
 
 
 
+include::_release-notes_2.0.0-M1.adoc[leveloffset=+1]
 include::_release-notes_1.16.2.adoc[leveloffset=+1]
 include::_release-notes_1.16.1.adoc[leveloffset=+1]
 include::_release-notes_1.16.0.adoc[leveloffset=+1]
diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index f0c797e..c5d2360 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -56,42 +56,6 @@
                 </excludes>
             </resource>
         </resources>
-<!--  [ahuber] possibly no longer required -->
-<!--         <pluginManagement> -->
-<!--             <plugins> -->
-<!--                 This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
-<!--                 <plugin> -->
-<!--                     <groupId>org.eclipse.m2e</groupId> -->
-<!--                     <artifactId>lifecycle-mapping</artifactId> -->
-<!--                     <version>1.0.0</version> -->
-<!--                     <configuration> -->
-<!--                         <lifecycleMappingMetadata> -->
-<!--                             <pluginExecutions> -->
-<!--                                 <pluginExecution> -->
-<!--                                     <pluginExecutionFilter> -->
-<!--                                         <groupId> -->
-<!--                                             org.datanucleus -->
-<!--                                         </groupId> -->
-<!--                                         <artifactId> -->
-<!--                                             datanucleus-maven-plugin -->
-<!--                                         </artifactId> -->
-<!--                                         <versionRange> -->
-<!--                                             [4.0.0-release,) -->
-<!--                                         </versionRange> -->
-<!--                                         <goals> -->
-<!--                                             <goal>enhance</goal> -->
-<!--                                         </goals> -->
-<!--                                     </pluginExecutionFilter> -->
-<!--                                     <action> -->
-<!--                                         <ignore /> -->
-<!--                                     </action> -->
-<!--                                 </pluginExecution> -->
-<!--                             </pluginExecutions> -->
-<!--                         </lifecycleMappingMetadata> -->
-<!--                     </configuration> -->
-<!--                 </plugin> -->
-<!--             </plugins> -->
-<!--         </pluginManagement> -->
     </build>
 
     <dependencies>
diff --git a/scripts/verify-isis-release.sh b/scripts/verify-isis-release.sh
deleted file mode 100755
index 0d7d95f..0000000
--- a/scripts/verify-isis-release.sh
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/bash
-# Instructions:
-# -Create an empty directory
-# -Put a url.txt file in it containing a list of all the urls of the zip files
-# -Run this script
-
-_execmustpass(){
-    echo $@
-    $@
-    status=$?
-    if [ $status -eq 0 ] || [ $? -eq 0 ]; then
-        return;
-    fi
-    echo "Command $@ failed! [error $status] Exiting..."
-    exit 10
-}
-
-_execmayfail(){
-    echo $@
-    $@
-    status=$?
-    if [ $status -eq 0 ] || [ $? -eq 0 ]; then
-        return;
-    fi
-    echo "Command $@ failed! [error $status] But continuing anyway..."
-}
-
-_download(){
-    for fil in `cat *.txt`
-    do
-        echo 'Downloading '$fil
-        _execmustpass $download_cmd $fil
-        _execmustpass $download_cmd $fil.asc
-    done
-}
-
-_verify(){
-    for zip in *.zip
-    do 
-        echo 'Verifying '$zip   
-        _execmustpass gpg --verify $zip.asc $zip 
-    done
-}
-
-_unpack(){
-    echo 'Unpacking '
-    set -f
-    _execmustpass unzip -q '*.zip'
-    set +f
-}
-
-_fetch_dependencies(){
-    _execmayfail mvn dependency:go-offline
-}
-
-_build(){
-    echo 'Removing Isis from local repo '$module
-    rm -rf ~/.m2/repository/org/apache/isis
-    for module in ./isis*/ ./*archetype*/
-    do
-        cd $module
-        grep -q "Isis Core" pom.xml
-        retcode=$?
-        if [  $retcode -eq 0 ]
-        then
-            echo 'Building Core '$module
-            _fetch_dependencies
-            _execmustpass mvn clean install -o
-        else
-            echo 'Building Module '$module
-            _execmustpass mvn clean install $offline
-        fi
-		cd ..
-    done
-}
-
-if [[ $@ == *online* ]]
-then
-    echo "Enabling online mode."
-	offline=
-else
-    echo "Enabling offline mode. Use '$0 --online' to use online mode."
-	offline=-o
-fi
-
-# check the environment
-# Check for curl or wget
-download_cmd=
-curl --version > /dev/null 2>&1
-if [[ $? -eq 0 ]]; then
-    download_cmd=curl -L -O
-fi 
-if [[ -z "$download_cmd" ]]; then
-    wget --version > /dev/null 2>&1
-    if [[ $? -eq 0 ]]; then
-        download_cmd=wget
-    else
-        echo "No downloader found.. exitting.."
-        exit 11
-    fi 
-fi
-
-# The work starts here 
-_download
-_verify
-_unpack
-_build
-
diff --git a/todo-deprecation-list.txt b/todo-deprecation-list.txt
index 1d54d15..909b44d 100644
--- a/todo-deprecation-list.txt
+++ b/todo-deprecation-list.txt
@@ -1,6 +1,21 @@
 
+for 2.0.0-M2
 
 
+remove:
+- @MemberGroupLayout
+- contributed domain services (use mixins instead)
+
+to change:
+- automatically wrap domain services (perhaps behind a config property)
+- automatically infer \@Programmatic for all \@DomainService(nature=DOMAIN)
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+the stuff below here was working notes for 2.0.0-M1, not necessarily up to date.
+
 
 TO REMOVE:
 
@@ -25,13 +40,10 @@ org.apache.isis.applib.services.memento  (19 usages found)
 
 
 Also for 2.0.0, new features/deprecations:
-    automatically wrap domain services (perhaps behind a config property)
-    automatically infer \@Programmatic for all \@DomainService(nature=DOMAIN)
     deprecate use of guava predicates, but don't remove (too big a change, weren't deprecated previously)
     deprecate FixtureScripts service with view to removing from applib ... the framework provides an implementation by default
     get rid of automatic initialization of fields (perhaps behind a config property)
     deprecate the Apache Isis' DateTime classes for removal in the future) ... and probably all of the custom value types, subclasses of Magnitude
-    flag to make @Action mandatory, @Programmatic the default
     merge metamodel and runtime
     remove *Installer
 
@@ -39,6 +51,10 @@ Also for 2.0.0, new features/deprecations:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
+1.16.2
+- flag to make @Action mandatory, @Programmatic the default
+
+
 OTHER STUFF:
 
 
@@ -190,128 +206,6 @@ org.apache.isis.applib
 
 
 
-org.apache.isis.applib.annotation
-
-    ActionInteraction.java  - entire annotation, use @Action(domainEvent=...)
-    CollectionInteraction.java - entire annotation, use @Collection(domainEvent=...)
-    PostsActionInvokedEvent.java - entire annotation, use @Action(domainEvent=...) instead
-    PostsCollectionAddedToEvent.java - entire annotation, use @Collection(domainEvent=...) instead.
-    PostsCollectionRemovedFromEvent.java - entire annotation, use @Collection(domainEvent=...) instead.
-    PostsPropertyChangedEvent.java - entire annotation, use @Property(domainEvent=...) instead.
-    PropertyInteraction.java - entire annotation, use @Property(domainEvent=...) instead.
-
-    Action.java
-        publishingPayloadFactory()  - attribute; use the simpler PublisherService SPI instead
-    DomainObject.java
-        publishingPayloadFactory() - attribute, use the simpler PublisherService SPI instead
-    PublishedAction.java - entire annotation, use @Action(publishing=...) instead
-    PublishedObject.java - entire annotation, use @DomainObject(publishing=...) instead
-    PublishingPayloadFactoryForAction.java - entire annotation, replaced with simpler PublisherService SPI
-    PublishingPayloadFactoryForObject.java - entire annotation, replaced with simpler PublisherService SPI
-
-
-    AutoComplete.java - entire annotation, use @DomainObject(autoComplete...=...)
-
-    Bookmarkable.java - entire annotation, use @DomainObjectLayout(bookmarking=...)
-
-    Bulk.java - entire annotation, use @Action(invokeOn=...)
-    Bulk.InteractionContext - entire service, use ActionInvocationContext service instead
-
-    Command.java - entire annotation, use @Action(command=...) instead
-
-    Disabled.java - entire annotation, use @Property(editingDisabledReason=...) instead
-    Hidden.java - entire annotation, use @Property(hidden=...), @Collection(hidden=...), @Action(hidden=...)
-
-    ActionSemantics.java  - entire annotation, use @Action(semantics=...)
-    Idempotent.java - entire annotation, use @Action(semantics=...) instead.
-    QueryOnly.java - entire annotation, use @Action(semantics=...) instead.
-
-    ActionOrder.java - entire annotation, use @MemberOrder instead
-    FieldOrder.java - entire annotation, use @MemberOrder instead
-
-    Aggregated.java - entire annotation, not supported internally
-
-    Audited.java - entire annotation, use @DomainObject(audited=...)
-
-    Bounded.java - entire annotation, use @DomainObject(bounded=...)
-
-    CollectionLayout.java
-        render() - use @CollectionLayout(defaultView=...) instead
-    RenderType.java - supporting enum for @Render annotation
-    Render.java - entire annotation, use @CollectionLayout(defaultView=...) instead
-    Resolve.java - entire annotation, use @CollectionLayout(defaultView=...) instead
-
-    CssClass.java - entire annotation, use @XxxLayout(cssClass=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
-    CssClassFa.java - entire annotation, use @XxxLayout(cssClass=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
-
-    Debug.java - entire annotation, use @Action#(restrictTo=...) instead
-    Exploration.java - entire annotation, use @Action(restrictTo=....) instead
-    Prototype.java  - entire annotation, use @Action(restrictTo=....) instead
-
-    DescribedAs.java - entire annotation, use @XxxLayout(describedAs=...) instead
-
-    Ignore.java - entire annotation, use @Programmatic instead.
-
-    Immutable.java - entire annotation, use @DomainObject(editing=...) instead
-
-    Mask.java - entire annotation, not supported by either Wicket viewer or RO viewer
-    MaxLength.java - entire annotation, use @Property(maxLength=...) and @Parameter(maxLength=...)
-    MultiLine.java - entire annotation, use @PropertyLayout(multiLine=...) and @ParameterLayout(multiLine=...) instead.
-    Named.java - entire annotation, use @XxxLayout(named=...) instead, where Xxx is Property, Collection, Action, Parameter, DomainObject, ViewModel
-    Plural.java - entire annotation, use @DomainObjectLayout(plural=...) instead
-
-    MemberGroups.java - entire annotation, use Xxx.layout.xml instead
-
-    MustSatisfy.java - entire annotation, use @Property(mustSatisfy=....) or @Parameter(mustSatisfy=...) instead
-
-    RegEx.java - entire annotation, use @Property(regexPatternFlags=...) or @Parameter(regexPatternFlags=...) instead;
-
-
-    RenderedAsDayBefore.java - entire annotation, use @PropertyLayout(renderedAsDayBefore=...) and @ParameterLayout(renderedAsDayBefore=...)
-
-    Paged.java - entire annotation, use @DomainObjectLayout(paged=...) or @CollectionLayout(paged=...) instead.
-    SortedBy.java - entire annotation, use @CollectionLayout(sortedBy=...) instead
-
-    TypicalLength.java - entire annotation, use @PropertyLayout(typicalLength=...) instead.
-
-
-    TypeOf.java - entire annotation, use @Collection(typeOf=...) or @Action(typeOf=...) instead.
-
-
-    Mandatory.java - entire annotation, use @Property(optionality=...) and @Parameter(optionality=...), or @javax.annotations.Nullable
-    Optional.java - entire annotation, use @Property(optionality=...) and @Parameter(optionality=...), or @javax.annotations.Nullable
-
-
-    NotInServiceMenu.java - entire annotation, use @DomainService(nature=...) or mixins instead.
-
-    NotContributed.java - entire annotation, use @DomainService(nature=...) or mixins instead.
-
-    NotPersisted.java - entire annotation, use @Property(notPersisted=...) instead
-
-    NotPersistable.java - entire annotation, not supported and does nothing
-
-    Parameter.java
-        minLength() attribute; not supported.  For autocomplete, use @MinLength annotation.
-
-    ObjectType.java - entire annotation, use @DomainObject(objectType=...) or @javax.jdo.annotations.Discriminator instead.
-
-    When.java - entire enum, no replacement (believe is unused within the framwork)
-
-
-
-org.apache.isis.applib.marker - remove these marker interfaces (tend to use annotations in preference)
-
-    Auditable.java
-    Bounded.java
-
-    NotPersistable.java
-    ProgramPersistable.java
-
-    AlwaysImmutable.java
-    ImmutableOncePersisted.java
-    ImmutableUntilPersisted.java
-    NeverImmutable.java
-