You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2021/01/27 16:03:10 UTC

[isis] branch ISIS-2465_Kroviz-Demo_Menu_Actions_Show_No_Output updated (36e5043 -> ac55a90)

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

joergrade pushed a change to branch ISIS-2465_Kroviz-Demo_Menu_Actions_Show_No_Output
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 36e5043  LinkTest parses all available Demo snapshots; 2 ITCases disabled, due to timeouts; ui.sample.* moved
     new efb6d00  ObjectAggregator invokes object instance link to access properties
     new 3150d0e  cleanup log output
     new ac55a90  npm registry fixed

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


Summary of changes:
 incubator/clients/kroviz/.npmrc                    |   3 +-
 .../kotlin/org/apache/isis/client/kroviz/App.kt    |   1 +
 .../kroviz/core/aggregator/ActionDispatcher.kt     |   5 +-
 .../kroviz/core/aggregator/BaseAggregator.kt       |   6 +
 .../core/aggregator/DomainTypesAggregator.kt       |  38 ++-
 .../kroviz/core/aggregator/ListAggregator.kt       |  36 +-
 .../kroviz/core/aggregator/ObjectAggregator.kt     |  50 +--
 .../kroviz/core/aggregator/RestfulDispatcher.kt    |  11 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  25 +-
 .../isis/client/kroviz/core/model/ObjectDM.kt      |  40 ++-
 .../isis/client/kroviz/to/PlainTransferObjects.kt  |   3 +-
 .../org/apache/isis/client/kroviz/to/TObject.kt    |  10 +-
 .../isis/client/kroviz/ui/EventExportDialog.kt     |   1 -
 .../apache/isis/client/kroviz/ui/EventLogDetail.kt |   8 +-
 .../client/kroviz/ui/builder/FieldSetBuilder.kt    |  17 +-
 .../isis/client/kroviz/ui/kv/EventLogTable.kt      |   2 +-
 .../apache/isis/client/kroviz/ui/kv/LoginPrompt.kt |   2 +-
 .../apache/isis/client/kroviz/ui/kv/RoDialog.kt    |   4 +-
 .../apache/isis/client/kroviz/ui/kv/UiManager.kt   |   2 +-
 .../apache/isis/client/kroviz/utils/IconManager.kt |   2 +
 .../org/apache/isis/client/kroviz/TestUtil.kt      |   3 +-
 .../client/kroviz/snapshots/FR_OBJECT_LAYOUT.json  | 248 --------------
 .../isis/client/kroviz/snapshots/LAYOUT.adoc       | 380 ---------------------
 .../kroviz/snapshots/ResponseRegressionTest.kt     |  71 ++++
 .../isis/client/kroviz/snapshots/SyncRequest.kt    |  27 ++
 .../snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt  | 140 ++++++--
 .../demo2_0_0/{ACTIONS_STRINGS.kt => RESTFUL.kt}   |  50 +--
 .../kroviz/snapshots/demo2_0_0/Response2Handler.kt |  50 +++
 .../isis/client/kroviz/snapshots/sample.json       | 159 +++++++--
 .../apache/isis/client/kroviz/snapshots/sample.svg |  65 ----
 .../apache/isis/client/kroviz/snapshots/sample.xml |  88 -----
 .../snapshots/{action_string.json => sample2.json} | 121 +++++--
 .../kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt   |  74 ----
 .../org/apache/isis/client/kroviz/to/LinkTest.kt   |  28 +-
 .../apache/isis/client/kroviz/to/TObjectTest.kt    |  13 +-
 35 files changed, 668 insertions(+), 1115 deletions(-)
 delete mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/FR_OBJECT_LAYOUT.json
 delete mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/LAYOUT.adoc
 create mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/ResponseRegressionTest.kt
 create mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/SyncRequest.kt
 copy incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/{ACTIONS_STRINGS.kt => RESTFUL.kt} (57%)
 create mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
 delete mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.svg
 delete mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.xml
 rename incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/{action_string.json => sample2.json} (58%)
 delete mode 100644 incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt


[isis] 02/03: cleanup log output

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

joergrade pushed a commit to branch ISIS-2465_Kroviz-Demo_Menu_Actions_Show_No_Output
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3150d0eb00af6ff90a192be1c4b222ae772b5890
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jan 27 16:57:24 2021 +0100

    cleanup log output
---
 .../apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt | 5 -----
 .../kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt   | 8 --------
 .../kotlin/org/apache/isis/client/kroviz/ui/EventExportDialog.kt  | 1 -
 3 files changed, 14 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
index c335ea5..a432561 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
@@ -52,10 +52,6 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
             else -> log(logEntry)
         }
 
-        console.log("[OA.update]")
-        console.log(obj)
-        console.log(dpm)
-
         if (dpm.canBeDisplayed()) {
             UiManager.openObjectView(this)
         }
@@ -84,7 +80,6 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
         invoke(selfLink!!, this)
     }
 
-
     fun handleResultObject(obj: ResultObject) {
         console.log("[OA.handleResultObject] TODO implement")
         console.log(obj)
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
index 5f64014..1169624 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
@@ -40,19 +40,11 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     }
 
     override fun addData(obj: TransferObject) {
-        console.log("[ODM.addData]")
         (obj as TObject)
-        console.log(obj)
-        console.log(obj.members)
-        console.log(obj.getActions())
-        console.log(obj.getCollections())
-        console.log(obj.getProperties())
         val exo = Exposer(obj)
         data = exo.dynamise() as? Exposer
         obj.getProperties().forEach { m ->
-            console.log(m)
             val p = createPropertyFrom(m)
-            console.log(p)
             addProperty(p)
         }
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventExportDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventExportDialog.kt
index 55cbfac..fc4330f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventExportDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventExportDialog.kt
@@ -90,7 +90,6 @@ class EventExportDialog() : Command() {
                 is SimpleSelect -> {
                     val key = i.label!!
                     val value = i.getValue()!!
-                    console.log("[EED.extractUserInput] $key $value")
                     if (key == fieldName) {
                         return value
                     }


[isis] 03/03: npm registry fixed

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

joergrade pushed a commit to branch ISIS-2465_Kroviz-Demo_Menu_Actions_Show_No_Output
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ac55a90cea70143e676492362a810204a53a580b
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jan 27 17:02:38 2021 +0100

    npm registry fixed
---
 incubator/clients/kroviz/.npmrc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/incubator/clients/kroviz/.npmrc b/incubator/clients/kroviz/.npmrc
index ae91031..214c29d 100644
--- a/incubator/clients/kroviz/.npmrc
+++ b/incubator/clients/kroviz/.npmrc
@@ -1,2 +1 @@
-registry=http://repository.int.kn:8081/nexus/content/repositories/npm/
-registry=http://repository.int.kn/repository/npm/
+registry=https://registry.npmjs.org/


[isis] 01/03: ObjectAggregator invokes object instance link to access properties

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

joergrade pushed a commit to branch ISIS-2465_Kroviz-Demo_Menu_Actions_Show_No_Output
in repository https://gitbox.apache.org/repos/asf/isis.git

commit efb6d006e80a74e4f704b63937646621e793e6de
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jan 27 16:53:13 2021 +0100

    ObjectAggregator invokes object instance link to access properties
---
 .../kotlin/org/apache/isis/client/kroviz/App.kt    |   1 +
 .../kroviz/core/aggregator/ActionDispatcher.kt     |   5 +-
 .../kroviz/core/aggregator/BaseAggregator.kt       |   6 +
 .../core/aggregator/DomainTypesAggregator.kt       |  38 ++-
 .../kroviz/core/aggregator/ListAggregator.kt       |  36 +-
 .../kroviz/core/aggregator/ObjectAggregator.kt     |  53 +--
 .../kroviz/core/aggregator/RestfulDispatcher.kt    |  11 +-
 .../client/kroviz/core/event/RoXmlHttpRequest.kt   |  25 +-
 .../isis/client/kroviz/core/model/ObjectDM.kt      |  48 ++-
 .../isis/client/kroviz/to/PlainTransferObjects.kt  |   3 +-
 .../org/apache/isis/client/kroviz/to/TObject.kt    |  10 +-
 .../apache/isis/client/kroviz/ui/EventLogDetail.kt |   8 +-
 .../client/kroviz/ui/builder/FieldSetBuilder.kt    |  17 +-
 .../isis/client/kroviz/ui/kv/EventLogTable.kt      |   2 +-
 .../apache/isis/client/kroviz/ui/kv/LoginPrompt.kt |   2 +-
 .../apache/isis/client/kroviz/ui/kv/RoDialog.kt    |   4 +-
 .../apache/isis/client/kroviz/ui/kv/UiManager.kt   |   2 +-
 .../apache/isis/client/kroviz/utils/IconManager.kt |   2 +
 .../org/apache/isis/client/kroviz/TestUtil.kt      |   3 +-
 .../client/kroviz/snapshots/FR_OBJECT_LAYOUT.json  | 248 --------------
 .../isis/client/kroviz/snapshots/LAYOUT.adoc       | 380 ---------------------
 .../kroviz/snapshots/ResponseRegressionTest.kt     |  71 ++++
 .../isis/client/kroviz/snapshots/SyncRequest.kt    |  27 ++
 .../snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt  | 140 ++++++--
 .../client/kroviz/snapshots/demo2_0_0/RESTFUL.kt   |  61 ++++
 .../kroviz/snapshots/demo2_0_0/Response2Handler.kt |  50 +++
 .../isis/client/kroviz/snapshots/sample.json       | 159 +++++++--
 .../apache/isis/client/kroviz/snapshots/sample.svg |  65 ----
 .../apache/isis/client/kroviz/snapshots/sample.xml |  88 -----
 .../snapshots/{action_string.json => sample2.json} | 121 +++++--
 .../kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt   |  74 ----
 .../org/apache/isis/client/kroviz/to/LinkTest.kt   |  28 +-
 .../apache/isis/client/kroviz/to/TObjectTest.kt    |  13 +-
 33 files changed, 714 insertions(+), 1087 deletions(-)

diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
index 55b5cba..c2acf28 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt
@@ -31,6 +31,7 @@ class App : Application() {
 
     init {
         require("css/kroviz.css")
+        require("lodash")
     }
 
     override fun start() {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
index fc1e3cf..5ee6df8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ActionDispatcher.kt
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.to.Action
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Method
@@ -47,13 +46,13 @@ class ActionDispatcher(private val at: Point = Point(100, 100)) : BaseAggregator
         when {
             link.hasArguments() -> ActionPrompt(action = action).open(at)
             link.relation() == Relation.INVOKE -> invoke(action, link)
-            else -> RoXmlHttpRequest().invoke(link, aggregator)
+            else -> invoke(link, aggregator)
         }
     }
 
     private fun invoke(action: Action, link: Link) {
         val title = Utils.deCamel(action.id)
-        RoXmlHttpRequest().invoke(link, ObjectAggregator(title))
+        invoke(link, ObjectAggregator(title))
     }
 
     /**
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
index 7544be9..8815925 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/BaseAggregator.kt
@@ -19,9 +19,11 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
+import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.core.model.DisplayModel
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.TObject
+import org.apache.isis.client.kroviz.ui.kv.Constants
 
 /**
  * An Aggregator:
@@ -70,4 +72,8 @@ abstract class BaseAggregator {
         return href.isNotEmpty() && href.contains("layout")
     }
 
+    protected fun invoke(link:Link, aggregator: BaseAggregator, subType :String = Constants.subTypeJson) {
+        RoXmlHttpRequest().invoke(link, aggregator, subType)
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
index aeee107..a23ccce 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.core.model.DiagramDM
 import org.apache.isis.client.kroviz.to.*
 import org.apache.isis.client.kroviz.ui.kv.RoStatusBar
@@ -65,7 +64,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
             }
             (dpm as DiagramDM).incNumberOfProperties(propertyList.size)
             propertyList.forEach { p ->
-                RoXmlHttpRequest().invoke(p,this)
+                invoke(p, this)
             }
         }
     }
@@ -75,17 +74,28 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
         obj.values.forEach { link ->
             val it = link.href
             when {
-                it.contains("/org.apache.isis") -> {}
-                it.contains("/isisApplib") -> {}
-                it.contains("/java") -> {}
-                it.contains("/void") -> {}
-                it.contains("/boolean") -> {}
-                it.contains("fixture") -> {}
-                it.contains("service") -> {}
-                it.contains("/homepage") -> {}
-                it.endsWith("Menu") -> {}
-                it.startsWith("demoapp.dom.annot") -> {}
-                it.startsWith("demoapp.dom.types.javatime") -> {}
+                it.contains("/org.apache.isis") -> {
+                }
+                it.contains("/isisApplib") -> {
+                }
+                it.contains("/java") -> {
+                }
+                it.contains("/void") -> {
+                }
+                it.contains("/boolean") -> {
+                }
+                it.contains("fixture") -> {
+                }
+                it.contains("service") -> {
+                }
+                it.contains("/homepage") -> {
+                }
+                it.endsWith("Menu") -> {
+                }
+                it.startsWith("demoapp.dom.annot") -> {
+                }
+                it.startsWith("demoapp.dom.types.javatime") -> {
+                }
                 else -> {
                     domainTypeLinkList.add(link)
                 }
@@ -93,7 +103,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() {
         }
         (dpm as DiagramDM).numberOfClasses = domainTypeLinkList.size
         domainTypeLinkList.forEach {
-            RoXmlHttpRequest().invoke(it,this)
+            invoke(it, this)
         }
     }
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ListAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ListAggregator.kt
index 0668c45..7832d17 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ListAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ListAggregator.kt
@@ -20,7 +20,6 @@ package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.EventState
 import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.core.model.ListDM
 import org.apache.isis.client.kroviz.layout.Layout
 import org.apache.isis.client.kroviz.to.*
@@ -43,8 +42,9 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
 
     override fun update(logEntry: LogEntry, subType: String) {
 
-        //TODO duplicates should no be propagated to handlers at all: IMPROVE
-        if (logEntry.state != EventState.DUPLICATE) {
+        if (logEntry.state == EventState.DUPLICATE) {
+            console.log("[LA.update] TODO duplicates should not be propagated to handlers")
+        } else {
             when (val obj = logEntry.getTransferObject()) {
                 null -> log(logEntry)
                 is ResultList -> handleList(obj)
@@ -62,10 +62,10 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
     }
 
     private fun handleList(resultList: ResultList) {
-        if (resultList.resulttype != "void") {
+        if (resultList.resulttype != ResultType.VOID.type) {
             val result = resultList.result!!
             result.value.forEach {
-                RoXmlHttpRequest().invoke(it,this)
+                invoke(it, this)
             }
         }
     }
@@ -73,10 +73,11 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
     private fun handleObject(obj: TObject) {
         dpm.addData(obj)
         val l = obj.getLayoutLink()!!
-        // Json.Layout is invoked first
-        RoXmlHttpRequest().invoke(l,this)
-        // then Xml.Layout is to be invoked as well
-        RoXmlHttpRequest().invoke(l,this, Constants.subTypeXml)
+        if (l.representation() == Represention.OBJECT_LAYOUT_BS3) {
+            invoke(l, this, Constants.subTypeXml)
+        } else {
+            invoke(l, this)
+        }
     }
 
     //TODO same code in ObjectAggregator? -> pullup refactoring to be applied
@@ -93,7 +94,7 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
                 dm.addPropertyDescription(id, id)
                 if (!isDn) {
                     //invoking DN links leads to an error
-                    RoXmlHttpRequest().invoke(l,this)
+                    invoke(l, this)
                 }
             }
         }
@@ -109,7 +110,7 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
             dm.addPropertyDescription(p)
         } else {
             dm.addProperty(p)
-            RoXmlHttpRequest().invoke(p.descriptionLink()!!,this)
+            invoke(p.descriptionLink()!!, this)
         }
     }
 
@@ -124,18 +125,11 @@ class ListAggregator(actionTitle: String) : BaseAggregator() {
         }
     }
 
-    /**
-     * property-description's have extensions.friendlyName whereas
-     * plain properties don't have them  cf.:
-     * FR_PROPERTY_DESCRIPTION
-     * FR_OBJECT_PROPERTY_
-     */
     private fun Property.isPropertyDescription(): Boolean {
-        val hasExtensions = extensions != null
-        if (!hasExtensions) {
-            return false
+        val selfLink = this.links.find { l ->
+            l.relation() == Relation.SELF
         }
-        return extensions!!.friendlyName.isNotEmpty()
+        return selfLink!!.representation() == Represention.PROPERTY_DESCRIPTION
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
index 83b1228..c335ea5 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/ObjectAggregator.kt
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.core.model.ObjectDM
 import org.apache.isis.client.kroviz.layout.Layout
 import org.apache.isis.client.kroviz.to.*
@@ -28,6 +27,13 @@ import org.apache.isis.client.kroviz.ui.ErrorDialog
 import org.apache.isis.client.kroviz.ui.kv.Constants
 import org.apache.isis.client.kroviz.ui.kv.UiManager
 
+/** sequence of operations:
+ * (0) Menu Action              User clicks BasicTypes.String -> handled by ActionDispatcher
+ * (1) OBJECT                TObjectHandler -> invoke()   -> passed on to ObjectAggregator
+ * (2) OBJECT_LAYOUT         layoutHandler -> invoke(layout.getProperties()[].getLink()) link can be null?
+ * (3) ???_OBJECT_PROPERTY       PropertyHandler -> invoke()
+ * (4) ???_PROPERTY_DESCRIPTION  <PropertyDescriptionHandler>
+ */
 class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
 
     init {
@@ -35,20 +41,20 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
     }
 
     override fun update(logEntry: LogEntry, subType: String) {
-
-        when (val obj = logEntry.getTransferObject()) {
+        val obj = logEntry.getTransferObject()
+        when (obj) {
             is TObject -> handleObject(obj)
             is ResultObject -> handleResultObject(obj)
             is Property -> handleProperty(obj)
-            is Collection -> handleCollection(obj)
             is Layout -> handleLayout(obj)
             is Grid -> handleGrid(obj)
             is HttpError -> ErrorDialog(logEntry).open()
             else -> log(logEntry)
         }
 
-        console.log("[ObjectAggregator.update]")
-        console.log(logEntry.getTransferObject())
+        console.log("[OA.update]")
+        console.log(obj)
+        console.log(dpm)
 
         if (dpm.canBeDisplayed()) {
             UiManager.openObjectView(this)
@@ -56,23 +62,31 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
     }
 
     fun handleObject(obj: TObject) {
-        dpm.addData(obj)
+        // After ~/action/invoke is called, the actual object instance (containing properties) needs to be invoked as well.
+        // Note that rel.self/href is identical in both cases and both are of type TObject. logEntry.url is different, though.
+        if (obj.getProperties().size == 0) {
+            invokeInstance(obj)
+        } else {
+            dpm.addData(obj)
+        }
         val l = obj.getLayoutLink()!!
-        // Json.Layout is invoked first
-        RoXmlHttpRequest().invoke(l, this)
-        // then Xml.Layout is to be invoked as well
-        RoXmlHttpRequest().invoke(l, this, Constants.subTypeXml)
+        if (l.representation() == Represention.OBJECT_LAYOUT_BS3) {
+            invoke(l, this, Constants.subTypeXml)
+        } else {
+            invoke(l, this)
+        }
     }
 
-    fun handleCollection(obj: Collection) {
-        // TODO dsp.addData(obj)
-        console.log("[ObjectAggregator.handleCollection] TODO")
-        console.log(obj)
+    private fun invokeInstance(obj: TObject) {
+        val selfLink = obj.links.find { l ->
+            l.relation() == Relation.SELF
+        }
+        invoke(selfLink!!, this)
     }
 
+
     fun handleResultObject(obj: ResultObject) {
-        // TODO dsp.addData(obj)
-        console.log("[ObjectAggregator.handleResultObject] TODO")
+        console.log("[OA.handleResultObject] TODO implement")
         console.log(obj)
     }
 
@@ -81,8 +95,7 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
     }
 
     private fun handleProperty(property: Property) {
-        //TODO  yet to be implemented
-        console.log("[ObjectAggregator.handleProperty] TODO")
+        console.log("[OA.handleProperty] TODO implement")
         console.log(property)
     }
 
@@ -95,7 +108,7 @@ class ObjectAggregator(val actionTitle: String) : BaseAggregator() {
                 val isDn = l.href.contains("datanucleus")
                 if (isDn) {
                     //invoking DN links leads to an error
-                    RoXmlHttpRequest().invoke(l, this)
+                    invoke(l, this)
                 }
             }
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
index 970f585..1412c7f 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/RestfulDispatcher.kt
@@ -19,7 +19,6 @@
 package org.apache.isis.client.kroviz.core.aggregator
 
 import org.apache.isis.client.kroviz.core.event.LogEntry
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
 import org.apache.isis.client.kroviz.to.Link
 import org.apache.isis.client.kroviz.to.Relation
 import org.apache.isis.client.kroviz.to.Restful
@@ -31,19 +30,21 @@ class RestfulDispatcher() : BaseAggregator() {
         restful.links.forEach {
             when {
                 it.rel.endsWith("/menuBars") -> invokeNavigation(it)
-                it.relation() == Relation.SELF -> {}
-                it.rel.endsWith("/services") -> {}
+                it.relation() == Relation.SELF -> {
+                }
+                it.rel.endsWith("/services") -> {
+                }
                 else -> invokeSystem(it)
             }
         }
     }
 
     private fun invokeNavigation(it: Link) {
-        RoXmlHttpRequest().invoke(it, NavigationDispatcher())
+        invoke(it, NavigationDispatcher())
     }
 
     private fun invokeSystem(it: Link) {
-        RoXmlHttpRequest().invoke(it, SystemAggregator())
+        invoke(it, SystemAggregator())
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
index a958aee..8f35b4d 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/RoXmlHttpRequest.kt
@@ -69,25 +69,26 @@ class RoXmlHttpRequest {
 
         val rs = buildResourceSpecificationAndSetupHandler(url, subType, xhr)
 
-        var body = ""
+        val body = buildBody(link, aggregator)
         when {
-            link.hasArguments() -> body = Utils.argumentsAsBody(link)
+            body.isEmpty() -> xhr.send()
+            else -> xhr.send(body)
+        }
+        EventStore.start(rs, method, body, aggregator)
+    }
+
+    private fun buildBody(link: Link, aggregator: BaseAggregator?): String {
+        return when {
+            link.hasArguments() -> Utils.argumentsAsBody(link)
             link.method == Method.PUT.operation -> {
                 val logEntry = EventStore.findBy(aggregator!!)
                 when (val obj = logEntry?.obj) {
-                    is TObject -> body = Utils.propertiesAsBody(obj)
-                    else -> {
-                    }
+                    is TObject -> Utils.propertiesAsBody(obj)
+                    else -> ""
                 }
             }
-            else -> {
-            }
-        }
-        when {
-            body.isEmpty() -> xhr.send()
-            else -> xhr.send(body)
+            else -> ""
         }
-        EventStore.start(rs, method, body, aggregator)
     }
 
     fun invokeAnonymous(link: Link, aggregator: BaseAggregator?, subType: String = Constants.subTypeXml) {
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
index fbe7be4..5f64014 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/model/ObjectDM.kt
@@ -18,14 +18,10 @@
  */
 package org.apache.isis.client.kroviz.core.model
 
-import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.core.event.EventStore
 import org.apache.isis.client.kroviz.core.event.ResourceSpecification
 import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
-import org.apache.isis.client.kroviz.to.Link
-import org.apache.isis.client.kroviz.to.Method
-import org.apache.isis.client.kroviz.to.TObject
-import org.apache.isis.client.kroviz.to.TransferObject
+import org.apache.isis.client.kroviz.to.*
 
 class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     var data: Exposer? = null
@@ -34,11 +30,8 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     override fun canBeDisplayed(): Boolean {
         return when {
             isRendered -> false
-            layout == null -> false
-            grid == null -> false
-            else -> {
-                true
-            }
+            (layout == null) && (grid == null) -> false
+            else -> true
         }
     }
 
@@ -47,11 +40,24 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
     }
 
     override fun addData(obj: TransferObject) {
-        val exo = Exposer(obj as TObject)
+        console.log("[ODM.addData]")
+        (obj as TObject)
+        console.log(obj)
+        console.log(obj.members)
+        console.log(obj.getActions())
+        console.log(obj.getCollections())
+        console.log(obj.getProperties())
+        val exo = Exposer(obj)
         data = exo.dynamise() as? Exposer
+        obj.getProperties().forEach { m ->
+            console.log(m)
+            val p = createPropertyFrom(m)
+            console.log(p)
+            addProperty(p)
+        }
     }
 
-    override fun getObject(): TObject? {
+    override fun getObject(): TObject {
         return (data as Exposer).delegate
     }
 
@@ -68,10 +74,10 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
             val putLink = Link(method = Method.PUT.operation, href = href)
             val logEntry = EventStore.find(reSpec)
             val aggregator = logEntry?.getAggregator()!!
-            putLink.invokeWith(aggregator)
+            RoXmlHttpRequest().invoke(putLink, aggregator)
 
             // now data should be reloaded - wait for invoking PUT?
-            getLink.invokeWith(aggregator)
+            RoXmlHttpRequest().invoke(getLink, aggregator)
             //refresh of display to be triggered?
         }
     }
@@ -82,8 +88,18 @@ class ObjectDM(override val title: String) : DisplayModelWithLayout() {
         }
     }
 
-    fun Link.invokeWith(aggregator: BaseAggregator) {
-        RoXmlHttpRequest().invoke(this, aggregator)
+    private fun createPropertyFrom(m: Member): Property {
+        return Property(
+                id = m.id,
+                memberType = m.memberType,
+                links = m.links,
+                optional = m.optional,
+                title = m.id,
+                value = m.value,
+                extensions = m.extensions,
+                format = m.format,
+                disabledReason = m.disabledReason
+        )
     }
 
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
index 1aca714..a0b62c8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/PlainTransferObjects.kt
@@ -158,7 +158,8 @@ data class ResultObjectResult(
 enum class ResultType(val type: String) {
     LIST("list"),
     SCALARVALUE("scalarvalue"),
-    DOMAINOBJECT("domainobject")
+    DOMAINOBJECT("domainobject"),
+    VOID("void")
 }
 
 @Serializable
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
index e4f2bb8..211ede8 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/to/TObject.kt
@@ -30,21 +30,21 @@ data class TObject(override val links: List<Link> = emptyList(),
 ) : TransferObject, HasLinks {
 
     fun getProperties(): MutableList<Member> {
-        return getMembersOfType(MemberType.PROPERTY.type)
+        return getMembersOfType(MemberType.PROPERTY)
     }
 
     fun getActions(): MutableList<Member> {
-        return getMembersOfType(MemberType.ACTION.type)
+        return getMembersOfType(MemberType.ACTION)
     }
 
     fun getCollections(): MutableList<Member> {
-        return getMembersOfType(MemberType.COLLECTION.type)
+        return getMembersOfType(MemberType.COLLECTION)
     }
 
-    private fun getMembersOfType(type: String): MutableList<Member> {
+    private fun getMembersOfType(memberType: MemberType): MutableList<Member> {
         val result = mutableListOf<Member>()
         members.forEach {
-            if (it.value.memberType == type) {
+            if (it.value.memberType == memberType.type) {
                 result.add(it.value)
             }
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventLogDetail.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventLogDetail.kt
index 1717264..ef2f5d2 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventLogDetail.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/EventLogDetail.kt
@@ -44,11 +44,15 @@ class EventLogDetail(val logEntry: LogEntry) : Command() {
         formItems.add(FormItem("Aggregators", ValueType.TEXT_AREA, aggtStr, 5))
 
         RoDialog(
-                caption = "Error :" + logEntry.title,
+                caption = "Details :" + logEntry.title,
                 items = formItems,
                 command = this,
-                defaultAction = "Visualize",
+                defaultAction = "Debug",
                 widthPerc = 60).open()
     }
 
+    override fun execute() {
+        console.log(logEntry)
+    }
+
 }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/FieldSetBuilder.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/FieldSetBuilder.kt
index 4d0eb7b..fa47548 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/FieldSetBuilder.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/builder/FieldSetBuilder.kt
@@ -20,7 +20,6 @@ package org.apache.isis.client.kroviz.ui.builder
 
 import org.apache.isis.client.kroviz.to.TObject
 import org.apache.isis.client.kroviz.to.TypeMapper
-import org.apache.isis.client.kroviz.to.ValueType
 import org.apache.isis.client.kroviz.to.bs3.FieldSet
 import org.apache.isis.client.kroviz.ui.FormItem
 import org.apache.isis.client.kroviz.ui.kv.FormPanelFactory
@@ -35,28 +34,32 @@ class FieldSetBuilder {
             tab: RoDisplay
     ): FormPanel<String>? {
 
+        console.log("[FSB.init]")
         val members = tObject.getProperties()
         val items = mutableListOf<FormItem>()
+        console.log("Members: " + members.size)
+        console.log("Layout-Properties: " + fieldSetLayout.propertyList.size)
+
         for (p in fieldSetLayout.propertyList) {
             val label = p.id
 
             val member = members.firstOrNull() { it.id == label }
 
             if (member != null) {
-                var size = 1
-                if (p.multiLine > 1) {
-                    member.type = ValueType.TEXT_AREA.type
-                    size = p.multiLine
-                }
+                val memberType = TypeMapper().forType(member.type!!)
+
+                val size = maxOf(1, p.multiLine)
 
                 val fi = FormItem(
                         label = label,
-                        type = TypeMapper().forType(member.type!!),
+                        type = memberType,
                         content = member.value?.content,
                         size = size,
                         description = p.describedAs,
                         member = member,
                         dspl = tab)
+                console.log(fi)
+
                 items.add(fi)
             }
         }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
index 12ad2a6..ba494a9 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/EventLogTable.kt
@@ -104,7 +104,7 @@ class EventLogTable(val model: List<LogEntry>) : VPanel() {
     private fun buildActionButton(data: LogEntry): Button {
         val b = Button(
                 text = "",
-                icon = "fa fa-ellipsis-v",
+                icon = "fa fa-info-circle",
                 style = data.state.style)
         return b
     }
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/LoginPrompt.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/LoginPrompt.kt
index 38052b3..908dd43 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/LoginPrompt.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/LoginPrompt.kt
@@ -31,7 +31,7 @@ class LoginPrompt : Command() {
     private lateinit var form: RoDialog
 
     //Default values
-    private var url = "http://localhost:8080/"
+   private var url = "http://localhost:8080/"
 //    private var url = "https://demo-wicket.isis.incode.work/"
     private var username = "sven"
     private var password = "pass"
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
index 83bc7ed..256b8ee 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/RoDialog.kt
@@ -27,12 +27,12 @@ import org.apache.isis.client.kroviz.utils.Direction
 import org.apache.isis.client.kroviz.utils.IconManager
 import org.apache.isis.client.kroviz.utils.Point
 import pl.treksoft.kvision.core.CssSize
+import pl.treksoft.kvision.core.JustifyContent
 import pl.treksoft.kvision.core.UNIT
 import pl.treksoft.kvision.core.Widget
 import pl.treksoft.kvision.form.FormPanel
 import pl.treksoft.kvision.html.Button
 import pl.treksoft.kvision.html.ButtonStyle
-import pl.treksoft.kvision.panel.FlexJustify
 import pl.treksoft.kvision.panel.HPanel
 import pl.treksoft.kvision.panel.vPanel
 import pl.treksoft.kvision.utils.perc
@@ -90,7 +90,7 @@ class RoDialog(
         contentWidth = CssSize(widthPerc, UNIT.perc)
         contentHeight = CssSize(heightPerc, UNIT.perc)
 
-        vPanel(justify = FlexJustify.SPACEBETWEEN) {
+        vPanel(justify = JustifyContent.SPACEBETWEEN) {
             height = 100.perc
             formPanel = FormPanelFactory(items).panel
 
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/UiManager.kt
index ba7eb96..444889b 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/UiManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/kv/UiManager.kt
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.client.kroviz.ui.kv
 
+import kotlinx.browser.window
 import org.apache.isis.client.kroviz.core.Session
 import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator
 import org.apache.isis.client.kroviz.core.aggregator.ObjectAggregator
@@ -36,7 +37,6 @@ import pl.treksoft.kvision.core.Widget
 import pl.treksoft.kvision.dropdown.ContextMenu
 import pl.treksoft.kvision.panel.SimplePanel
 import pl.treksoft.kvision.utils.ESC_KEY
-import kotlin.browser.window
 
 /**
  * Single point of contact for view components consisting of:
diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
index c6c0c3a..35dfa89 100644
--- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
+++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/utils/IconManager.kt
@@ -40,7 +40,9 @@ object IconManager {
             "Configuration" to "wrench",
             "Connect" to "plug",
             "Create" to "plus",
+            "Debug" to "bug",
             "Delete" to "trash",
+            "Details" to "info-circle",
             "Diagram" to "project-diagram",
             "Download" to "download",
             "Factory" to "industry",
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/TestUtil.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/TestUtil.kt
index 1ae740b..8450316 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/TestUtil.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/TestUtil.kt
@@ -18,8 +18,7 @@
  */
 package org.apache.isis.client.kroviz
 
-import pl.treksoft.jquery.jQuery
-import kotlin.browser.document
+import kotlinx.browser.document
 
 interface TestSpec {
     fun beforeTest()
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/FR_OBJECT_LAYOUT.json b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/FR_OBJECT_LAYOUT.json
deleted file mode 100644
index deb0cc7..0000000
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/FR_OBJECT_LAYOUT.json
+++ /dev/null
@@ -1,248 +0,0 @@
-{
-    "row": [
-        {
-            "cols": [
-                {
-                    "col": {
-                        "domainObject": {
-                            "named": null,
-                            "describedAs": null,
-                            "plural": null,
-                            "metadataError": null,
-                            "link": {
-                                "rel": "urn:org.restfulobjects:rels/element",
-                                "method": "GET",
-                                "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=",
-                                "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object\""
-                            },
-                            "bookmarking": null,
-                            "cssClass": null,
-                            "cssClassFa": null,
-                            "cssClassFaPosition": null,
-                            "namedEscaped": null
-                        },
-                        "action": [
-                            {
-                                "named": null,
-                                "describedAs": null,
-                                "metadataError": null,
-                                "link": {
-                                    "rel": "urn:org.restfulobjects:rels/action",
-                                    "method": "GET",
-                                    "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/actions/clearHints",
-                                    "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-action\""
-                                },
-                                "id": "clearHints",
-                                "bookmarking": null,
-                                "cssClass": null,
-                                "cssClassFa": null,
-                                "cssClassFaPosition": null,
-                                "hidden": null,
-                                "namedEscaped": null,
-                                "position": null,
-                                "promptStyle": null
-                            },
-                            {
-                                "named": null,
-                                "describedAs": null,
-                                "metadataError": null,
-                                "link": {
-                                    "rel": "urn:org.restfulobjects:rels/action",
-                                    "method": "GET",
-                                    "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/actions/downloadLayoutXml",
-                                    "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-action\""
-                                },
-                                "id": "downloadLayoutXml",
-                                "bookmarking": null,
-                                "cssClass": null,
-                                "cssClassFa": null,
-                                "cssClassFaPosition": null,
-                                "hidden": null,
-                                "namedEscaped": null,
-                                "position": null,
-                                "promptStyle": null
-                            },
-                            {
-                                "named": null,
-                                "describedAs": null,
-                                "metadataError": null,
-                                "link": {
-                                    "rel": "urn:org.restfulobjects:rels/action",
-                                    "method": "GET",
-                                    "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/actions/rebuildMetamodel",
-                                    "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-action\""
-                                },
-                                "id": "rebuildMetamodel",
-                                "bookmarking": null,
-                                "cssClass": null,
-                                "cssClassFa": null,
-                                "cssClassFaPosition": null,
-                                "hidden": null,
-                                "namedEscaped": null,
-                                "position": null,
-                                "promptStyle": null
-                            },
-                            {
-                                "named": null,
-                                "describedAs": null,
-                                "metadataError": null,
-                                "link": {
-                                    "rel": "urn:org.restfulobjects:rels/action",
-                                    "method": "GET",
-                                    "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/actions/openRestApi",
-                                    "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-action\""
-                                },
-                                "id": "openRestApi",
-                                "bookmarking": null,
-                                "cssClass": null,
-                                "cssClassFa": null,
-                                "cssClassFaPosition": null,
-                                "hidden": null,
-                                "namedEscaped": null,
-                                "position": null,
-                                "promptStyle": null
-                            }
-                        ],
-                        "metadataError": null,
-                        "cssClass": null,
-                        "size": null,
-                        "id": null,
-                        "span": 12,
-                        "unreferencedActions": true,
-                        "unreferencedCollections": null
-                    }
-                }
-            ],
-            "metadataError": null,
-            "cssClass": null,
-            "id": null
-        },
-        {
-            "cols": [
-                {
-                    "col": {
-                        "domainObject": null,
-                        "fieldSet": [
-                            {
-                                "name": "General",
-                                "property": [
-                                    {
-                                        "named": null,
-                                        "describedAs": null,
-                                        "metadataError": null,
-                                        "link": {
-                                            "rel": "urn:org.restfulobjects:rels/property",
-                                            "method": "GET",
-                                            "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/properties/className",
-                                            "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-property\""
-                                        },
-                                        "id": "className",
-                                        "cssClass": null,
-                                        "hidden": null,
-                                        "labelPosition": null,
-                                        "multiLine": null,
-                                        "namedEscaped": null,
-                                        "promptStyle": null,
-                                        "renderedAsDayBefore": null,
-                                        "typicalLength": null,
-                                        "unchanging": null
-                                    },
-                                    {
-                                        "named": null,
-                                        "describedAs": null,
-                                        "metadataError": null,
-                                        "link": {
-                                            "rel": "urn:org.restfulobjects:rels/property",
-                                            "method": "GET",
-                                            "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/properties/fixtureScriptClassName",
-                                            "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-property\""
-                                        },
-                                        "id": "fixtureScriptClassName",
-                                        "cssClass": null,
-                                        "hidden": null,
-                                        "labelPosition": null,
-                                        "multiLine": null,
-                                        "namedEscaped": null,
-                                        "promptStyle": null,
-                                        "renderedAsDayBefore": null,
-                                        "typicalLength": null,
-                                        "unchanging": null
-                                    },
-                                    {
-                                        "named": null,
-                                        "describedAs": null,
-                                        "metadataError": null,
-                                        "link": {
-                                            "rel": "urn:org.restfulobjects:rels/property",
-                                            "method": "GET",
-                                            "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/properties/key",
-                                            "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-property\""
-                                        },
-                                        "id": "key",
-                                        "cssClass": null,
-                                        "hidden": null,
-                                        "labelPosition": null,
-                                        "multiLine": null,
-                                        "namedEscaped": null,
-                                        "promptStyle": null,
-                                        "renderedAsDayBefore": null,
-                                        "typicalLength": null,
-                                        "unchanging": null
-                                    },
-                                    {
-                                        "named": null,
-                                        "describedAs": null,
-                                        "metadataError": null,
-                                        "link": {
-                                            "rel": "urn:org.restfulobjects:rels/property",
-                                            "method": "GET",
-                                            "href": "http://localhost:8080/restful/objects/isisApplib.FixtureResult/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGtleT5kb21haW4tYXBwLWRlbW8vcGVyc2lzdC1hbGwvaXRlbS01PC9rZXk-PG9iamVjdC5ib29rbWFyaz5zaW1wbGUuU2ltcGxlT2JqZWN0OjExNDwvb2JqZWN0LmJvb2ttYXJrPjwvbWVtZW50bz4=/properties/object",
-                                            "type": "application/jsonprofile=\"urn:org.restfulobjects:repr-types/object-property\""
-                                        },
-                                        "id": "object",
-                                        "cssClass": null,
-                                        "hidden": null,
-                                        "labelPosition": null,
-                                        "multiLine": null,
-                                        "namedEscaped": null,
-                                        "promptStyle": null,
-                                        "renderedAsDayBefore": null,
-                                        "typicalLength": null,
-                                        "unchanging": null
-                                    }
-                                ],
-                                "metadataError": null,
-                                "id": "general",
-                                "unreferencedActions": null,
-                                "unreferencedProperties": true
-                            }
-                        ],
-                        "metadataError": null,
-                        "cssClass": null,
-                        "size": null,
-                        "id": null,
-                        "span": 4,
-                        "unreferencedActions": null,
-                        "unreferencedCollections": null
-                    }
-                },
-                {
-                    "col": {
-                        "domainObject": null,
-                        "metadataError": null,
-                        "cssClass": null,
-                        "size": null,
-                        "id": null,
-                        "span": 8,
-                        "unreferencedActions": null,
-                        "unreferencedCollections": true
-                    }
-                }
-            ],
-            "metadataError": null,
-            "cssClass": null,
-            "id": null
-        }
-    ],
-    "cssClass": null
-}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/LAYOUT.adoc b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/LAYOUT.adoc
deleted file mode 100644
index a0ab5e2..0000000
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/LAYOUT.adoc
+++ /dev/null
@@ -1,380 +0,0 @@
-[plantuml,file="LAYOUT.png"]
---
-
-@startuml
-class "root" as root {
-.. Properties ..
-cssClass: null
-.. Objects ..
-row: [Array]
-}
-class "row" as root.row {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-1: [object Object]
-}
-class "0" as root.row.0 {
-.. Properties ..
-metadataError: null
-cssClass: null
-id: null
-.. Objects ..
-cols: [Array]
-}
-class "cols" as root.row.0.cols {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-}
-class "0" as root.row.0.cols.0 {
-.. Properties ..
-.. Objects ..
-col: [object Object]
-}
-class "col" as root.row.0.cols.0.col {
-.. Properties ..
-metadataError: null
-cssClass: null
-size: null
-id: null
-span: 12
-unreferencedActions: true
-unreferencedCollections: null
-.. Objects ..
-domainObject: [object Object]
-action: [Array]
-}
-class "domainObject" as root.row.0.cols.0.col.domainObject {
-.. Properties ..
-named: null
-describedAs: null
-plural: null
-metadataError: null
-bookmarking: null
-cssClass: null
-cssClassFa: null
-cssClassFaPosition: null
-namedEscaped: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.0.cols.0.col.domainObject.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/element
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object&quot;
-}
-class "action" as root.row.0.cols.0.col.action {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-1: [object Object]
-2: [object Object]
-3: [object Object]
-}
-class "0" as root.row.0.cols.0.col.action.0 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: clearHints
-bookmarking: null
-cssClass: null
-cssClassFa: null
-cssClassFaPosition: null
-hidden: null
-namedEscaped: null
-position: null
-promptStyle: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.0.cols.0.col.action.0.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/action
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/actions/clearHints
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-action&quot;
-}
-class "1" as root.row.0.cols.0.col.action.1 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: downloadLayoutXml
-bookmarking: null
-cssClass: null
-cssClassFa: null
-cssClassFaPosition: null
-hidden: null
-namedEscaped: null
-position: null
-promptStyle: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.0.cols.0.col.action.1.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/action
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/actions/downloadLayoutXml
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-action&quot;
-}
-class "2" as root.row.0.cols.0.col.action.2 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: rebuildMetamodel
-bookmarking: null
-cssClass: null
-cssClassFa: null
-cssClassFaPosition: null
-hidden: null
-namedEscaped: null
-position: null
-promptStyle: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.0.cols.0.col.action.2.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/action
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/actions/rebuildMetamodel
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-action&quot;
-}
-class "3" as root.row.0.cols.0.col.action.3 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: openRestApi
-bookmarking: null
-cssClass: null
-cssClassFa: null
-cssClassFaPosition: null
-hidden: null
-namedEscaped: null
-position: null
-promptStyle: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.0.cols.0.col.action.3.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/action
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/actions/openRestApi
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-action&quot;
-}
-class "1" as root.row.1 {
-.. Properties ..
-metadataError: null
-cssClass: null
-id: null
-.. Objects ..
-cols: [Array]
-}
-class "cols" as root.row.1.cols {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-1: [object Object]
-}
-class "0" as root.row.1.cols.0 {
-.. Properties ..
-.. Objects ..
-col: [object Object]
-}
-class "col" as root.row.1.cols.0.col {
-.. Properties ..
-domainObject: null
-metadataError: null
-cssClass: null
-size: null
-id: null
-span: 4
-unreferencedActions: null
-unreferencedCollections: null
-.. Objects ..
-fieldSet: [Array]
-}
-class "fieldSet" as root.row.1.cols.0.col.fieldSet {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-}
-class "0" as root.row.1.cols.0.col.fieldSet.0 {
-.. Properties ..
-name: General
-metadataError: null
-id: general
-unreferencedActions: null
-unreferencedProperties: true
-.. Objects ..
-property: [Array]
-}
-class "property" as root.row.1.cols.0.col.fieldSet.0.property {
-.. Properties ..
-.. Objects ..
-0: [object Object]
-1: [object Object]
-2: [object Object]
-3: [object Object]
-}
-class "0" as root.row.1.cols.0.col.fieldSet.0.property.0 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: className
-cssClass: null
-hidden: null
-labelPosition: null
-multiLine: null
-namedEscaped: null
-promptStyle: null
-renderedAsDayBefore: null
-typicalLength: null
-unchanging: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.1.cols.0.col.fieldSet.0.property.0.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/property
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/properties/className
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-property&quot;
-}
-class "1" as root.row.1.cols.0.col.fieldSet.0.property.1 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: fixtureScriptClassName
-cssClass: null
-hidden: null
-labelPosition: null
-multiLine: null
-namedEscaped: null
-promptStyle: null
-renderedAsDayBefore: null
-typicalLength: null
-unchanging: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.1.cols.0.col.fieldSet.0.property.1.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/property
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/properties/fixtureScriptClassName
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-property&quot;
-}
-class "2" as root.row.1.cols.0.col.fieldSet.0.property.2 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: key
-cssClass: null
-hidden: null
-labelPosition: null
-multiLine: null
-namedEscaped: null
-promptStyle: null
-renderedAsDayBefore: null
-typicalLength: null
-unchanging: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.1.cols.0.col.fieldSet.0.property.2.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/property
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/properties/key
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-property&quot;
-}
-class "3" as root.row.1.cols.0.col.fieldSet.0.property.3 {
-.. Properties ..
-named: null
-describedAs: null
-metadataError: null
-id: object
-cssClass: null
-hidden: null
-labelPosition: null
-multiLine: null
-namedEscaped: null
-promptStyle: null
-renderedAsDayBefore: null
-typicalLength: null
-unchanging: null
-.. Objects ..
-link: [object Object]
-}
-class "link" as root.row.1.cols.0.col.fieldSet.0.property.3.link {
-.. Properties ..
-rel: urn:org.restfulobjects:rels/property
-method: GET
-href: http://localhost:8080/restful/objects/isisApplib.FixtureResult/;/properties/object
-type: application/jsonprofile&#x3D;&quot;urn:org.restfulobjects:repr-types/object-property&quot;
-}
-class "1" as root.row.1.cols.1 {
-.. Properties ..
-.. Objects ..
-col: [object Object]
-}
-class "col" as root.row.1.cols.1.col {
-.. Properties ..
-domainObject: null
-metadataError: null
-cssClass: null
-size: null
-id: null
-span: 8
-unreferencedActions: null
-unreferencedCollections: true
-}
-root.row.0.cols.0.col.domainObject -- root.row.0.cols.0.col.domainObject.link
-root.row.0.cols.0.col.action.0 -- root.row.0.cols.0.col.action.0.link
-root.row.0.cols.0.col.action.1 -- root.row.0.cols.0.col.action.1.link
-root.row.0.cols.0.col.action.2 -- root.row.0.cols.0.col.action.2.link
-root.row.0.cols.0.col.action.3 -- root.row.0.cols.0.col.action.3.link
-root.row.0.cols.0.col.action -- root.row.0.cols.0.col.action.0
-root.row.0.cols.0.col.action -- root.row.0.cols.0.col.action.1
-root.row.0.cols.0.col.action -- root.row.0.cols.0.col.action.2
-root.row.0.cols.0.col.action -- root.row.0.cols.0.col.action.3
-root.row.0.cols.0.col -- root.row.0.cols.0.col.domainObject
-root.row.0.cols.0.col -- root.row.0.cols.0.col.action
-root.row.0.cols.0 -- root.row.0.cols.0.col
-root.row.0.cols -- root.row.0.cols.0
-root.row.0 -- root.row.0.cols
-root.row.1.cols.0.col.fieldSet.0.property.0 -- root.row.1.cols.0.col.fieldSet.0.property.0.link
-root.row.1.cols.0.col.fieldSet.0.property.1 -- root.row.1.cols.0.col.fieldSet.0.property.1.link
-root.row.1.cols.0.col.fieldSet.0.property.2 -- root.row.1.cols.0.col.fieldSet.0.property.2.link
-root.row.1.cols.0.col.fieldSet.0.property.3 -- root.row.1.cols.0.col.fieldSet.0.property.3.link
-root.row.1.cols.0.col.fieldSet.0.property -- root.row.1.cols.0.col.fieldSet.0.property.0
-root.row.1.cols.0.col.fieldSet.0.property -- root.row.1.cols.0.col.fieldSet.0.property.1
-root.row.1.cols.0.col.fieldSet.0.property -- root.row.1.cols.0.col.fieldSet.0.property.2
-root.row.1.cols.0.col.fieldSet.0.property -- root.row.1.cols.0.col.fieldSet.0.property.3
-root.row.1.cols.0.col.fieldSet.0 -- root.row.1.cols.0.col.fieldSet.0.property
-root.row.1.cols.0.col.fieldSet -- root.row.1.cols.0.col.fieldSet.0
-root.row.1.cols.0.col -- root.row.1.cols.0.col.fieldSet
-root.row.1.cols.0 -- root.row.1.cols.0.col
-root.row.1.cols.1 -- root.row.1.cols.1.col
-root.row.1.cols -- root.row.1.cols.0
-root.row.1.cols -- root.row.1.cols.1
-root.row.1 -- root.row.1.cols
-root.row -- root.row.0
-root.row -- root.row.1
-root -- root.row
-@enduml
-
---
-
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/ResponseRegressionTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/ResponseRegressionTest.kt
new file mode 100644
index 0000000..6fcdb38
--- /dev/null
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/ResponseRegressionTest.kt
@@ -0,0 +1,71 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.client.kroviz.snapshots
+
+import org.apache.isis.client.kroviz.snapshots.demo2_0_0.Response2Handler
+import org.apache.isis.client.kroviz.to.Link
+import org.apache.isis.client.kroviz.to.Method
+import org.apache.isis.client.kroviz.ui.kv.UiManager
+import kotlin.test.BeforeTest
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
+
+/**
+ * This is an integration test that requires <Demo> running on http://localhost:8080
+ * automate via -> @link https://bmuschko.com/blog/docker-integration-testing/
+ * compare json -> @link https://stackoverflow.com/questions/26049303/how-to-compare-two-json-have-the-same-properties-without-order
+ */
+class ResponseRegressionTest {
+
+    @BeforeTest
+    fun setup() {
+        val user = "sven"
+        val pw = "pass"
+        val url = "http://${user}:${pw}@localhost:8080/restful/"
+        UiManager.login(url, user, pw)
+    }
+
+    //@Test  // invoking HttpRequest does not work - yet
+    fun testCompareSnapshotWithResponse() {
+        //given
+        val map = Response2Handler.map
+        val credentials = UiManager.getCredentials()
+        //when
+        console.log("[RRT.testCompareSnapshotWithResponse]")
+        map.forEach { rh ->
+            val handler = rh.value
+            val jsonStr = rh.key.str
+            val expected = handler.parse(jsonStr)
+
+            val href = rh.key.url
+            console.log(href)
+
+            val link = Link(method = Method.GET.operation, href = href)
+            val response = SyncRequest().invoke(link, credentials)
+
+            val actual = handler.parse(response)
+
+            assertEquals(expected, actual)
+        }
+        //then
+        assertTrue(true, "no exception in loop")
+    }
+
+}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/SyncRequest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/SyncRequest.kt
new file mode 100644
index 0000000..38859ec
--- /dev/null
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/SyncRequest.kt
@@ -0,0 +1,27 @@
+package org.apache.isis.client.kroviz.snapshots
+
+import org.apache.isis.client.kroviz.IntegrationTest
+import org.apache.isis.client.kroviz.to.Link
+import org.apache.isis.client.kroviz.ui.kv.Constants
+import org.w3c.xhr.XMLHttpRequest
+
+class SyncRequest : IntegrationTest() {
+
+    fun invoke(link: Link, credentials: String): String {
+        val method = link.method
+        val url = link.href
+
+        val xhr = XMLHttpRequest()
+        xhr.open(method, url, false)
+        xhr.setRequestHeader("Authorization", "Basic $credentials")
+        xhr.setRequestHeader("Content-Type", Constants.stdMimeType)
+        xhr.setRequestHeader("Accept", Constants.svgMimeType)
+
+        xhr.send()
+        while (xhr.readyState != XMLHttpRequest.DONE) {
+            wait(100)
+            console.log("[SyncRequest.invoke] wait")
+        }
+        return (xhr.responseText);
+    }
+}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
index f372abc..cfc56fb 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/ACTIONS_STRINGS_INVOKE.kt
@@ -22,36 +22,37 @@ import org.apache.isis.client.kroviz.snapshots.Response
 
 object ACTIONS_STRINGS_INVOKE : Response() {
     override val url = "http://localhost:8080/restful/objects/demo.JavaLangTypesMenu/1/actions/strings/invoke"
-    override val str = """{
+    override val str = """
+{
   "links": [
     {
       "rel": "self",
-      "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
       "method": "GET",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
       "title": "String data type"
     },
     {
       "rel": "describedby",
-      "href": "https://localhost:8080/restful/domain-types/demo.JavaLangStrings",
+      "href": "https://demo-wicket.isis.incode.work/restful/domain-types/demo.JavaLangStrings",
       "method": "GET",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
     },
     {
       "rel": "urn:org.apache.isis.restfulobjects:rels/object-layout",
-      "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-layout",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-layout",
       "method": "GET",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-layout-bs3\""
     },
     {
       "rel": "urn:org.apache.isis.restfulobjects:rels/object-icon",
-      "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/image",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/image",
       "method": "GET",
       "type": "image/png"
     },
     {
       "rel": "urn:org.restfulobjects:rels/update",
-      "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
       "method": "PUT",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
       "arguments": {}
@@ -66,18 +67,87 @@ object ACTIONS_STRINGS_INVOKE : Response() {
   "domainType": "demo.JavaLangStrings",
   "instanceId": "PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
   "members": {
+    "description": {
+      "id": "description",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"description\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/description",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "<div class=\"paragraph\">\n<p>The framework has built-in support for the <code>String</code> data type.</p>\n</div>\n<div class=\"paragraph\">\n<p>From here you can:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>navigate to an entity that uses the <code>String</code> datatype</p>\n</li>\n<li>\n<p>open a view model that uses the <code>String</code> datatype</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Some properties on these domain objects are mandatory,  [...]
+      "format": "string",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "objectType": {
+      "id": "objectType",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"objectType\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectType",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "demo.JavaLangStrings",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "objectIdentifier": {
+      "id": "objectIdentifier",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"objectIdentifier\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectIdentifier",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "»1a9012b0",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "sources": {
+      "id": "sources",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"sources\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/sources",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "<div class=\"paragraph\">\n<p><a href=\"https://github.com/apache/isis/tree/master/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings\">Sources</a> for this demo</p>\n</div>",
+      "format": "string",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
     "entities": {
       "id": "entities",
       "memberType": "collection",
       "links": [
         {
           "rel": "urn:org.restfulobjects:rels/details;collection=\"entities\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
         }
-      ],
-      "disabledReason": "Immutable"
+      ]
     },
     "openViewModel": {
       "id": "openViewModel",
@@ -85,7 +155,7 @@ object ACTIONS_STRINGS_INVOKE : Response() {
       "links": [
         {
           "rel": "urn:org.restfulobjects:rels/details;action=\"openViewModel\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openViewModel",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openViewModel",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
@@ -97,79 +167,79 @@ object ACTIONS_STRINGS_INVOKE : Response() {
       "links": [
         {
           "rel": "urn:org.restfulobjects:rels/details;action=\"clearHints\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/clearHints",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/clearHints",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "openRestApi": {
-      "id": "openRestApi",
+    "downloadMetamodelXml": {
+      "id": "downloadMetamodelXml",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "downloadLayoutXml": {
-      "id": "downloadLayoutXml",
+    "rebuildMetamodel": {
+      "id": "rebuildMetamodel",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"rebuildMetamodel\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/rebuildMetamodel",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "rebuildMetamodel": {
-      "id": "rebuildMetamodel",
+    "downloadLayoutXml": {
+      "id": "downloadLayoutXml",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"rebuildMetamodel\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/rebuildMetamodel",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "recentCommands": {
-      "id": "recentCommands",
+    "openRestApi": {
+      "id": "openRestApi",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "downloadMetamodelXml": {
-      "id": "downloadMetamodelXml",
+    "inspectMetamodel": {
+      "id": "inspectMetamodel",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"inspectMetamodel\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/inspectMetamodel",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "inspectMetamodel": {
-      "id": "inspectMetamodel",
+    "recentCommands": {
+      "id": "recentCommands",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"inspectMetamodel\"",
-          "href": "https://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/inspectMetamodel",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL.kt
new file mode 100644
index 0000000..8cb4c89
--- /dev/null
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL.kt
@@ -0,0 +1,61 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.client.kroviz.snapshots.demo2_0_0
+
+import org.apache.isis.client.kroviz.snapshots.Response
+
+object RESTFUL : Response(){
+    override val url = "http://localhost:8080/restful/"
+    override val str = """
+{
+  "links" : [ {
+    "rel" : "self",
+    "href" : "http://localhost:8080/restful/",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/homepage\""
+  }, {
+    "rel" : "urn:org.restfulobjects:rels/user",
+    "href" : "http://localhost:8080/restful/user",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/user\""
+  }, {
+    "rel" : "urn:org.apache.isis.restfulobjects:rels/menuBars",
+    "href" : "http://localhost:8080/restful/menuBars",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/layout-menubars\""
+  }, {
+    "rel" : "urn:org.restfulobjects:rels/services",
+    "href" : "http://localhost:8080/restful/services",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/list\""
+  }, {
+    "rel" : "urn:org.restfulobjects:rels/version",
+    "href" : "http://localhost:8080/restful/version",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/version\""
+  }, {
+    "rel" : "urn:org.restfulobjects:rels/domain-types",
+    "href" : "http://localhost:8080/restful/domain-types",
+    "method" : "GET",
+    "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/type-list\""
+  } ],
+  "extensions" : { }
+}        
+    """
+}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
new file mode 100644
index 0000000..84cb1f5
--- /dev/null
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/Response2Handler.kt
@@ -0,0 +1,50 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.client.kroviz.snapshots.demo2_0_0
+
+import org.apache.isis.client.kroviz.handler.*
+
+object Response2Handler {
+
+    val map = mapOf(
+            RESTFUL to RestfulHandler(),
+            ACTIONS_STRINGS to ActionHandler(),
+            ACTIONS_STRINGS_INVOKE to TObjectHandler(),
+            ACTIONS_TEXT_INVOKE to TObjectHandler(),
+            ASSOCIATED_ACTION_OBJECT_LAYOUT to LayoutHandler(),
+            COLLECTIONS_ENTITIES to CollectionHandler(),
+            DOMAIN_TYPES_PROPERTY to PropertyHandler(),
+            FILE_NODE to DomainTypeHandler(),
+            HTTP_ERROR_405 to HttpErrorHandler(),
+            HTTP_ERROR_500 to HttpErrorHandler(),
+            MENUBARS to MenuBarsHandler(),
+            OBJECT_LAYOUT to LayoutHandler(),
+            PRIMITIVES to TObjectHandler(),
+            PROPERTY to PropertyHandler(),
+            PROPERTY_DESCRIPTION to PropertyHandler(),
+            RESTFUL_DOMAIN_TYPES to DomainTypesHandler(),
+            TAB_OBJECT_LAYOUT to LayoutHandler(),
+            TAB_LAYOUT_XML to LayoutXmlHandler(),
+            TEMPORALS to TObjectHandler(),
+            TEXT_LAYOUT to LayoutHandler(),
+            TOOLTIP_OBJECT_LAYOUT to LayoutHandler(),
+            TUPLE_OBJECT_LAYOUT to LayoutHandler(),
+    )
+
+}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.json b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.json
index 748e11b..d83647d 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.json
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.json
@@ -1,45 +1,154 @@
 {
-  "id": "entities",
-  "memberType": "collection",
   "links": [
     {
       "rel": "self",
-      "href": "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
-      "method": "GET",
-      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
-    },
-    {
-      "rel": "up",
-      "href": "http://localhost:8080/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
       "method": "GET",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
       "title": "String data type"
     },
     {
       "rel": "describedby",
-      "href": "http://localhost:8080/restful/domain-types/demo.JavaLangStrings/collections/entities",
+      "href": "https://demo-wicket.isis.incode.work/restful/domain-types/demo.JavaLangStrings",
       "method": "GET",
-      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/collection-description\""
-    }
-  ],
-  "extensions": {
-    "collectionSemantics": "list"
-  },
-  "value": [
+      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
+    },
     {
-      "rel": "urn:org.restfulobjects:rels/value",
-      "href": "http://localhost:8080/restful/objects/demo.JavaLangStringJdo/1",
+      "rel": "urn:org.apache.isis.restfulobjects:rels/object-layout",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/object-layout",
       "method": "GET",
-      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
-      "title": "StringJDO entity: Hello"
+      "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-layout-bs3\""
     },
     {
-      "rel": "urn:org.restfulobjects:rels/value",
-      "href": "http://localhost:8080/restful/objects/demo.JavaLangStringJdo/2",
+      "rel": "urn:org.apache.isis.restfulobjects:rels/object-icon",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/image",
       "method": "GET",
+      "type": "image/png"
+    },
+    {
+      "rel": "urn:org.restfulobjects:rels/update",
+      "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+      "method": "PUT",
       "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
-      "title": "StringJDO entity: world"
+      "arguments": {}
     }
   ],
-  "disabledReason": "Immutable"
+  "extensions": {
+    "oid": "demo.JavaLangStrings:PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+    "isService": false,
+    "isPersistent": true
+  },
+  "title": "String data type",
+  "domainType": "demo.JavaLangStrings",
+  "instanceId": "PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
+  "members": {
+    "entities": {
+      "id": "entities",
+      "memberType": "collection",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;collection=\"entities\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/collections/entities",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
+        }
+      ]
+    },
+    "openViewModel": {
+      "id": "openViewModel",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"openViewModel\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openViewModel",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "clearHints": {
+      "id": "clearHints",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"clearHints\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/clearHints",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "inspectMetamodel": {
+      "id": "inspectMetamodel",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"inspectMetamodel\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/inspectMetamodel",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "downloadLayoutXml": {
+      "id": "downloadLayoutXml",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "rebuildMetamodel": {
+      "id": "rebuildMetamodel",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"rebuildMetamodel\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/rebuildMetamodel",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "recentCommands": {
+      "id": "recentCommands",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "downloadMetamodelXml": {
+      "id": "downloadMetamodelXml",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    },
+    "openRestApi": {
+      "id": "openRestApi",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
+    }
+  }
 }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.svg b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.svg
deleted file mode 100644
index 1b2faa4..0000000
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.svg
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" contentScriptType="application/ecmascript" contentStyleType="text/css"
-     height="203px" preserveAspectRatio="none" style="width:309px;height:203px;" version="1.1" viewBox="0 0 309 203"
-     width="309px" zoomAndPan="magnify">
-    <defs>
-        <filter height="300%" id="f1xj00ih3jrk7f" width="300%" x="-1" y="-1">
-            <feGaussianBlur result="blurOut" stdDeviation="2.0"/>
-            <feColorMatrix in="blurOut" result="blurOut2" type="matrix"
-                           values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/>
-            <feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/>
-            <feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/>
-        </filter>
-    </defs>
-    <g><!--MD5=[f621a9b5735c62a9e50fa7c1e42ea0f4]↵cluster domainapp.modules.simple.dom.impl-->
-        <polygon fill="#FFFFFF" filter="url(#f1xj00ih3jrk7f)"
-                 points="14,16,277,16,284,38.7999,287,38.7999,287,191,14,191,14,16"
-                 style="stroke: #000000; stroke-width: 1.5;"/>
-        <line style="stroke: #000000; stroke-width: 1.5;" x1="14" x2="284" y1="38.7999" y2="38.7999"/>
-        <text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs"
-              textLength="257" x="18" y="31.9999">domainapp.modules.simple.dom.impl
-        </text><!--MD5=[e6e8857f289496579330543e748c2106]↵class SimpleObject-->
-        <rect fill="#FEFECE" filter="url(#f1xj00ih3jrk7f)" height="140.3993" id="SimpleObject"
-              style="stroke: #A80036; stroke-width: 1.5;" width="129" x="85.5" y="43"/>
-        <ellipse cx="112.2" cy="59" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/>
-        <path d="M111.5594,62.7813 Q112.3563,62.7813 112.9266,62.5859 Q113.4969,62.3906 113.7391,62.1641 Q113.9813,61.9375 114.2234,61.7422 Q114.4656,61.5469 114.6844,61.5469 Q115.0281,61.5469 115.2859,61.8047 Q115.5438,62.0625 115.5438,62.3906 Q115.5438,63.125 114.3797,63.8047 Q113.2156,64.4844 111.5125,64.4844 Q109.3563,64.4844 107.9344,63.2188 Q106.5125,61.9531 106.5125,60.0156 L106.5125,58.8906 Q106.5125,56.8594 107.8406,55.4766 Q109.1688,54.0938 111.1375,54.0938 Q112.325,54.0938 113 [...]
-        <text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="71"
-              x="128.8" y="63.8">SimpleObject
-        </text>
-        <line style="stroke: #A80036; stroke-width: 1.5;" x1="86.5" x2="213.5" y1="75" y2="75"/>
-        <line style="stroke: #A80036; stroke-width: 1.5;" x1="86.5" x2="213.5" y1="83" y2="83"/>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93"
-              x="91.5" y="97.9999">rebuildMetamodel()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="117"
-              x="91.5" y="111.1998">downloadJdoMetadata()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="69"
-              x="91.5" y="124.3997">openRestApi()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104"
-              x="91.5" y="137.5996">downloadLayoutXml()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37"
-              x="91.5" y="150.7995">delete()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="70"
-              x="91.5" y="163.9994">updateName()
-        </text>
-        <text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56"
-              x="91.5" y="177.1993">clearHints()
-        </text><!--MD5=[903507c5920b0ecb2f83cd94e1c42ae5]↵@startuml
-↵package domainapp.modules.simple.dom.impl {
-↵class SimpleObject
-↵SimpleObject : rebuildMetamodel()
-↵SimpleObject : downloadJdoMetadata()
-↵SimpleObject : openRestApi()
-↵SimpleObject : downloadLayoutXml()
-↵SimpleObject : delete()
-↵SimpleObject : updateName()
-↵SimpleObject : clearHints()
-↵}
-↵@enduml
-↵↵PlantUML version 1.2020.04(Thu Mar 19 10:16:49 GMT 2020)↵(GPL source distribution)↵Java Runtime: OpenJDK Runtime Environment↵JVM: OpenJDK 64-Bit Server VM↵Java Version: 1.8.0_191-b12↵Operating System: Linux↵Default Encoding: UTF-8↵Language: en↵Country: US↵-->
-    </g>
-</svg>
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.xml b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.xml
deleted file mode 100644
index 73edc52..0000000
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<bs3:grid xmlns:cpt="http://isis.apache.org/applib/layout/component" xmlns:lnk="http://isis.apache.org/applib/layout/links" xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject>
-                <cpt:link>
-                    <lnk:rel>urn:org.restfulobjects:rels/element</lnk:rel>
-                    <lnk:method>GET</lnk:method>
-                    <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==</lnk:href>
-                    <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object"</lnk:type>
-                </cpt:link>
-            </cpt:domainObject>
-            <cpt:action hidden="EVERYWHERE" id="clearHints">
-                <cpt:link>
-                    <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
-                    <lnk:method>GET</lnk:method>
-                    <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/actions/clearHints</lnk:href>
-                    <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
-                </cpt:link>
-            </cpt:action>
-            <cpt:action id="openRestApi">
-                <cpt:link>
-                    <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
-                    <lnk:method>GET</lnk:method>
-                    <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/actions/openRestApi</lnk:href>
-                    <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
-                </cpt:link>
-            </cpt:action>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="General">
-                    <bs3:row>
-                        <bs3:col span="8">
-                            <cpt:fieldSet name="Property" id="key">
-                                <cpt:action id="downloadLayoutXml" position="PANEL_DROPDOWN">
-                                    <cpt:link>
-                                        <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
-                                        <lnk:method>GET</lnk:method>
-                                        <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/actions/downloadLayoutXml</lnk:href>
-                                        <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
-                                    </cpt:link>
-                                </cpt:action>
-                                <cpt:action id="rebuildMetamodel" position="PANEL_DROPDOWN">
-                                    <cpt:link>
-                                        <lnk:rel>urn:org.restfulobjects:rels/action</lnk:rel>
-                                        <lnk:method>GET</lnk:method>
-                                        <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/actions/rebuildMetamodel</lnk:href>
-                                        <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-action"</lnk:type>
-                                    </cpt:link>
-                                </cpt:action>
-                                <cpt:property id="key">
-                                    <cpt:link>
-                                        <lnk:rel>urn:org.restfulobjects:rels/property</lnk:rel>
-                                        <lnk:method>GET</lnk:method>
-                                        <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/properties/key</lnk:href>
-                                        <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-property"</lnk:type>
-                                    </cpt:link>
-                                </cpt:property>
-                                <cpt:property id="value" multiLine="5">
-                                    <cpt:link>
-                                        <lnk:rel>urn:org.restfulobjects:rels/property</lnk:rel>
-                                        <lnk:method>GET</lnk:method>
-                                        <lnk:href>http://localhost:8080/restful/objects/isisApplib.ConfigurationProperty/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8Y29uZmlndXJhdGlvblByb3BlcnR5PgogICAgPGtleT5pc2lzLmFwcE1hbmlmZXN0PC9rZXk-CiAgICA8dmFsdWU-ZG9tYWluYXBwLmFwcGxpY2F0aW9uLm1hbmlmZXN0LkRvbWFpbkFwcEFwcE1hbmlmZXN0PC92YWx1ZT4KPC9jb25maWd1cmF0aW9uUHJvcGVydHk-Cg==/properties/value</lnk:href>
-                                        <lnk:type>application/json;profile="urn:org.restfulobjects:repr-types/object-property"</lnk:type>
-                                    </cpt:link>
-                                </cpt:property>
-                            </cpt:fieldSet>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/action_string.json b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample2.json
similarity index 58%
rename from incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/action_string.json
rename to incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample2.json
index fc8e52c..76f02a3 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/action_string.json
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/sample2.json
@@ -42,6 +42,76 @@
   "domainType": "demo.JavaLangStrings",
   "instanceId": "PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=",
   "members": {
+    "description": {
+      "id": "description",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"description\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/description",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "<div class=\"paragraph\">\n<p>The framework has built-in support for the <code>String</code> data type.</p>\n</div>\n<div class=\"paragraph\">\n<p>From here you can:</p>\n</div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>navigate to an entity that uses the <code>String</code> datatype</p>\n</li>\n<li>\n<p>open a view model that uses the <code>String</code> datatype</p>\n</li>\n</ul>\n</div>\n<div class=\"paragraph\">\n<p>Some properties on these domain objects are mandatory,  [...]
+      "format": "string",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "objectType": {
+      "id": "objectType",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"objectType\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectType",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "demo.JavaLangStrings",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "objectIdentifier": {
+      "id": "objectIdentifier",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"objectIdentifier\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/objectIdentifier",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "»1a9012b0",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
+    "sources": {
+      "id": "sources",
+      "memberType": "property",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;property=\"sources\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/properties/sources",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
+        }
+      ],
+      "value": "<div class=\"paragraph\">\n<p><a href=\"https://github.com/apache/isis/tree/master/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings\">Sources</a> for this demo</p>\n</div>",
+      "format": "string",
+      "extensions": {
+        "x-isis-format": "string"
+      },
+      "disabledReason": "Contributed property"
+    },
     "entities": {
       "id": "entities",
       "memberType": "collection",
@@ -52,8 +122,7 @@
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\""
         }
-      ],
-      "disabledReason": "Immutable"
+      ]
     },
     "openViewModel": {
       "id": "openViewModel",
@@ -79,25 +148,13 @@
         }
       ]
     },
-    "openRestApi": {
-      "id": "openRestApi",
-      "memberType": "action",
-      "links": [
-        {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
-          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
-          "method": "GET",
-          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
-        }
-      ]
-    },
-    "downloadLayoutXml": {
-      "id": "downloadLayoutXml",
+    "downloadMetamodelXml": {
+      "id": "downloadMetamodelXml",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
-          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
@@ -115,25 +172,25 @@
         }
       ]
     },
-    "recentCommands": {
-      "id": "recentCommands",
+    "downloadLayoutXml": {
+      "id": "downloadLayoutXml",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
-          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadLayoutXml\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadLayoutXml",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
     },
-    "downloadMetamodelXml": {
-      "id": "downloadMetamodelXml",
+    "openRestApi": {
+      "id": "openRestApi",
       "memberType": "action",
       "links": [
         {
-          "rel": "urn:org.restfulobjects:rels/details;action=\"downloadMetamodelXml\"",
-          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/downloadMetamodelXml",
+          "rel": "urn:org.restfulobjects:rels/details;action=\"openRestApi\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/openRestApi",
           "method": "GET",
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
@@ -150,6 +207,18 @@
           "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
       ]
+    },
+    "recentCommands": {
+      "id": "recentCommands",
+      "memberType": "action",
+      "links": [
+        {
+          "rel": "urn:org.restfulobjects:rels/details;action=\"recentCommands\"",
+          "href": "https://demo-wicket.isis.incode.work/restful/objects/demo.JavaLangStrings/PADw_eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KPERlbW8vPgo=/actions/recentCommands",
+          "method": "GET",
+          "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
+        }
+      ]
     }
   }
 }
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt
deleted file mode 100644
index f51e4fc..0000000
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/simpleapp1_16_0/UrlsTest.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.client.kroviz.snapshots.simpleapp1_16_0
-
-import org.apache.isis.client.kroviz.IntegrationTest
-import org.apache.isis.client.kroviz.core.aggregator.ActionDispatcher
-import org.apache.isis.client.kroviz.core.event.EventStore
-import org.apache.isis.client.kroviz.core.event.ResourceSpecification
-import org.apache.isis.client.kroviz.core.event.RoXmlHttpRequest
-import org.apache.isis.client.kroviz.to.Link
-import org.apache.isis.client.kroviz.to.Method
-import kotlin.test.assertEquals
-
-/**
- * This is an integration test that requires SimpleApp running on http://localhost:8080
- *
- * @item Iterate over all Objects defined in package 'urls',
- * @item check if the href 'self' can be invoked and
- * @item compare the response of invoking 'self' with what is hardcoded
- */
-class UrlsTest : IntegrationTest() {
-
-    //@Test
-    fun testUrls() {
-        if (isAppAvailable()) {
-            // given
-            val urls = mutableMapOf<String, String>()
-            urls.put(FR_OBJECT.url, FR_OBJECT.str)
-            urls.put(FR_OBJECT_BAZ.url, FR_OBJECT_BAZ.str)
-            urls.put(FR_OBJECT_LAYOUT.url, FR_OBJECT_LAYOUT.str)
-            urls.put(FR_OBJECT_PROPERTY.url, FR_OBJECT_PROPERTY.str)
-            urls.put(FR_PROPERTY_DESCRIPTION.url, FR_PROPERTY_DESCRIPTION.str)
-            urls.put(SO_0.url, SO_0.str)
-            urls.put(SO_LIST_ALL.url, SO_LIST_ALL.str)
-            urls.put(SO_LIST_ALL_INVOKE.url, SO_LIST_ALL_INVOKE.str)
-            urls.put(SO_LIST_ALL_OBJECTS.url, SO_LIST_ALL_OBJECTS.str)
-            urls.put(SO_MENU.url, SO_MENU.str)
-            urls.put(SO_OBJECT_LAYOUT.url, SO_OBJECT_LAYOUT.str)
-            urls.put(RESTFUL_SERVICES.url, RESTFUL_SERVICES.str)
-
-            //when
-            for (entry in urls) {
-                val href = entry.key
-                val link = Link(method = Method.GET.operation, href = href)
-                RoXmlHttpRequest().invoke(link, ActionDispatcher())
-            }
-
-            // then
-            wait(1000)
-            for (entry in urls) {
-                val hrefSpec = ResourceSpecification(entry.key)
-                val actual = EventStore.find(hrefSpec)!!.getResponse()
-                assertEquals(entry.value, actual)
-            }
-        }
-    }
-
-}
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
index 4433000..d4f3bc2 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/LinkTest.kt
@@ -79,36 +79,12 @@ class LinkTest {
         assertEquals(Relation.SERVICES, rel)
     }
 
-    val response2Handler = mapOf(
-            RESTFUL to RestfulHandler(),
-            ACTIONS_STRINGS to ActionHandler(),
-            ACTIONS_STRINGS_INVOKE to TObjectHandler(),
-            ACTIONS_TEXT_INVOKE to TObjectHandler(),
-            ASSOCIATED_ACTION_OBJECT_LAYOUT to LayoutHandler(),
-            COLLECTIONS_ENTITIES to CollectionHandler(),
-            DOMAIN_TYPES_PROPERTY to PropertyHandler(),
-            FILE_NODE to DomainTypeHandler(),
-            HTTP_ERROR_405 to HttpErrorHandler(),
-            HTTP_ERROR_500 to HttpErrorHandler(),
-            MENUBARS to MenuBarsHandler(),
-            OBJECT_LAYOUT to LayoutHandler(),
-            PRIMITIVES to TObjectHandler(),
-            PROPERTY to PropertyHandler(),
-            PROPERTY_DESCRIPTION to PropertyHandler(),
-            RESTFUL_DOMAIN_TYPES to DomainTypesHandler(),
-            TAB_OBJECT_LAYOUT to LayoutHandler(),
-            TAB_LAYOUT_XML to LayoutXmlHandler(),
-            TEMPORALS to TObjectHandler(),
-            TEXT_LAYOUT to LayoutHandler(),
-            TOOLTIP_OBJECT_LAYOUT to LayoutHandler(),
-            TUPLE_OBJECT_LAYOUT to LayoutHandler(),
-    )
-
     @Test
     fun testFindParsedLinkEnums() {
         //given
+        val map = Response2Handler.map
         //when
-        response2Handler.forEach { rh ->
+        map.forEach { rh ->
             val jsonStr = rh.key.str
             val ro = rh.value.parse(jsonStr)
             if (ro is HasLinks) {
diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
index c075451..dcc5e2a 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/to/TObjectTest.kt
@@ -112,16 +112,15 @@ class TObjectTest {
         val jsonStr = ACTIONS_STRINGS_INVOKE.str
         // when
         val to = TObjectHandler().parse(jsonStr) as TObject
-        val members = to.members
-        val properties = to.getProperties()
         // then
-        assertNotNull(to.links)
         assertEquals("String data type", to.links[0].title)
-        assertEquals(9, members.size)
-        assertEquals(0, properties.size)
+        assertEquals(13, to.members.size)
+        assertEquals(1, to.getCollections().size)
+        assertEquals(8, to.getActions().size)
+        assertEquals(4, to.getProperties().size)
 
-        val filteredProperties = properties.filter { it.id == "description" }
-        assertEquals(0, filteredProperties.size)
+        val filteredProperties = to.getProperties().filter { it.id == "description" }
+        assertEquals(1, filteredProperties.size)
     }
 
 }