You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/02/22 20:29:23 UTC

(causeway) 05/09: CAUSEWAY-3676: introduces SchemaStrategy

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

danhaywood pushed a commit to branch CAUSEWAY-3676
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 3d4d26b17f26ccba7f8d4b07acb5e20c00dd9e73
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Feb 22 06:45:35 2024 +0000

    CAUSEWAY-3676: introduces SchemaStrategy
---
 .../graphql/model/src/main/java/module-info.java   |   23 +-
 .../viewer/graphql/model/domain/GqlvScenario.java  |    4 +-
 .../graphql/model/domain/GqlvScenarioStep.java     |   12 +-
 .../viewer/graphql/model/domain/SchemaType.java    |    3 +-
 .../model/domain/common/SchemaStrategy.java        |   45 +
 .../domain/common/query/GqlvDomainObject.java      |   73 +-
 .../domain/common/query/GqlvDomainService.java     |   25 +-
 .../domain/common/query/GqlvMemberHolder.java      |   10 +
 .../query/GqlvTopLevelQueryAbstractSchema.java}    |   54 +-
 .../model/domain/rich/SchemaStrategyRich.java      |   71 +
 .../model/domain/rich/query/GqlvAction.java        |    5 +-
 .../model/domain/rich/query/GqlvAssociation.java   |    4 +-
 .../model/domain/rich/query/GqlvCollection.java    |    5 +-
 .../model/domain/rich/query/GqlvMember.java        |    7 +-
 .../model/domain/rich/query/GqlvProperty.java      |    5 +-
 .../rich/query/GqlvTopLevelQueryRichSchema.java    |   76 +-
 .../model/domain/simple/SchemaStrategySimple.java  |   71 +
 .../model/domain/simple/query/GqlvAction.java      |    5 +-
 .../model/domain/simple/query/GqlvAssociation.java |    3 +-
 .../model/domain/simple/query/GqlvCollection.java  |    5 +-
 .../model/domain/simple/query/GqlvMember.java      |   10 +-
 .../model/domain/simple/query/GqlvProperty.java    |    5 +-
 .../query/GqlvTopLevelQuerySimpleSchema.java       |  116 +-
 viewers/graphql/test/src/test/resources/schema.gql | 4602 +++++++++++++++++++-
 24 files changed, 4753 insertions(+), 486 deletions(-)

diff --git a/viewers/graphql/model/src/main/java/module-info.java b/viewers/graphql/model/src/main/java/module-info.java
index c180dc7397..aa534b05e3 100644
--- a/viewers/graphql/model/src/main/java/module-info.java
+++ b/viewers/graphql/model/src/main/java/module-info.java
@@ -1,24 +1,27 @@
 module org.apache.causeway.incubator.viewer.graphql.model {
     exports org.apache.causeway.viewer.graphql.model;
-    exports org.apache.causeway.viewer.graphql.model.types;
-    exports org.apache.causeway.viewer.graphql.model.toplevel;
-    exports org.apache.causeway.viewer.graphql.model.registry;
-    exports org.apache.causeway.viewer.graphql.model.domain;
-    exports org.apache.causeway.viewer.graphql.model.exceptions;
     exports org.apache.causeway.viewer.graphql.model.context;
-    exports org.apache.causeway.viewer.graphql.model.mmproviders;
-    exports org.apache.causeway.viewer.graphql.model.fetcher;
+    exports org.apache.causeway.viewer.graphql.model.domain;
+    exports org.apache.causeway.viewer.graphql.model.domain.common;
+    exports org.apache.causeway.viewer.graphql.model.domain.common.query;
+    exports org.apache.causeway.viewer.graphql.model.domain.rich;
     exports org.apache.causeway.viewer.graphql.model.domain.rich.query;
     exports org.apache.causeway.viewer.graphql.model.domain.rich.mutation;
+    exports org.apache.causeway.viewer.graphql.model.domain.simple;
     exports org.apache.causeway.viewer.graphql.model.domain.simple.query;
     exports org.apache.causeway.viewer.graphql.model.domain.simple.mutation;
-    exports org.apache.causeway.viewer.graphql.model.domain.common.query;
+    exports org.apache.causeway.viewer.graphql.model.exceptions;
+    exports org.apache.causeway.viewer.graphql.model.fetcher;
+    exports org.apache.causeway.viewer.graphql.model.mmproviders;
+    exports org.apache.causeway.viewer.graphql.model.registry;
+    exports org.apache.causeway.viewer.graphql.model.toplevel;
+    exports org.apache.causeway.viewer.graphql.model.types;
 
     requires org.apache.causeway.core.config;
     requires org.apache.causeway.incubator.viewer.graphql.applib;
-    requires spring.context;
     requires org.apache.causeway.core.metamodel;
-    requires com.graphqljava;
     requires spring.boot.autoconfigure;
+    requires spring.context;
+    requires com.graphqljava;
     requires com.graphqljava.extendedscalars;
 }
\ No newline at end of file
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
index 0e2ca046fd..bb3eff2bdd 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
@@ -25,6 +25,7 @@ import graphql.schema.GraphQLArgument;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
 
 /**
  * Exposes a domain service (view model or entity) via the GQL viewer.
@@ -38,12 +39,13 @@ public class GqlvScenario
     private final GqlvScenarioStep scenarioStep;
 
     public GqlvScenario(
+            final SchemaStrategy schemaStrategy,
             final Context context) {
         super("Scenario", context);
 
         addChildFieldFor(this.scenarioName = new GqlvScenarioName(context));
 
-        this.scenarioStep = new GqlvScenarioStep(context);
+        this.scenarioStep = new GqlvScenarioStep(schemaStrategy, context);
         addChildField(scenarioStep.newField("Given", "Given the system under test has this initial state"));
         addChildField(scenarioStep.newField("When", "When the system is changed in some particular way"));
         addChildField(scenarioStep.newField("Then", "Then the system has this resultant state"));
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
index 6d81dd40fb..d340edc751 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
@@ -8,19 +8,21 @@ import graphql.schema.DataFetchingEnvironment;
 
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
 import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
 import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvTopLevelQuerySimpleSchema;
 
 public class GqlvScenarioStep
         extends GqlvAbstractCustom
         implements Parent {
 
-    private static final SchemaType SCHEMA_TYPE = SchemaType.RICH;
-
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
 
-    public GqlvScenarioStep(final Context context) {
+    public GqlvScenarioStep(
+            final SchemaStrategy schemaStrategy,
+            final Context context) {
         super("ScenarioStep", context);
 
         if(isBuilt()) {
@@ -35,7 +37,7 @@ public class GqlvScenarioStep
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    domainObjects.add(addChildFieldFor(GqlvDomainObject.of(SCHEMA_TYPE, objectSpec, context)));
+                    domainObjects.add(addChildFieldFor(GqlvTopLevelQuerySimpleSchema.of(schemaStrategy, objectSpec, context)));
 
                     break;
             }
@@ -44,7 +46,7 @@ public class GqlvScenarioStep
         context.objectSpecifications().forEach(objectSpec -> {
             if (Objects.requireNonNull(objectSpec.getBeanSort()) == BeanSort.MANAGED_BEAN_CONTRIBUTING) { // @DomainService
                 context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
-                        .ifPresent(servicePojo -> domainServices.add(addChildFieldFor(GqlvDomainService.of(SCHEMA_TYPE, objectSpec, servicePojo, context))));
+                        .ifPresent(servicePojo -> domainServices.add(addChildFieldFor(GqlvTopLevelQuerySimpleSchema.of(schemaStrategy, objectSpec, servicePojo, context))));
             }
         });
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/SchemaType.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/SchemaType.java
index ae340ea814..48c03271ad 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/SchemaType.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/SchemaType.java
@@ -2,5 +2,6 @@ package org.apache.causeway.viewer.graphql.model.domain;
 
 public enum SchemaType {
     SIMPLE,
-    RICH,
+    RICH
+    ;
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/SchemaStrategy.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/SchemaStrategy.java
new file mode 100644
index 0000000000..5c01d436d5
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/SchemaStrategy.java
@@ -0,0 +1,45 @@
+package org.apache.causeway.viewer.graphql.model.domain.common;
+
+import java.util.Map;
+
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
+
+public interface SchemaStrategy {
+
+    SchemaType getSchemaType();
+
+    Map<ObjectSpecification, GqlvDomainObject> domainObjectBySpec(Context context);
+    Map<ObjectSpecification, GqlvDomainService> domainServiceBySpec(Context context);
+
+    String topLevelFieldNameFrom(CausewayConfiguration.Viewer.Graphql graphqlConfiguration);
+
+    GqlvAbstractCustom newGqlvDomainObject(
+            final ObjectSpecification objectSpecification,
+            final Context context
+    );
+    GqlvAbstractCustom newGqlvProperty(
+            final GqlvMemberHolder holder,
+            final OneToOneAssociation otoa,
+            final Context context
+    );
+    GqlvAbstractCustom newGqlvCollection(
+            final GqlvMemberHolder holder,
+            final OneToManyAssociation otma,
+            final Context context
+    );
+    GqlvAbstractCustom newGqlvAction(
+            final GqlvMemberHolder holder,
+            final ObjectAction objectAction,
+            final Context context
+    );
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
index 3b6444b70b..b8b6939f61 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainObject.java
@@ -39,11 +39,9 @@ import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
 import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvAction;
-import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvCollection;
-import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvMember;
 import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvMeta;
-import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvProperty;
 
 import lombok.Getter;
 import lombok.val;
@@ -53,67 +51,32 @@ import lombok.val;
  */
 public class GqlvDomainObject
         extends GqlvAbstractCustom
-        implements GqlvMember.Holder, GqlvMeta.Holder {
+        implements GqlvMemberHolder, GqlvMeta.Holder {
 
+    private final SchemaStrategy schemaStrategy;
     @Getter private final ObjectSpecification objectSpecification;
-    @Getter private final SchemaType schemaType;
 
-    private final GqlvMeta meta;
-
-    private final List<GqlvProperty> properties = new ArrayList<>();
-    private final List<GqlvCollection> collections = new ArrayList<>();
-    private final List<GqlvAction> actions = new ArrayList<>();
-
-
-    @Getter private final GraphQLInputObjectType gqlInputObjectType;
-
-    public static GqlvDomainObject of(
-            final SchemaType schemaType,
-            final ObjectSpecification objectSpecification,
-            final Context context) {
-
-        mapSuperclassesIfNecessary(schemaType, objectSpecification, context);
-
-        return computeIfAbsentGqlvDomainObject(schemaType, objectSpecification, context);
+    @Override
+    public SchemaType getSchemaType() {
+        return schemaStrategy.getSchemaType();
     }
 
-    private static void mapSuperclassesIfNecessary(
-            final SchemaType schemaType,
-            final ObjectSpecification objectSpecification,
-            final Context context) {
-        // no need to map if the target subclass has already been built
-        if(context.simpleDomainObjectBySpec.containsKey(objectSpecification)) {
-            return;
-        }
-        val superclasses = superclassesOf(objectSpecification);
-        superclasses.forEach(objectSpec -> computeIfAbsentGqlvDomainObject(schemaType, objectSpec, context));
-    }
+    private final GqlvAbstractCustom meta;
 
-    private static GqlvDomainObject computeIfAbsentGqlvDomainObject(
-            final SchemaType schemaType,
-            final ObjectSpecification objectSpec,
-            final Context context) {
-        return context.simpleDomainObjectBySpec.computeIfAbsent(objectSpec, spec -> new GqlvDomainObject(schemaType, spec, context));
-    }
+    private final List<GqlvAbstractCustom> properties = new ArrayList<>();
+    private final List<GqlvAbstractCustom> collections = new ArrayList<>();
+    private final List<GqlvAbstractCustom> actions = new ArrayList<>();
 
-    private static List<ObjectSpecification> superclassesOf(final ObjectSpecification objectSpecification) {
-        val superclasses = new ArrayList<ObjectSpecification>();
-        ObjectSpecification superclass = objectSpecification.superclass();
-        while (superclass != null && superclass.getCorrespondingClass() != Object.class) {
-            superclasses.add(0, superclass);
-            superclass = superclass.superclass();
-        }
-        return superclasses;
-    }
+    @Getter private final GraphQLInputObjectType gqlInputObjectType;
 
-    private GqlvDomainObject(
-            final SchemaType schemaType,
+    public GqlvDomainObject(
+            final SchemaStrategy schemaStrategy,
             final ObjectSpecification objectSpecification,
             final Context context) {
-        super(TypeNames.objectTypeNameFor(objectSpecification, schemaType), context);
+        super(TypeNames.objectTypeNameFor(objectSpecification, schemaStrategy.getSchemaType()), context);
+        this.schemaStrategy = schemaStrategy;
 
         this.objectSpecification = objectSpecification;
-        this.schemaType = schemaType;
         gqlObjectTypeBuilder.description(objectSpecification.getDescription());
 
         if(isBuilt()) {
@@ -180,11 +143,11 @@ public class GqlvDomainObject
     private void addMembers() {
 
         objectSpecification.streamProperties(MixedIn.INCLUDED)
-                .forEach(prop -> properties.add(addChildFieldFor(new GqlvProperty(this, prop, context))));
+                .forEach(prop -> properties.add(addChildFieldFor(schemaStrategy.newGqlvProperty(this, prop, context))));
         objectSpecification.streamCollections(MixedIn.INCLUDED)
-                .forEach(coll -> collections.add(addChildFieldFor(new GqlvCollection(this, coll, context))));
+                .forEach(coll -> collections.add(addChildFieldFor(schemaStrategy.newGqlvCollection(this, coll, context))));
         objectSpecification.streamActions(context.getActionScope(), MixedIn.INCLUDED)
-                .forEach(act -> actions.add(addChildFieldFor(new GqlvAction(this, act, context))));
+                .forEach(act -> actions.add(addChildFieldFor(schemaStrategy.newGqlvAction(this, act, context))));
     }
 
     @SuppressWarnings("unused")
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainService.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainService.java
index c37907cf94..c91751ced9 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainService.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvDomainService.java
@@ -30,8 +30,8 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
 import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvAction;
-import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvMember;
 
 import lombok.Getter;
 import lombok.val;
@@ -41,33 +41,30 @@ import lombok.val;
  */
 public class GqlvDomainService
         extends GqlvAbstractCustom
-        implements GqlvMember.Holder {
+        implements GqlvMemberHolder {
 
+    @Getter private final SchemaStrategy schemaStrategy;
     @Getter private final ObjectSpecification objectSpecification;
     @Getter private final Object servicePojo;
-    @Getter private final SchemaType schemaType;
 
-    private final List<GqlvAction> actions = new ArrayList<>();
+    @Override
+    public SchemaType getSchemaType() {
+        return schemaStrategy.getSchemaType();
+    }
 
+    private final List<GqlvAbstractCustom> actions = new ArrayList<>();
 
-    public static GqlvDomainService of(
-            final SchemaType schemaType,
-            final ObjectSpecification objectSpecification,
-            final Object servicePojo,
-            final Context context) {
-        return context.simpleDomainServiceBySpec.computeIfAbsent(objectSpecification, spec -> new GqlvDomainService(schemaType, spec, servicePojo, context));
-    }
 
     public GqlvDomainService(
-            final SchemaType schemaType,
+            final SchemaStrategy schemaStrategy,
             final ObjectSpecification objectSpecification,
             final Object servicePojo,
             final Context context) {
-        super(TypeNames.objectTypeNameFor(objectSpecification, schemaType), context);
+        super(TypeNames.objectTypeNameFor(objectSpecification, schemaStrategy.getSchemaType()), context);
+        this.schemaStrategy = schemaStrategy;
 
         this.objectSpecification = objectSpecification;
         this.servicePojo = servicePojo;
-        this.schemaType = schemaType;
 
         if(isBuilt()) {
             return;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMemberHolder.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMemberHolder.java
new file mode 100644
index 0000000000..242e7a62fe
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMemberHolder.java
@@ -0,0 +1,10 @@
+package org.apache.causeway.viewer.graphql.model.domain.common.query;
+
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface GqlvMemberHolder
+        extends ObjectSpecificationProvider,
+        SchemaTypeProvider {
+
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
similarity index 62%
copy from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java
copy to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
index e902e30fbe..f6d94eef15 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvTopLevelQueryAbstractSchema.java
@@ -1,36 +1,39 @@
-package org.apache.causeway.viewer.graphql.model.domain.simple.query;
+package org.apache.causeway.viewer.graphql.model.domain.common.query;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import graphql.schema.DataFetchingEnvironment;
 
+import lombok.Getter;
+import lombok.val;
+
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
-import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
+import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvTopLevelQuerySimpleSchema;
 
-public class GqlvTopLevelQuerySimpleSchema
+public abstract class GqlvTopLevelQueryAbstractSchema
         extends GqlvAbstractCustom
         implements Parent {
 
-    private static final SchemaType SCHEMA_TYPE = SchemaType.SIMPLE;
+    @Getter private final SchemaStrategy schemaStrategy;
 
     private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
 
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
 
-    private final GqlvScenario scenario;
-
-    public GqlvTopLevelQuerySimpleSchema(final Context context) {
-        super("SimpleSchema", context);
+    public GqlvTopLevelQueryAbstractSchema(
+            final SchemaStrategy schemaStrategy,
+            final Context context) {
+        super(schemaStrategy.getSchemaType().name() + "Schema", context);
+        this.schemaStrategy = schemaStrategy;
 
         graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
 
@@ -42,7 +45,7 @@ public class GqlvTopLevelQuerySimpleSchema
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    domainObjects.add(addChildFieldFor(GqlvDomainObject.of(SCHEMA_TYPE, objectSpec, context)));
+                    domainObjects.add(addChildFieldFor(GqlvTopLevelQuerySimpleSchema.of(schemaStrategy, objectSpec, context)));
 
                     break;
             }
@@ -55,24 +58,21 @@ public class GqlvTopLevelQuerySimpleSchema
                     context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
                             .ifPresent(servicePojo ->
                                     domainServices.add(
-                                            addChildFieldFor(GqlvDomainService.of(SCHEMA_TYPE, objectSpec, servicePojo, context))));
+                                            addChildFieldFor(GqlvTopLevelQuerySimpleSchema.of(schemaStrategy, objectSpec, servicePojo, context))));
                     break;
             }
         });
 
-        if (graphqlConfiguration.isIncludeTestingFieldInRich()) {
-            addChildFieldFor(scenario = new GqlvScenario(context));
-        } else {
-            scenario = null;
-        }
-
-        buildObjectType();
+    }
 
-        // the field is used if the configured schemaStyle is 'SIMPLE_AND_RICH'; its is ignored/unused otherwise
-        setField(newFieldDefinition()
-                .name(graphqlConfiguration.getTopLevelFieldNameForSimple())
-                .type(getGqlObjectType())
-                .build());
+    protected static List<ObjectSpecification> superclassesOf(final ObjectSpecification objectSpecification) {
+        val superclasses = new ArrayList<ObjectSpecification>();
+        ObjectSpecification superclass = objectSpecification.superclass();
+        while (superclass != null && superclass.getCorrespondingClass() != Object.class) {
+            superclasses.add(0, superclass);
+            superclass = superclass.superclass();
+        }
+        return superclasses;
     }
 
     @Override
@@ -93,11 +93,7 @@ public class GqlvTopLevelQuerySimpleSchema
             }
         });
 
-
         domainObjects.forEach(domainObject -> domainObject.addDataFetcher(this));
 
-        if (scenario != null) {
-            scenario.addDataFetcher(this);
-        }
     }
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/SchemaStrategyRich.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/SchemaStrategyRich.java
new file mode 100644
index 0000000000..6152261071
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/SchemaStrategyRich.java
@@ -0,0 +1,71 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich;
+
+import java.util.Map;
+
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
+import org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvAction;
+import org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvCollection;
+import org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvProperty;
+
+public class SchemaStrategyRich implements SchemaStrategy {
+
+    @Override
+    public SchemaType getSchemaType() {
+        return SchemaType.RICH;
+    }
+
+    @Override
+    public Map<ObjectSpecification, GqlvDomainObject> domainObjectBySpec(Context context) {
+        return context.richDomainObjectBySpec;
+    }
+
+    @Override
+    public Map<ObjectSpecification, GqlvDomainService> domainServiceBySpec(Context context) {
+        return context.richDomainServiceBySpec;
+    }
+
+    @Override
+    public String topLevelFieldNameFrom(CausewayConfiguration.Viewer.Graphql graphqlConfiguration) {
+        return graphqlConfiguration.getTopLevelFieldNameForRich();
+    }
+
+    public GqlvAbstractCustom newGqlvDomainObject(
+            final ObjectSpecification objectSpecification,
+            final Context context
+    ) {
+        return new GqlvDomainObject(this, objectSpecification, context);
+    }
+
+    public GqlvAbstractCustom newGqlvProperty(
+            final GqlvMemberHolder holder,
+            final OneToOneAssociation otoa,
+            final Context context
+    ) {
+        return new GqlvProperty(holder, otoa, context);
+    };
+    public GqlvAbstractCustom newGqlvCollection(
+            final GqlvMemberHolder holder,
+            final OneToManyAssociation otma,
+            final Context context
+    ) {
+        return new GqlvCollection(holder, otma, context);
+    }
+    public GqlvAbstractCustom newGqlvAction(
+            final GqlvMemberHolder holder,
+            final ObjectAction objectAction,
+            final Context context
+    ) {
+        return new GqlvAction(holder, objectAction, context);
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
index bde11196c2..5d5dbced1b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
@@ -40,6 +40,7 @@ import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
@@ -48,7 +49,7 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvAction
-        extends GqlvMember<ObjectAction, GqlvMember.Holder>
+        extends GqlvMember<ObjectAction, GqlvMemberHolder>
         implements GqlvMemberHidden.Holder<ObjectAction>,
                    GqlvMemberDisabled.Holder<ObjectAction>,
                    GqlvActionInvoke.Holder,
@@ -69,7 +70,7 @@ public class GqlvAction
     private final GqlvActionParams params;
 
     public GqlvAction(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final ObjectAction objectAction,
             final Context context) {
         super(holder, objectAction, TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction, holder.getSchemaType()), context);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociation.java
index 402de5673b..d887a47714 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociation.java
@@ -20,8 +20,10 @@ package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
-public abstract class GqlvAssociation<T extends ObjectAssociation, H extends GqlvMember.Holder>
+public abstract class GqlvAssociation<T extends ObjectAssociation, H extends ObjectSpecificationProvider & SchemaTypeProvider>
         extends GqlvMember<T, H> {
 
     public GqlvAssociation(
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
index cce0a74f51..e81e672685 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
@@ -23,9 +23,10 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 
 public class GqlvCollection
-        extends GqlvAssociation<OneToManyAssociation, GqlvCollection.Holder>
+        extends GqlvAssociation<OneToManyAssociation, GqlvMemberHolder>
         implements GqlvAssociationGet.Holder<OneToManyAssociation>,
                    GqlvMemberHidden.Holder<OneToManyAssociation>,
                    GqlvMemberDisabled.Holder<OneToManyAssociation>,
@@ -37,7 +38,7 @@ public class GqlvCollection
     private final GqlvCollectionDatatype datatype;
 
     public GqlvCollection(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final OneToManyAssociation otma,
             final Context context
     ) {
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMember.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMember.java
index 06c38914f6..d8691e2692 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMember.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMember.java
@@ -29,7 +29,7 @@ import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.Getter;
 
-public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Holder>
+public abstract class GqlvMember<T extends ObjectMember, H extends ObjectSpecificationProvider & SchemaTypeProvider>
     extends GqlvAbstractCustom {
 
     @Getter final H holder;
@@ -57,9 +57,4 @@ public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Ho
         return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
index 03716f52e2..5c58a785f5 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
@@ -29,12 +29,13 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvProperty
-        extends GqlvAssociation<OneToOneAssociation, GqlvMember.Holder>
+        extends GqlvAssociation<OneToOneAssociation, GqlvMemberHolder>
         implements GqlvMemberHidden.Holder<OneToOneAssociation>,
         GqlvMemberDisabled.Holder<OneToOneAssociation>,
         GqlvPropertyGet.Holder,
@@ -66,7 +67,7 @@ public class GqlvProperty
     private final GqlvPropertyDatatype datatype;
 
     public GqlvProperty(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final OneToOneAssociation otoa,
             final Context context) {
         super(holder, otoa, TypeNames.propertyTypeNameFor(holder.getObjectSpecification(), otoa, holder.getSchemaType()), context);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvTopLevelQueryRichSchema.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvTopLevelQueryRichSchema.java
index 17290a43a1..81f45394a0 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvTopLevelQueryRichSchema.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvTopLevelQueryRichSchema.java
@@ -1,67 +1,27 @@
 package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import graphql.schema.DataFetchingEnvironment;
-
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
-import org.apache.causeway.viewer.graphql.model.domain.Parent;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
-import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvTopLevelQueryAbstractSchema;
+import org.apache.causeway.viewer.graphql.model.domain.rich.SchemaStrategyRich;
 
 public class GqlvTopLevelQueryRichSchema
-        extends GqlvAbstractCustom
-        implements Parent {
-
-    private static final SchemaType SCHEMA_TYPE = SchemaType.RICH;
-
-    private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
+        extends GqlvTopLevelQueryAbstractSchema {
 
-    private final List<GqlvDomainService> domainServices = new ArrayList<>();
-    private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
+    private static final SchemaStrategy STRATEGY_RICH = new SchemaStrategyRich();
 
     private final GqlvScenario scenario;
 
     public GqlvTopLevelQueryRichSchema(final Context context) {
-        super("RichSchema", context);
-
-        graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
-
-        // add domain object lookup to top-level query
-        context.objectSpecifications().forEach(objectSpec -> {
-            switch (objectSpec.getBeanSort()) {
-
-                case ABSTRACT:
-                case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
-                case ENTITY:     // @DomainObject(nature=ENTITY)
-
-                    domainObjects.add(addChildFieldFor(GqlvDomainObject.of(SCHEMA_TYPE, objectSpec, context)));
+        super(STRATEGY_RICH, context);
 
-                    break;
-            }
-        });
-
-        // add services to top-level query
-        context.objectSpecifications().forEach(objectSpec -> {
-            switch (objectSpec.getBeanSort()) {
-                case MANAGED_BEAN_CONTRIBUTING: // @DomainService
-                    context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
-                            .ifPresent(servicePojo ->
-                                    domainServices.add(
-                                            addChildFieldFor(GqlvDomainService.of(SCHEMA_TYPE, objectSpec, servicePojo, context))));
-                    break;
-            }
-        });
+        var graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
 
         if (graphqlConfiguration.isIncludeTestingFieldInRich()) {
-            addChildFieldFor(scenario = new GqlvScenario(context));
+            addChildFieldFor(scenario = new GqlvScenario(STRATEGY_RICH, context));
         } else {
             scenario = null;
         }
@@ -70,31 +30,15 @@ public class GqlvTopLevelQueryRichSchema
 
         // the field is used if the schemaStyle is 'SIMPLE_AND_RICH', but is ignored/unused otherwise
         setField(newFieldDefinition()
-                .name(graphqlConfiguration.getTopLevelFieldNameForRich())
+                .name(STRATEGY_RICH.topLevelFieldNameFrom(graphqlConfiguration))
                 .type(getGqlObjectType())
                 .build());
     }
 
-    @Override
-    protected Object fetchData(DataFetchingEnvironment environment) {
-        return environment;
-    }
-
-    public void addDataFetchers() {
-        addDataFetchersForChildren();
-    }
-
     @Override
     protected void addDataFetchersForChildren() {
-        domainServices.forEach(domainService -> {
-            boolean actionsAdded = domainService.hasActions();
-            if (actionsAdded) {
-                domainService.addDataFetcher(this);
-            }
-        });
-
 
-        domainObjects.forEach(domainObject -> domainObject.addDataFetcher(this));
+        super.addDataFetchersForChildren();
 
         if (scenario != null) {
             scenario.addDataFetcher(this);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/SchemaStrategySimple.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/SchemaStrategySimple.java
new file mode 100644
index 0000000000..b63399e901
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/SchemaStrategySimple.java
@@ -0,0 +1,71 @@
+package org.apache.causeway.viewer.graphql.model.domain.simple;
+
+import java.util.Map;
+
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvAction;
+import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvCollection;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
+import org.apache.causeway.viewer.graphql.model.domain.simple.query.GqlvProperty;
+
+public class SchemaStrategySimple implements SchemaStrategy {
+
+    @Override
+    public SchemaType getSchemaType() {
+        return SchemaType.SIMPLE;
+    }
+
+    @Override
+    public Map<ObjectSpecification, GqlvDomainObject> domainObjectBySpec(Context context) {
+        return context.simpleDomainObjectBySpec;
+    }
+
+    @Override
+    public Map<ObjectSpecification, GqlvDomainService> domainServiceBySpec(Context context) {
+        return context.simpleDomainServiceBySpec;
+    }
+
+    @Override
+    public String topLevelFieldNameFrom(CausewayConfiguration.Viewer.Graphql graphqlConfiguration) {
+        return graphqlConfiguration.getTopLevelFieldNameForSimple();
+    }
+
+    public GqlvAbstractCustom newGqlvDomainObject(
+            final ObjectSpecification objectSpecification,
+            final Context context
+    ) {
+        return new GqlvDomainObject(this, objectSpecification, context);
+    }
+
+    public GqlvAbstractCustom newGqlvProperty(
+            final GqlvMemberHolder holder,
+            final OneToOneAssociation otoa,
+            final Context context
+    ) {
+        return new GqlvProperty(holder, otoa, context);
+    };
+    public GqlvAbstractCustom newGqlvCollection(
+            final GqlvMemberHolder holder,
+            final OneToManyAssociation otma,
+            final Context context
+    ) {
+        return new GqlvCollection(holder, otma, context);
+    }
+    public GqlvAbstractCustom newGqlvAction(
+            final GqlvMemberHolder holder,
+            final ObjectAction objectAction,
+            final Context context
+    ) {
+        return new GqlvAction(holder, objectAction, context);
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAction.java
index 39c45ea4ba..447bfe5a23 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAction.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAction.java
@@ -40,6 +40,7 @@ import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
@@ -48,7 +49,7 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvAction
-        extends GqlvMember<ObjectAction, GqlvMember.Holder>
+        extends GqlvMember<ObjectAction, GqlvMemberHolder>
         implements GqlvMemberHidden.Holder<ObjectAction>,
                    GqlvMemberDisabled.Holder<ObjectAction>,
                    GqlvActionInvoke.Holder,
@@ -69,7 +70,7 @@ public class GqlvAction
     private final GqlvActionParams params;
 
     public GqlvAction(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final ObjectAction objectAction,
             final Context context) {
         super(holder, objectAction, TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction, holder.getSchemaType()), context);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAssociation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAssociation.java
index 779d4676a3..ac21c81896 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAssociation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvAssociation.java
@@ -20,8 +20,9 @@ package org.apache.causeway.viewer.graphql.model.domain.simple.query;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 
-public abstract class GqlvAssociation<T extends ObjectAssociation, H extends GqlvMember.Holder>
+public abstract class GqlvAssociation<T extends ObjectAssociation, H extends GqlvMemberHolder>
         extends GqlvMember<T, H> {
 
     public GqlvAssociation(
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvCollection.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvCollection.java
index c4aa89cc80..76e80249fc 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvCollection.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvCollection.java
@@ -23,9 +23,10 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 
 public class GqlvCollection
-        extends GqlvAssociation<OneToManyAssociation, GqlvCollection.Holder>
+        extends GqlvAssociation<OneToManyAssociation, GqlvMemberHolder>
         implements GqlvAssociationGet.Holder<OneToManyAssociation>,
                    GqlvMemberHidden.Holder<OneToManyAssociation>,
                    GqlvMemberDisabled.Holder<OneToManyAssociation>,
@@ -37,7 +38,7 @@ public class GqlvCollection
     private final GqlvCollectionDatatype datatype;
 
     public GqlvCollection(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final OneToManyAssociation otma,
             final Context context
     ) {
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMember.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMember.java
index aa8d3a879b..b585fd1921 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMember.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMember.java
@@ -23,13 +23,12 @@ import graphql.schema.DataFetchingEnvironment;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.Getter;
 
-public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Holder>
+public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMemberHolder>
     extends GqlvAbstractCustom {
 
     @Getter final H holder;
@@ -57,9 +56,4 @@ public abstract class GqlvMember<T extends ObjectMember, H extends GqlvMember.Ho
         return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvProperty.java
index 1da2b62dec..dc605f953a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvProperty.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvProperty.java
@@ -29,12 +29,13 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvProperty
-        extends GqlvAssociation<OneToOneAssociation, GqlvMember.Holder>
+        extends GqlvAssociation<OneToOneAssociation, GqlvMemberHolder>
         implements GqlvMemberHidden.Holder<OneToOneAssociation>,
         GqlvMemberDisabled.Holder<OneToOneAssociation>,
         GqlvPropertyGet.Holder,
@@ -66,7 +67,7 @@ public class GqlvProperty
     private final GqlvPropertyDatatype datatype;
 
     public GqlvProperty(
-            final Holder holder,
+            final GqlvMemberHolder holder,
             final OneToOneAssociation otoa,
             final Context context) {
         super(holder, otoa, TypeNames.propertyTypeNameFor(holder.getObjectSpecification(), otoa, holder.getSchemaType()), context);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java
index e902e30fbe..de780e0942 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvTopLevelQuerySimpleSchema.java
@@ -1,103 +1,73 @@
 package org.apache.causeway.viewer.graphql.model.domain.simple.query;
 
-import java.util.ArrayList;
-import java.util.List;
+import lombok.val;
 
-import graphql.schema.DataFetchingEnvironment;
+import java.util.Map;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
-import org.apache.causeway.viewer.graphql.model.domain.Parent;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
+import org.apache.causeway.viewer.graphql.model.domain.common.SchemaStrategy;
+import org.apache.causeway.viewer.graphql.model.domain.simple.SchemaStrategySimple;
 import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainObject;
 import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvTopLevelQueryAbstractSchema;
 
 public class GqlvTopLevelQuerySimpleSchema
-        extends GqlvAbstractCustom
-        implements Parent {
+        extends GqlvTopLevelQueryAbstractSchema {
 
-    private static final SchemaType SCHEMA_TYPE = SchemaType.SIMPLE;
-
-    private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
-
-    private final List<GqlvDomainService> domainServices = new ArrayList<>();
-    private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
-
-    private final GqlvScenario scenario;
+    private static final SchemaStrategy STRATEGY_SIMPLE = new SchemaStrategySimple();
 
     public GqlvTopLevelQuerySimpleSchema(final Context context) {
-        super("SimpleSchema", context);
-
-        graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
-
-        // add domain object lookup to top-level query
-        context.objectSpecifications().forEach(objectSpec -> {
-            switch (objectSpec.getBeanSort()) {
-
-                case ABSTRACT:
-                case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
-                case ENTITY:     // @DomainObject(nature=ENTITY)
-
-                    domainObjects.add(addChildFieldFor(GqlvDomainObject.of(SCHEMA_TYPE, objectSpec, context)));
-
-                    break;
-            }
-        });
-
-        // add services to top-level query
-        context.objectSpecifications().forEach(objectSpec -> {
-            switch (objectSpec.getBeanSort()) {
-                case MANAGED_BEAN_CONTRIBUTING: // @DomainService
-                    context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
-                            .ifPresent(servicePojo ->
-                                    domainServices.add(
-                                            addChildFieldFor(GqlvDomainService.of(SCHEMA_TYPE, objectSpec, servicePojo, context))));
-                    break;
-            }
-        });
-
-        if (graphqlConfiguration.isIncludeTestingFieldInRich()) {
-            addChildFieldFor(scenario = new GqlvScenario(context));
-        } else {
-            scenario = null;
-        }
+        super(STRATEGY_SIMPLE, context);
+
+        var graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
 
         buildObjectType();
 
-        // the field is used if the configured schemaStyle is 'SIMPLE_AND_RICH'; its is ignored/unused otherwise
+        // the field is used if the schemaStyle is 'SIMPLE_AND_RICH', but is ignored/unused otherwise
         setField(newFieldDefinition()
-                .name(graphqlConfiguration.getTopLevelFieldNameForSimple())
+                .name(STRATEGY_SIMPLE.topLevelFieldNameFrom(graphqlConfiguration))
                 .type(getGqlObjectType())
                 .build());
     }
 
-    @Override
-    protected Object fetchData(DataFetchingEnvironment environment) {
-        return environment;
-    }
+    public static GqlvDomainObject of(
+            final SchemaStrategy schemaStrategy,
+            final ObjectSpecification objectSpecification,
+            final Context context) {
 
-    public void addDataFetchers() {
-        addDataFetchersForChildren();
+        mapSuperclassesIfNecessary(schemaStrategy, objectSpecification, context);
+        return computeIfAbsentGqlvDomainObject(schemaStrategy, objectSpecification, context);
     }
 
-    @Override
-    protected void addDataFetchersForChildren() {
-        domainServices.forEach(domainService -> {
-            boolean actionsAdded = domainService.hasActions();
-            if (actionsAdded) {
-                domainService.addDataFetcher(this);
-            }
-        });
+    private static void mapSuperclassesIfNecessary(
+            final SchemaStrategy schemaStrategy,
+            final ObjectSpecification objectSpecification,
+            final Context context) {
+        // no need to map if the target subclass has already been built
+        if(schemaStrategy.domainObjectBySpec(context).containsKey(objectSpecification)) {
+            return;
+        }
+        val superclasses = superclassesOf(objectSpecification);
+        superclasses.forEach(objectSpec -> computeIfAbsentGqlvDomainObject(schemaStrategy, objectSpec, context));
+    }
 
+    private static GqlvDomainObject computeIfAbsentGqlvDomainObject(
+            final SchemaStrategy schemaStrategy,
+            final ObjectSpecification objectSpec,
+            final Context context) {
+        return schemaStrategy.domainObjectBySpec(context).computeIfAbsent(objectSpec, spec -> new GqlvDomainObject(schemaStrategy, spec, context));
+    }
 
-        domainObjects.forEach(domainObject -> domainObject.addDataFetcher(this));
 
-        if (scenario != null) {
-            scenario.addDataFetcher(this);
-        }
+    public static GqlvDomainService of(
+            final SchemaStrategy schemaStrategy,
+            final ObjectSpecification objectSpecification,
+            final Object servicePojo,
+            final Context context) {
+        return schemaStrategy.domainServiceBySpec(context).computeIfAbsent(objectSpecification, spec -> new GqlvDomainService(schemaStrategy, spec, servicePojo, context));
     }
+
 }
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index 327cbde71d..d8742a001b 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -71,7 +71,7 @@ type Mutation {
   university_dept_Staff__createStaffMember(department: rich__university_dept_Department__gqlv_input!, name: String!): rich__university_dept_StaffMember
 }
 
-type RichSchema {
+type RICHSchema {
   Scenario(name: String): Scenario
   causeway_applib_DomainObjectList(object: rich__causeway_applib_DomainObjectList__gqlv_input): rich__causeway_applib_DomainObjectList
   causeway_applib_FacetGroupNode(object: rich__causeway_applib_FacetGroupNode__gqlv_input): rich__causeway_applib_FacetGroupNode
@@ -122,6 +122,56 @@ type RichSchema {
   university_dept_StaffMember(object: rich__university_dept_StaffMember__gqlv_input): rich__university_dept_StaffMember
 }
 
+type SIMPLESchema {
+  causeway_applib_DomainObjectList(object: simple__causeway_applib_DomainObjectList__gqlv_input): simple__causeway_applib_DomainObjectList
+  causeway_applib_FacetGroupNode(object: simple__causeway_applib_FacetGroupNode__gqlv_input): simple__causeway_applib_FacetGroupNode
+  causeway_applib_ParameterNode(object: simple__causeway_applib_ParameterNode__gqlv_input): simple__causeway_applib_ParameterNode
+  causeway_applib_PropertyNode(object: simple__causeway_applib_PropertyNode__gqlv_input): simple__causeway_applib_PropertyNode
+  causeway_applib_RoleMemento(object: simple__causeway_applib_RoleMemento__gqlv_input): simple__causeway_applib_RoleMemento
+  causeway_applib_TypeNode(object: simple__causeway_applib_TypeNode__gqlv_input): simple__causeway_applib_TypeNode
+  causeway_applib_UserMemento(object: simple__causeway_applib_UserMemento__gqlv_input): simple__causeway_applib_UserMemento
+  causeway_applib_UserMenu: simple__causeway_applib_UserMenu
+  causeway_applib_node_ActionNode(object: simple__causeway_applib_node_ActionNode__gqlv_input): simple__causeway_applib_node_ActionNode
+  causeway_applib_node_CollectionNode(object: simple__causeway_applib_node_CollectionNode__gqlv_input): simple__causeway_applib_node_CollectionNode
+  causeway_applib_node_FacetAttrNode(object: simple__causeway_applib_node_FacetAttrNode__gqlv_input): simple__causeway_applib_node_FacetAttrNode
+  causeway_applib_node_FacetNode(object: simple__causeway_applib_node_FacetNode__gqlv_input): simple__causeway_applib_node_FacetNode
+  causeway_conf_ConfigurationMenu: simple__causeway_conf_ConfigurationMenu
+  causeway_conf_ConfigurationProperty(object: simple__causeway_conf_ConfigurationProperty__gqlv_input): simple__causeway_conf_ConfigurationProperty
+  causeway_conf_ConfigurationViewmodel(object: simple__causeway_conf_ConfigurationViewmodel__gqlv_input): simple__causeway_conf_ConfigurationViewmodel
+  causeway_feat_ApplicationFeatureViewModel(object: simple__causeway_feat_ApplicationFeatureViewModel__gqlv_input): simple__causeway_feat_ApplicationFeatureViewModel
+  causeway_feat_ApplicationNamespace(object: simple__causeway_feat_ApplicationNamespace__gqlv_input): simple__causeway_feat_ApplicationNamespace
+  causeway_feat_ApplicationType(object: simple__causeway_feat_ApplicationType__gqlv_input): simple__causeway_feat_ApplicationType
+  causeway_feat_ApplicationTypeAction(object: simple__causeway_feat_ApplicationTypeAction__gqlv_input): simple__causeway_feat_ApplicationTypeAction
+  causeway_feat_ApplicationTypeCollection(object: simple__causeway_feat_ApplicationTypeCollection__gqlv_input): simple__causeway_feat_ApplicationTypeCollection
+  causeway_feat_ApplicationTypeMember(object: simple__causeway_feat_ApplicationTypeMember__gqlv_input): simple__causeway_feat_ApplicationTypeMember
+  causeway_feat_ApplicationTypeProperty(object: simple__causeway_feat_ApplicationTypeProperty__gqlv_input): simple__causeway_feat_ApplicationTypeProperty
+  causeway_schema_metamodel_v2_DomainClassDto(object: simple__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): simple__causeway_schema_metamodel_v2_DomainClassDto
+  causeway_security_LoginRedirect(object: simple__causeway_security_LoginRedirect__gqlv_input): simple__causeway_security_LoginRedirect
+  causeway_security_LogoutMenu: simple__causeway_security_LogoutMenu
+  causeway_testing_fixtures_FixtureResult(object: simple__causeway_testing_fixtures_FixtureResult__gqlv_input): simple__causeway_testing_fixtures_FixtureResult
+  java_lang_Runnable(object: simple__java_lang_Runnable__gqlv_input): simple__java_lang_Runnable
+  java_util_Map(object: simple__java_util_Map__gqlv_input): simple__java_util_Map
+  java_util_SortedMap(object: simple__java_util_SortedMap__gqlv_input): simple__java_util_SortedMap
+  java_util_concurrent_Callable(object: simple__java_util_concurrent_Callable__gqlv_input): simple__java_util_concurrent_Callable
+  java_util_function_BiFunction(object: simple__java_util_function_BiFunction__gqlv_input): simple__java_util_function_BiFunction
+  java_util_function_Consumer(object: simple__java_util_function_Consumer__gqlv_input): simple__java_util_function_Consumer
+  java_util_function_Function(object: simple__java_util_function_Function__gqlv_input): simple__java_util_function_Function
+  java_util_stream_Stream(object: simple__java_util_stream_Stream__gqlv_input): simple__java_util_stream_Stream
+  org_apache_causeway_core_metamodel_inspect_model_MMNode(object: simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): simple__org_apache_causeway_core_metamodel_inspect_model_MMNode
+  org_apache_causeway_core_metamodel_inspect_model_MemberNode(object: simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode
+  org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript(object: simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input): simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
+  university_admin_AdminMenu: simple__university_admin_AdminMenu
+  university_calc_Calculator: simple__university_calc_Calculator
+  university_dept_Department(object: simple__university_dept_Department__gqlv_input): simple__university_dept_Department
+  university_dept_Departments: simple__university_dept_Departments
+  university_dept_DeptHead(object: simple__university_dept_DeptHead__gqlv_input): simple__university_dept_DeptHead
+  university_dept_DeptHeads: simple__university_dept_DeptHeads
+  university_dept_People: simple__university_dept_People
+  university_dept_Person(object: simple__university_dept_Person__gqlv_input): simple__university_dept_Person
+  university_dept_Staff: simple__university_dept_Staff
+  university_dept_StaffMember(object: simple__university_dept_StaffMember__gqlv_input): simple__university_dept_StaffMember
+}
+
 type Scenario {
   "Given the system under test has this initial state"
   Given: ScenarioStep
@@ -183,59 +233,8 @@ type ScenarioStep {
 }
 
 type SimpleAndRich {
-  rich: RichSchema
-  simple: SimpleSchema
-}
-
-type SimpleSchema {
-  Scenario(name: String): Scenario
-  causeway_applib_DomainObjectList(object: rich__causeway_applib_DomainObjectList__gqlv_input): rich__causeway_applib_DomainObjectList
-  causeway_applib_FacetGroupNode(object: rich__causeway_applib_FacetGroupNode__gqlv_input): rich__causeway_applib_FacetGroupNode
-  causeway_applib_ParameterNode(object: rich__causeway_applib_ParameterNode__gqlv_input): rich__causeway_applib_ParameterNode
-  causeway_applib_PropertyNode(object: rich__causeway_applib_PropertyNode__gqlv_input): rich__causeway_applib_PropertyNode
-  causeway_applib_RoleMemento(object: rich__causeway_applib_RoleMemento__gqlv_input): rich__causeway_applib_RoleMemento
-  causeway_applib_TypeNode(object: rich__causeway_applib_TypeNode__gqlv_input): rich__causeway_applib_TypeNode
-  causeway_applib_UserMemento(object: rich__causeway_applib_UserMemento__gqlv_input): rich__causeway_applib_UserMemento
-  causeway_applib_UserMenu: rich__causeway_applib_UserMenu
-  causeway_applib_node_ActionNode(object: rich__causeway_applib_node_ActionNode__gqlv_input): rich__causeway_applib_node_ActionNode
-  causeway_applib_node_CollectionNode(object: rich__causeway_applib_node_CollectionNode__gqlv_input): rich__causeway_applib_node_CollectionNode
-  causeway_applib_node_FacetAttrNode(object: rich__causeway_applib_node_FacetAttrNode__gqlv_input): rich__causeway_applib_node_FacetAttrNode
-  causeway_applib_node_FacetNode(object: rich__causeway_applib_node_FacetNode__gqlv_input): rich__causeway_applib_node_FacetNode
-  causeway_conf_ConfigurationMenu: rich__causeway_conf_ConfigurationMenu
-  causeway_conf_ConfigurationProperty(object: rich__causeway_conf_ConfigurationProperty__gqlv_input): rich__causeway_conf_ConfigurationProperty
-  causeway_conf_ConfigurationViewmodel(object: rich__causeway_conf_ConfigurationViewmodel__gqlv_input): rich__causeway_conf_ConfigurationViewmodel
-  causeway_feat_ApplicationFeatureViewModel(object: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): rich__causeway_feat_ApplicationFeatureViewModel
-  causeway_feat_ApplicationNamespace(object: rich__causeway_feat_ApplicationNamespace__gqlv_input): rich__causeway_feat_ApplicationNamespace
-  causeway_feat_ApplicationType(object: rich__causeway_feat_ApplicationType__gqlv_input): rich__causeway_feat_ApplicationType
-  causeway_feat_ApplicationTypeAction(object: rich__causeway_feat_ApplicationTypeAction__gqlv_input): rich__causeway_feat_ApplicationTypeAction
-  causeway_feat_ApplicationTypeCollection(object: rich__causeway_feat_ApplicationTypeCollection__gqlv_input): rich__causeway_feat_ApplicationTypeCollection
-  causeway_feat_ApplicationTypeMember(object: rich__causeway_feat_ApplicationTypeMember__gqlv_input): rich__causeway_feat_ApplicationTypeMember
-  causeway_feat_ApplicationTypeProperty(object: rich__causeway_feat_ApplicationTypeProperty__gqlv_input): rich__causeway_feat_ApplicationTypeProperty
-  causeway_schema_metamodel_v2_DomainClassDto(object: rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): rich__causeway_schema_metamodel_v2_DomainClassDto
-  causeway_security_LoginRedirect(object: rich__causeway_security_LoginRedirect__gqlv_input): rich__causeway_security_LoginRedirect
-  causeway_security_LogoutMenu: rich__causeway_security_LogoutMenu
-  causeway_testing_fixtures_FixtureResult(object: rich__causeway_testing_fixtures_FixtureResult__gqlv_input): rich__causeway_testing_fixtures_FixtureResult
-  java_lang_Runnable(object: rich__java_lang_Runnable__gqlv_input): rich__java_lang_Runnable
-  java_util_Map(object: rich__java_util_Map__gqlv_input): rich__java_util_Map
-  java_util_SortedMap(object: rich__java_util_SortedMap__gqlv_input): rich__java_util_SortedMap
-  java_util_concurrent_Callable(object: rich__java_util_concurrent_Callable__gqlv_input): rich__java_util_concurrent_Callable
-  java_util_function_BiFunction(object: rich__java_util_function_BiFunction__gqlv_input): rich__java_util_function_BiFunction
-  java_util_function_Consumer(object: rich__java_util_function_Consumer__gqlv_input): rich__java_util_function_Consumer
-  java_util_function_Function(object: rich__java_util_function_Function__gqlv_input): rich__java_util_function_Function
-  java_util_stream_Stream(object: rich__java_util_stream_Stream__gqlv_input): rich__java_util_stream_Stream
-  org_apache_causeway_core_metamodel_inspect_model_MMNode(object: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): rich__org_apache_causeway_core_metamodel_inspect_model_MMNode
-  org_apache_causeway_core_metamodel_inspect_model_MemberNode(object: rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode
-  org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript(object: rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input): rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
-  university_admin_AdminMenu: rich__university_admin_AdminMenu
-  university_calc_Calculator: rich__university_calc_Calculator
-  university_dept_Department(object: rich__university_dept_Department__gqlv_input): rich__university_dept_Department
-  university_dept_Departments: rich__university_dept_Departments
-  university_dept_DeptHead(object: rich__university_dept_DeptHead__gqlv_input): rich__university_dept_DeptHead
-  university_dept_DeptHeads: rich__university_dept_DeptHeads
-  university_dept_People: rich__university_dept_People
-  university_dept_Person(object: rich__university_dept_Person__gqlv_input): rich__university_dept_Person
-  university_dept_Staff: rich__university_dept_Staff
-  university_dept_StaffMember(object: rich__university_dept_StaffMember__gqlv_input): rich__university_dept_StaffMember
+  rich: RICHSchema
+  simple: SIMPLESchema
 }
 
 type rich__causeway_applib_DomainObjectList {
@@ -4082,159 +4081,4120 @@ type rich__university_dept_Staff__findStaffMemberByName__name__gqlv_action_param
   validity: String
 }
 
-enum rich__causeway_applib_annotation_SemanticsOf__gqlv_enum {
-  IDEMPOTENT
-  IDEMPOTENT_ARE_YOU_SURE
-  NON_IDEMPOTENT
-  NON_IDEMPOTENT_ARE_YOU_SURE
-  NOT_SPECIFIED
-  SAFE
-  SAFE_AND_REQUEST_CACHEABLE
+type simple__causeway_applib_DomainObjectList {
+  "Object metadata"
+  _meta: simple__causeway_applib_DomainObjectList__gqlv_meta
+  "Action Arguments"
+  actionArguments: simple__causeway_applib_DomainObjectList__actionArguments__gqlv_property
+  "Action Id"
+  actionId: simple__causeway_applib_DomainObjectList__actionId__gqlv_property
+  "Action Owning Fqcn"
+  actionOwningFqcn: simple__causeway_applib_DomainObjectList__actionOwningFqcn__gqlv_property
+  "Element Type Fqcn"
+  elementTypeFqcn: simple__causeway_applib_DomainObjectList__elementTypeFqcn__gqlv_property
+  "Objects"
+  objects: simple__causeway_applib_DomainObjectList__objects__gqlv_collection
+  "Title"
+  title: simple__causeway_applib_DomainObjectList__title__gqlv_property
 }
 
-enum rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum {
-  DEFAULT
-  EXTERNAL
+type simple__causeway_applib_DomainObjectList__actionArguments__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(actionArguments: String): rich__causeway_applib_DomainObjectList
+  validate(actionArguments: String): String
 }
 
-enum rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum {
-  APRIL
-  AUGUST
-  DECEMBER
-  FEBRUARY
-  JANUARY
-  JULY
-  JUNE
-  MARCH
-  MAY
-  NOVEMBER
-  OCTOBER
-  SEPTEMBER
+type simple__causeway_applib_DomainObjectList__actionId__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(actionId: String): rich__causeway_applib_DomainObjectList
+  validate(actionId: String): String
 }
 
-enum rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum {
-  LECTURER
-  PROFESSOR
-  READER
-  RESEARCH_ASSISTANT
-  SENIOR_LECTURER
+type simple__causeway_applib_DomainObjectList__actionOwningFqcn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(actionOwningFqcn: String): rich__causeway_applib_DomainObjectList
+  validate(actionOwningFqcn: String): String
 }
 
-"An 8-bit signed integer"
-scalar Byte
-
-"An RFC-3339 compliant DateTime Scalar"
-scalar DateTime
-
-"A 16-bit signed integer"
-scalar Short
-
-"An RFC-3339 compliant Full Time Scalar"
-scalar Time
-
-"A universally unique identifier compliant UUID Scalar"
-scalar UUID
-
-input rich__causeway_applib_DomainObjectList__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_DomainObjectList__elementTypeFqcn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(elementTypeFqcn: String!): rich__causeway_applib_DomainObjectList
+  validate(elementTypeFqcn: String): String
 }
 
-input rich__causeway_applib_FacetGroupNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_DomainObjectList__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
 }
 
-input rich__causeway_applib_ParameterNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_DomainObjectList__objects__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
 }
 
-input rich__causeway_applib_PropertyNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_DomainObjectList__title__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(title: String!): rich__causeway_applib_DomainObjectList
+  validate(title: String): String
 }
 
-input rich__causeway_applib_RoleMemento__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_FacetGroupNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_FacetGroupNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_FacetGroupNode__childNodes__gqlv_collection
+  "Facets"
+  facets: simple__causeway_applib_FacetGroupNode__facets__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_FacetGroupNode__parentNode__gqlv_property
 }
 
-input rich__causeway_applib_TypeNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_FacetGroupNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
 }
 
-input rich__causeway_applib_UserMemento__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_FacetGroupNode__facets__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(facets: String!): rich__causeway_applib_FacetGroupNode
+  validate(facets: String): String
 }
 
-input rich__causeway_applib_node_ActionNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_FacetGroupNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
 }
 
-input rich__causeway_applib_node_CollectionNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_FacetGroupNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): rich__causeway_applib_FacetGroupNode
+  validate(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
 }
 
-input rich__causeway_applib_node_FacetAttrNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_ParameterNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_ParameterNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_ParameterNode__childNodes__gqlv_collection
+  "Parameter"
+  parameter: simple__causeway_applib_ParameterNode__parameter__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_ParameterNode__parentNode__gqlv_property
 }
 
-input rich__causeway_applib_node_FacetNode__gqlv_input {
-  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
-  id: ID
-  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
-  logicalTypeName: String
-  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
-  ref: String
+type simple__causeway_applib_ParameterNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
 }
 
-input rich__causeway_conf_ConfigurationProperty__gqlv_input {
+type simple__causeway_applib_ParameterNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_ParameterNode__parameter__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(parameter: String!): rich__causeway_applib_ParameterNode
+  validate(parameter: String): String
+}
+
+type simple__causeway_applib_ParameterNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_node_ActionNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_node_ActionNode__gqlv_input!): rich__causeway_applib_ParameterNode
+  validate(parentNode: rich__causeway_applib_node_ActionNode__gqlv_input): String
+}
+
+type simple__causeway_applib_PropertyNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_PropertyNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_PropertyNode__childNodes__gqlv_collection
+  "Mixed In"
+  mixedIn: simple__causeway_applib_PropertyNode__mixedIn__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_PropertyNode__parentNode__gqlv_property
+  "Property"
+  property: simple__causeway_applib_PropertyNode__property__gqlv_property
+}
+
+type simple__causeway_applib_PropertyNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_PropertyNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_PropertyNode__mixedIn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(mixedIn: Boolean!): rich__causeway_applib_PropertyNode
+  validate(mixedIn: Boolean): String
+}
+
+type simple__causeway_applib_PropertyNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_TypeNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_TypeNode__gqlv_input!): rich__causeway_applib_PropertyNode
+  validate(parentNode: rich__causeway_applib_TypeNode__gqlv_input): String
+}
+
+type simple__causeway_applib_PropertyNode__property__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(property: String!): rich__causeway_applib_PropertyNode
+  validate(property: String): String
+}
+
+type simple__causeway_applib_RoleMemento {
+  "Object metadata"
+  _meta: simple__causeway_applib_RoleMemento__gqlv_meta
+  "Description"
+  description: simple__causeway_applib_RoleMemento__description__gqlv_property
+  "Name"
+  name: simple__causeway_applib_RoleMemento__name__gqlv_property
+}
+
+type simple__causeway_applib_RoleMemento__description__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(description: String!): rich__causeway_applib_RoleMemento
+  validate(description: String): String
+}
+
+type simple__causeway_applib_RoleMemento__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_RoleMemento__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(name: String!): rich__causeway_applib_RoleMemento
+  validate(name: String): String
+}
+
+type simple__causeway_applib_TypeNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_TypeNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_TypeNode__childNodes__gqlv_collection
+  "Domain Class Dto"
+  domainClassDto: simple__causeway_applib_TypeNode__domainClassDto__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_TypeNode__parentNode__gqlv_property
+}
+
+type simple__causeway_applib_TypeNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_TypeNode__domainClassDto__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_schema_metamodel_v2_DomainClassDto!
+  hidden: Boolean
+  set(domainClassDto: rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input!): rich__causeway_applib_TypeNode
+  validate(domainClassDto: rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): String
+}
+
+type simple__causeway_applib_TypeNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_TypeNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): rich__causeway_applib_TypeNode
+  validate(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
+}
+
+type simple__causeway_applib_UserMemento {
+  "Object metadata"
+  _meta: simple__causeway_applib_UserMemento__gqlv_meta
+  "Authentication Code"
+  authenticationCode: simple__causeway_applib_UserMemento__authenticationCode__gqlv_property
+  "Authentication Source"
+  authenticationSource: simple__causeway_applib_UserMemento__authenticationSource__gqlv_property
+  "Avatar Url"
+  avatarUrl: simple__causeway_applib_UserMemento__avatarUrl__gqlv_property
+  "Impersonating"
+  impersonating: simple__causeway_applib_UserMemento__impersonating__gqlv_property
+  "Language Locale"
+  languageLocale: simple__causeway_applib_UserMemento__languageLocale__gqlv_property
+  "Multi Tenancy Token"
+  multiTenancyToken: simple__causeway_applib_UserMemento__multiTenancyToken__gqlv_property
+  "Name"
+  name: simple__causeway_applib_UserMemento__name__gqlv_property
+  "Number Format Locale"
+  numberFormatLocale: simple__causeway_applib_UserMemento__numberFormatLocale__gqlv_property
+  "Real Name"
+  realName: simple__causeway_applib_UserMemento__realName__gqlv_property
+  "Roles"
+  roles: simple__causeway_applib_UserMemento__roles__gqlv_collection
+  "Time Format Locale"
+  timeFormatLocale: simple__causeway_applib_UserMemento__timeFormatLocale__gqlv_property
+}
+
+type simple__causeway_applib_UserMemento__authenticationCode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(authenticationCode: String!): rich__causeway_applib_UserMemento
+  validate(authenticationCode: String): String
+}
+
+type simple__causeway_applib_UserMemento__authenticationSource__gqlv_property {
+  choices(authenticationSource: rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum): [rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum]
+  datatype: String
+  disabled: String
+  get: rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum!
+  hidden: Boolean
+  set(authenticationSource: rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum!): rich__causeway_applib_UserMemento
+  validate(authenticationSource: rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum): String
+}
+
+type simple__causeway_applib_UserMemento__avatarUrl__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(avatarUrl: String): rich__causeway_applib_UserMemento
+  validate(avatarUrl: String): String
+}
+
+type simple__causeway_applib_UserMemento__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_UserMemento__impersonating__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(impersonating: Boolean!): rich__causeway_applib_UserMemento
+  validate(impersonating: Boolean): String
+}
+
+type simple__causeway_applib_UserMemento__languageLocale__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(languageLocale: String): rich__causeway_applib_UserMemento
+  validate(languageLocale: String): String
+}
+
+type simple__causeway_applib_UserMemento__multiTenancyToken__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(multiTenancyToken: String): rich__causeway_applib_UserMemento
+  validate(multiTenancyToken: String): String
+}
+
+type simple__causeway_applib_UserMemento__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(name: String!): rich__causeway_applib_UserMemento
+  validate(name: String): String
+}
+
+type simple__causeway_applib_UserMemento__numberFormatLocale__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(numberFormatLocale: String): rich__causeway_applib_UserMemento
+  validate(numberFormatLocale: String): String
+}
+
+type simple__causeway_applib_UserMemento__realName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(realName: String): rich__causeway_applib_UserMemento
+  validate(realName: String): String
+}
+
+type simple__causeway_applib_UserMemento__roles__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_applib_RoleMemento]
+  hidden: Boolean
+}
+
+type simple__causeway_applib_UserMemento__timeFormatLocale__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(timeFormatLocale: String): rich__causeway_applib_UserMemento
+  validate(timeFormatLocale: String): String
+}
+
+type simple__causeway_applib_UserMenu {
+  "Returns your user account details"
+  me: simple__causeway_applib_UserMenu__me__gqlv_action
+}
+
+"Returns your user account details"
+type simple__causeway_applib_UserMenu__me__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__causeway_applib_UserMenu__me__gqlv_action_invoke
+  validate: String
+}
+
+type simple__causeway_applib_UserMenu__me__gqlv_action_invoke {
+  results: simple__causeway_applib_UserMemento
+}
+
+type simple__causeway_applib_node_ActionNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_node_ActionNode__gqlv_meta
+  "Action"
+  action: simple__causeway_applib_node_ActionNode__action__gqlv_property
+  "Child Nodes"
+  childNodes: simple__causeway_applib_node_ActionNode__childNodes__gqlv_collection
+  "Mixed In"
+  mixedIn: simple__causeway_applib_node_ActionNode__mixedIn__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_node_ActionNode__parentNode__gqlv_property
+}
+
+type simple__causeway_applib_node_ActionNode__action__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(action: String!): rich__causeway_applib_node_ActionNode
+  validate(action: String): String
+}
+
+type simple__causeway_applib_node_ActionNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_node_ActionNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_node_ActionNode__mixedIn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(mixedIn: Boolean!): rich__causeway_applib_node_ActionNode
+  validate(mixedIn: Boolean): String
+}
+
+type simple__causeway_applib_node_ActionNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_TypeNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_TypeNode__gqlv_input!): rich__causeway_applib_node_ActionNode
+  validate(parentNode: rich__causeway_applib_TypeNode__gqlv_input): String
+}
+
+type simple__causeway_applib_node_CollectionNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_node_CollectionNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_node_CollectionNode__childNodes__gqlv_collection
+  "Collection"
+  collection: simple__causeway_applib_node_CollectionNode__collection__gqlv_property
+  "Mixed In"
+  mixedIn: simple__causeway_applib_node_CollectionNode__mixedIn__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_node_CollectionNode__parentNode__gqlv_property
+}
+
+type simple__causeway_applib_node_CollectionNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_node_CollectionNode__collection__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(collection: String!): rich__causeway_applib_node_CollectionNode
+  validate(collection: String): String
+}
+
+type simple__causeway_applib_node_CollectionNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_node_CollectionNode__mixedIn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(mixedIn: Boolean!): rich__causeway_applib_node_CollectionNode
+  validate(mixedIn: Boolean): String
+}
+
+type simple__causeway_applib_node_CollectionNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_TypeNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_TypeNode__gqlv_input!): rich__causeway_applib_node_CollectionNode
+  validate(parentNode: rich__causeway_applib_TypeNode__gqlv_input): String
+}
+
+type simple__causeway_applib_node_FacetAttrNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_node_FacetAttrNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_node_FacetAttrNode__childNodes__gqlv_collection
+  "Facet Attr"
+  facetAttr: simple__causeway_applib_node_FacetAttrNode__facetAttr__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_node_FacetAttrNode__parentNode__gqlv_property
+}
+
+type simple__causeway_applib_node_FacetAttrNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_node_FacetAttrNode__facetAttr__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(facetAttr: String!): rich__causeway_applib_node_FacetAttrNode
+  validate(facetAttr: String): String
+}
+
+type simple__causeway_applib_node_FacetAttrNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_node_FacetAttrNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_node_FacetNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_node_FacetNode__gqlv_input!): rich__causeway_applib_node_FacetAttrNode
+  validate(parentNode: rich__causeway_applib_node_FacetNode__gqlv_input): String
+}
+
+type simple__causeway_applib_node_FacetNode {
+  "Object metadata"
+  _meta: simple__causeway_applib_node_FacetNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__causeway_applib_node_FacetNode__childNodes__gqlv_collection
+  "Facet"
+  facet: simple__causeway_applib_node_FacetNode__facet__gqlv_property
+  "Parent Node"
+  parentNode: simple__causeway_applib_node_FacetNode__parentNode__gqlv_property
+  "Shadowed"
+  shadowed: simple__causeway_applib_node_FacetNode__shadowed__gqlv_property
+}
+
+type simple__causeway_applib_node_FacetNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_applib_node_FacetNode__facet__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(facet: String!): rich__causeway_applib_node_FacetNode
+  validate(facet: String): String
+}
+
+type simple__causeway_applib_node_FacetNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_applib_node_FacetNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): rich__causeway_applib_node_FacetNode
+  validate(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
+}
+
+type simple__causeway_applib_node_FacetNode__shadowed__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(shadowed: Boolean!): rich__causeway_applib_node_FacetNode
+  validate(shadowed: Boolean): String
+}
+
+type simple__causeway_conf_ConfigurationMenu {
+  "Configuration"
+  configuration: simple__causeway_conf_ConfigurationMenu__configuration__gqlv_action
+}
+
+type simple__causeway_conf_ConfigurationMenu__configuration__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__causeway_conf_ConfigurationMenu__configuration__gqlv_action_invoke
+  validate: String
+}
+
+type simple__causeway_conf_ConfigurationMenu__configuration__gqlv_action_invoke {
+  results: simple__causeway_conf_ConfigurationViewmodel
+}
+
+type simple__causeway_conf_ConfigurationProperty {
+  "Object metadata"
+  _meta: simple__causeway_conf_ConfigurationProperty__gqlv_meta
+  "Key"
+  key: simple__causeway_conf_ConfigurationProperty__key__gqlv_property
+  "Value"
+  value: simple__causeway_conf_ConfigurationProperty__value__gqlv_property
+}
+
+type simple__causeway_conf_ConfigurationProperty__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_conf_ConfigurationProperty__key__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(key: String!): rich__causeway_conf_ConfigurationProperty
+  validate(key: String): String
+}
+
+type simple__causeway_conf_ConfigurationProperty__value__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(value: String!): rich__causeway_conf_ConfigurationProperty
+  validate(value: String): String
+}
+
+type simple__causeway_conf_ConfigurationViewmodel {
+  "Object metadata"
+  _meta: simple__causeway_conf_ConfigurationViewmodel__gqlv_meta
+  "Environment"
+  environment: simple__causeway_conf_ConfigurationViewmodel__environment__gqlv_collection
+  "Primary"
+  primary: simple__causeway_conf_ConfigurationViewmodel__primary__gqlv_collection
+  "Secondary"
+  secondary: simple__causeway_conf_ConfigurationViewmodel__secondary__gqlv_collection
+}
+
+type simple__causeway_conf_ConfigurationViewmodel__environment__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_conf_ConfigurationProperty]
+  hidden: Boolean
+}
+
+type simple__causeway_conf_ConfigurationViewmodel__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_conf_ConfigurationViewmodel__primary__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_conf_ConfigurationProperty]
+  hidden: Boolean
+}
+
+type simple__causeway_conf_ConfigurationViewmodel__secondary__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_conf_ConfigurationProperty]
+  hidden: Boolean
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationFeatureViewModel__gqlv_meta
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationFeatureViewModel__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationFeatureViewModel__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationFeatureViewModel__parent__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationFeatureViewModel__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationFeatureViewModel
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationFeatureViewModel
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationFeatureViewModel
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationFeatureViewModel__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationFeatureViewModel
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationNamespace {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationNamespace__gqlv_meta
+  "Contents"
+  contents: simple__causeway_feat_ApplicationNamespace__contents__gqlv_collection
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationNamespace__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationNamespace__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationNamespace__parent__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationNamespace__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationNamespace__contents__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__causeway_feat_ApplicationNamespace__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationNamespace__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationNamespace
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationNamespace__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationNamespace
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationNamespace__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationNamespace
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationNamespace__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationNamespace
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationType {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationType__gqlv_meta
+  "Actions"
+  actions: simple__causeway_feat_ApplicationType__actions__gqlv_collection
+  "Collections"
+  collections: simple__causeway_feat_ApplicationType__collections__gqlv_collection
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationType__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationType__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationType__parent__gqlv_property
+  "Properties"
+  properties: simple__causeway_feat_ApplicationType__properties__gqlv_collection
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationType__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationTypeAction {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationTypeAction__gqlv_meta
+  "Action Semantics"
+  actionSemantics: simple__causeway_feat_ApplicationTypeAction__actionSemantics__gqlv_property
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationTypeAction__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationTypeAction__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationTypeAction__parent__gqlv_property
+  "Return Type"
+  returnType: simple__causeway_feat_ApplicationTypeAction__returnType__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationTypeAction__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationTypeAction__actionSemantics__gqlv_property {
+  choices(actionSemantics: rich__causeway_applib_annotation_SemanticsOf__gqlv_enum): [rich__causeway_applib_annotation_SemanticsOf__gqlv_enum]
+  datatype: String
+  disabled: String
+  get: rich__causeway_applib_annotation_SemanticsOf__gqlv_enum!
+  hidden: Boolean
+  set(actionSemantics: rich__causeway_applib_annotation_SemanticsOf__gqlv_enum!): rich__causeway_feat_ApplicationTypeAction
+  validate(actionSemantics: rich__causeway_applib_annotation_SemanticsOf__gqlv_enum): String
+}
+
+type simple__causeway_feat_ApplicationTypeAction__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationTypeAction__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationTypeAction
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeAction__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationTypeAction
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeAction__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationTypeAction
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationTypeAction__returnType__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(returnType: String!): rich__causeway_feat_ApplicationTypeAction
+  validate(returnType: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeAction__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationTypeAction
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationTypeCollection__gqlv_meta
+  "Derived"
+  derived: simple__causeway_feat_ApplicationTypeCollection__derived__gqlv_property
+  "Element Type"
+  elementType: simple__causeway_feat_ApplicationTypeCollection__elementType__gqlv_property
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationTypeCollection__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationTypeCollection__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationTypeCollection__parent__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationTypeCollection__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__derived__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(derived: Boolean!): rich__causeway_feat_ApplicationTypeCollection
+  validate(derived: Boolean): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__elementType__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(elementType: String!): rich__causeway_feat_ApplicationTypeCollection
+  validate(elementType: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationTypeCollection
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationTypeCollection
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationTypeCollection
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationTypeCollection__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationTypeCollection
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeMember {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationTypeMember__gqlv_meta
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationTypeMember__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationTypeMember__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationTypeMember__parent__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationTypeMember__typeSimpleName__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationTypeMember__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationTypeMember__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationTypeMember
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeMember__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationTypeMember
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeMember__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationTypeMember
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationTypeMember__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationTypeMember
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty {
+  "Object metadata"
+  _meta: simple__causeway_feat_ApplicationTypeProperty__gqlv_meta
+  "Derived"
+  derived: simple__causeway_feat_ApplicationTypeProperty__derived__gqlv_property
+  "Max Length"
+  maxLength: simple__causeway_feat_ApplicationTypeProperty__maxLength__gqlv_property
+  "Member Name"
+  memberName: simple__causeway_feat_ApplicationTypeProperty__memberName__gqlv_property
+  "Namespace Name"
+  namespaceName: simple__causeway_feat_ApplicationTypeProperty__namespaceName__gqlv_property
+  "Parent"
+  parent: simple__causeway_feat_ApplicationTypeProperty__parent__gqlv_property
+  "Return Type"
+  returnType: simple__causeway_feat_ApplicationTypeProperty__returnType__gqlv_property
+  "Type Simple Name"
+  typeSimpleName: simple__causeway_feat_ApplicationTypeProperty__typeSimpleName__gqlv_property
+  "Typical Length"
+  typicalLength: simple__causeway_feat_ApplicationTypeProperty__typicalLength__gqlv_property
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__derived__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(derived: Boolean!): rich__causeway_feat_ApplicationTypeProperty
+  validate(derived: Boolean): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__maxLength__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Int
+  hidden: Boolean
+  set(maxLength: Int): rich__causeway_feat_ApplicationTypeProperty
+  validate(maxLength: Int): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationTypeProperty
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationTypeProperty
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationTypeProperty
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__returnType__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(returnType: String!): rich__causeway_feat_ApplicationTypeProperty
+  validate(returnType: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationTypeProperty
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_feat_ApplicationTypeProperty__typicalLength__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Int
+  hidden: Boolean
+  set(typicalLength: Int): rich__causeway_feat_ApplicationTypeProperty
+  validate(typicalLength: Int): String
+}
+
+type simple__causeway_feat_ApplicationType__actions__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_feat_ApplicationTypeAction]
+  hidden: Boolean
+}
+
+type simple__causeway_feat_ApplicationType__collections__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_feat_ApplicationTypeCollection]
+  hidden: Boolean
+}
+
+type simple__causeway_feat_ApplicationType__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_feat_ApplicationType__memberName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(memberName: String!): rich__causeway_feat_ApplicationType
+  validate(memberName: String): String
+}
+
+type simple__causeway_feat_ApplicationType__namespaceName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(namespaceName: String!): rich__causeway_feat_ApplicationType
+  validate(namespaceName: String): String
+}
+
+type simple__causeway_feat_ApplicationType__parent__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input!): rich__causeway_feat_ApplicationType
+  validate(parent: rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
+}
+
+type simple__causeway_feat_ApplicationType__properties__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__causeway_feat_ApplicationTypeProperty]
+  hidden: Boolean
+}
+
+type simple__causeway_feat_ApplicationType__typeSimpleName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(typeSimpleName: String!): rich__causeway_feat_ApplicationType
+  validate(typeSimpleName: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto {
+  "Object metadata"
+  _meta: simple__causeway_schema_metamodel_v2_DomainClassDto__gqlv_meta
+  "Actions"
+  actions: simple__causeway_schema_metamodel_v2_DomainClassDto__actions__gqlv_property
+  "Annotations"
+  annotations: simple__causeway_schema_metamodel_v2_DomainClassDto__annotations__gqlv_property
+  "Collections"
+  collections: simple__causeway_schema_metamodel_v2_DomainClassDto__collections__gqlv_property
+  "Facets"
+  facets: simple__causeway_schema_metamodel_v2_DomainClassDto__facets__gqlv_property
+  "Id"
+  id: simple__causeway_schema_metamodel_v2_DomainClassDto__id__gqlv_property
+  "Major Version"
+  majorVersion: simple__causeway_schema_metamodel_v2_DomainClassDto__majorVersion__gqlv_property
+  "Minor Version"
+  minorVersion: simple__causeway_schema_metamodel_v2_DomainClassDto__minorVersion__gqlv_property
+  "Properties"
+  properties: simple__causeway_schema_metamodel_v2_DomainClassDto__properties__gqlv_property
+  "Service"
+  service: simple__causeway_schema_metamodel_v2_DomainClassDto__service__gqlv_property
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__actions__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(actions: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(actions: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__annotations__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(annotations: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(annotations: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__collections__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(collections: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(collections: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__facets__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(facets: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(facets: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__id__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(id: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(id: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__majorVersion__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(majorVersion: String): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(majorVersion: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__minorVersion__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(minorVersion: String): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(minorVersion: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__properties__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(properties: String!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(properties: String): String
+}
+
+type simple__causeway_schema_metamodel_v2_DomainClassDto__service__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(service: Boolean!): rich__causeway_schema_metamodel_v2_DomainClassDto
+  validate(service: Boolean): String
+}
+
+type simple__causeway_schema_metamodel_v2_FacetHolder {
+  "Object metadata"
+  _meta: simple__causeway_schema_metamodel_v2_FacetHolder__gqlv_meta
+}
+
+type simple__causeway_schema_metamodel_v2_FacetHolder__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_security_LoginRedirect {
+  "Object metadata"
+  _meta: simple__causeway_security_LoginRedirect__gqlv_meta
+}
+
+type simple__causeway_security_LoginRedirect__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_security_LogoutMenu {
+  "Logout"
+  logout: simple__causeway_security_LogoutMenu__logout__gqlv_action
+}
+
+type simple__causeway_security_LogoutMenu__logout__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__causeway_security_LogoutMenu__logout__gqlv_action_invoke
+  validate: String
+}
+
+type simple__causeway_security_LogoutMenu__logout__gqlv_action_invoke {
+  results: String
+}
+
+type simple__causeway_testing_fixtures_FixtureResult {
+  "Object metadata"
+  _meta: simple__causeway_testing_fixtures_FixtureResult__gqlv_meta
+  "Result class"
+  className: simple__causeway_testing_fixtures_FixtureResult__className__gqlv_property
+  "Fixture script"
+  fixtureScriptClassName: simple__causeway_testing_fixtures_FixtureResult__fixtureScriptClassName__gqlv_property
+  "Key"
+  key: simple__causeway_testing_fixtures_FixtureResult__key__gqlv_property
+  "Result"
+  object: simple__causeway_testing_fixtures_FixtureResult__object__gqlv_property
+}
+
+type simple__causeway_testing_fixtures_FixtureResult__className__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(className: String!): rich__causeway_testing_fixtures_FixtureResult
+  validate(className: String): String
+}
+
+type simple__causeway_testing_fixtures_FixtureResult__fixtureScriptClassName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(fixtureScriptClassName: String): rich__causeway_testing_fixtures_FixtureResult
+  validate(fixtureScriptClassName: String): String
+}
+
+type simple__causeway_testing_fixtures_FixtureResult__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__causeway_testing_fixtures_FixtureResult__key__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(key: String!): rich__causeway_testing_fixtures_FixtureResult
+  validate(key: String): String
+}
+
+type simple__causeway_testing_fixtures_FixtureResult__object__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(object: String!): rich__causeway_testing_fixtures_FixtureResult
+  validate(object: String): String
+}
+
+type simple__java_lang_Runnable {
+  "Object metadata"
+  _meta: simple__java_lang_Runnable__gqlv_meta
+}
+
+type simple__java_lang_Runnable__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_Map {
+  "Object metadata"
+  _meta: simple__java_util_Map__gqlv_meta
+}
+
+type simple__java_util_Map__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_SortedMap {
+  "Object metadata"
+  _meta: simple__java_util_SortedMap__gqlv_meta
+}
+
+type simple__java_util_SortedMap__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_concurrent_Callable {
+  "Object metadata"
+  _meta: simple__java_util_concurrent_Callable__gqlv_meta
+}
+
+type simple__java_util_concurrent_Callable__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_function_BiFunction {
+  "Object metadata"
+  _meta: simple__java_util_function_BiFunction__gqlv_meta
+}
+
+type simple__java_util_function_BiFunction__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_function_Consumer {
+  "Object metadata"
+  _meta: simple__java_util_function_Consumer__gqlv_meta
+}
+
+type simple__java_util_function_Consumer__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_function_Function {
+  "Object metadata"
+  _meta: simple__java_util_function_Function__gqlv_meta
+}
+
+type simple__java_util_function_Function__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__java_util_stream_Stream {
+  "Object metadata"
+  _meta: simple__java_util_stream_Stream__gqlv_meta
+}
+
+type simple__java_util_stream_Stream__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MMNode {
+  "Object metadata"
+  _meta: simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection
+  "Parent Node"
+  parentNode: simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+  set(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): rich__org_apache_causeway_core_metamodel_inspect_model_MMNode
+  validate(parentNode: rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode {
+  "Object metadata"
+  _meta: simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta
+  "Child Nodes"
+  childNodes: simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection
+  "Mixed In"
+  mixedIn: simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property
+  "Parent Node"
+  parentNode: simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection {
+  datatype: String
+  disabled: String
+  hidden: Boolean
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property {
+  datatype: String
+  disabled: String
+  get: Boolean!
+  hidden: Boolean
+  set(mixedIn: Boolean!): rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode
+  validate(mixedIn: Boolean): String
+}
+
+type simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__causeway_applib_TypeNode!
+  hidden: Boolean
+  set(parentNode: rich__causeway_applib_TypeNode__gqlv_input!): rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode
+  validate(parentNode: rich__causeway_applib_TypeNode__gqlv_input): String
+}
+
+type simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript {
+  "Object metadata"
+  _meta: simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta
+  "Friendly Name"
+  friendlyName: simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property
+  "Qualified Name"
+  qualifiedName: simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property
+}
+
+type simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(friendlyName: String!): rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
+  validate(friendlyName: String): String
+}
+
+type simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(qualifiedName: String!): rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
+  validate(qualifiedName: String): String
+}
+
+type simple__university_admin_AdminMenu {
+  "Action With Disabled Param"
+  actionWithDisabledParam: simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action
+  "Action With Hidden Param"
+  actionWithHiddenParam: simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action
+  "Admin Action"
+  adminAction: simple__university_admin_AdminMenu__adminAction__gqlv_action
+  "Other Admin Action"
+  otherAdminAction: simple__university_admin_AdminMenu__otherAdminAction__gqlv_action
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_action_parameter {
+  datatype: String
+  disabled(firstParam: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent(firstParam: String!, secondParam: String!, thirdParameter: String!): simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_params
+  validate(firstParam: String, secondParam: String, thirdParameter: String): String
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_args {
+  firstParam: String
+  secondParam: String
+  thirdParameter: String
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_args
+  results: String
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_params {
+  "First Param"
+  firstParam: simple__university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_action_parameter
+  "Second Param"
+  secondParam: simple__university_admin_AdminMenu__actionWithDisabledParam__secondParam__gqlv_action_parameter
+  "Third Parameter"
+  thirdParameter: simple__university_admin_AdminMenu__actionWithDisabledParam__thirdParameter__gqlv_action_parameter
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__secondParam__gqlv_action_parameter {
+  datatype: String
+  disabled(firstParam: String, secondParam: String): String
+  hidden(firstParam: String): Boolean
+  validity: String
+}
+
+type simple__university_admin_AdminMenu__actionWithDisabledParam__thirdParameter__gqlv_action_parameter {
+  datatype: String
+  disabled(firstParam: String, secondParam: String, thirdParameter: String): String
+  hidden(firstParam: String, secondParam: String): Boolean
+  validity: String
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_parameter {
+  datatype: String
+  disabled(firstParam: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent(firstParam: String!, secondParam: String!): simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_params
+  validate(firstParam: String, secondParam: String): String
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_args {
+  firstParam: String
+  secondParam: String
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_args
+  results: String
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_params {
+  "First Param"
+  firstParam: simple__university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_parameter
+  "Second Param"
+  secondParam: simple__university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action_parameter
+}
+
+type simple__university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action_parameter {
+  datatype: String
+  disabled(firstParam: String, secondParam: String): String
+  hidden(firstParam: String): Boolean
+  validity: String
+}
+
+type simple__university_admin_AdminMenu__adminAction__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent: simple__university_admin_AdminMenu__adminAction__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_admin_AdminMenu__adminAction__gqlv_action_invoke {
+  results: String
+}
+
+type simple__university_admin_AdminMenu__otherAdminAction__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent: simple__university_admin_AdminMenu__otherAdminAction__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_admin_AdminMenu__otherAdminAction__gqlv_action_invoke {
+  results: String
+}
+
+type simple__university_calc_Calculator {
+  "Add Big Decimals"
+  addBigDecimals: simple__university_calc_Calculator__addBigDecimals__gqlv_action
+  "Add Big Integers"
+  addBigIntegers: simple__university_calc_Calculator__addBigIntegers__gqlv_action
+  "Add Byte Wrappers"
+  addByteWrappers: simple__university_calc_Calculator__addByteWrappers__gqlv_action
+  "Add Bytes"
+  addBytes: simple__university_calc_Calculator__addBytes__gqlv_action
+  "Add Double Wrappers"
+  addDoubleWrappers: simple__university_calc_Calculator__addDoubleWrappers__gqlv_action
+  "Add Doubles"
+  addDoubles: simple__university_calc_Calculator__addDoubles__gqlv_action
+  "Add Float Wrappers"
+  addFloatWrappers: simple__university_calc_Calculator__addFloatWrappers__gqlv_action
+  "Add Floats"
+  addFloats: simple__university_calc_Calculator__addFloats__gqlv_action
+  "Add Integer Wrappers"
+  addIntegerWrappers: simple__university_calc_Calculator__addIntegerWrappers__gqlv_action
+  "Add Integers"
+  addIntegers: simple__university_calc_Calculator__addIntegers__gqlv_action
+  "Add Short Wrappers"
+  addShortWrappers: simple__university_calc_Calculator__addShortWrappers__gqlv_action
+  "Add Shorts"
+  addShorts: simple__university_calc_Calculator__addShorts__gqlv_action
+  "And"
+  and: simple__university_calc_Calculator__and__gqlv_action
+  "Concat"
+  concat: simple__university_calc_Calculator__concat__gqlv_action
+  "Jdk 8 Local Plus Days"
+  jdk8LocalPlusDays: simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action
+  "Jdk 8 Local Plus Hours And Minutes"
+  jdk8LocalPlusHoursAndMinutes: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action
+  "Jdk 8 Offset Plus Days And Hours And Minutes"
+  jdk8OffsetPlusDaysAndHoursAndMinutes: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action
+  "Jdk 8 Offset Plus Hours And Minutes"
+  jdk8OffsetPlusHoursAndMinutes: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action
+  "Jdk 8 Zoned Plus Days And Hours And Minutes"
+  jdk8ZonedPlusDaysAndHoursAndMinutes: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action
+  "Joda Local Plus Days"
+  jodaLocalPlusDays: simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action
+  "Joda Local Plus Hours And Minutes"
+  jodaLocalPlusHoursAndMinutes: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action
+  "Joda Plus Days And Hours And Minutes"
+  jodaPlusDaysAndHoursAndMinutes: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action
+  "Next Month"
+  nextMonth: simple__university_calc_Calculator__nextMonth__gqlv_action
+  "Not"
+  not: simple__university_calc_Calculator__not__gqlv_action
+  "Or"
+  or: simple__university_calc_Calculator__or__gqlv_action
+  "Some Locale"
+  someLocale: simple__university_calc_Calculator__someLocale__gqlv_action
+  "Some Url"
+  someUrl: simple__university_calc_Calculator__someUrl__gqlv_action
+  "Some Uuid"
+  someUuid: simple__university_calc_Calculator__someUuid__gqlv_action
+}
+
+type simple__university_calc_Calculator__addBigDecimals__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: String!, y: String): simple__university_calc_Calculator__addBigDecimals__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addBigDecimals__gqlv_action_params
+  validate(x: String, y: String): String
+}
+
+type simple__university_calc_Calculator__addBigDecimals__gqlv_action_args {
+  x: String
+  y: String
+}
+
+type simple__university_calc_Calculator__addBigDecimals__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addBigDecimals__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__addBigDecimals__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: String, y: String): String
+  hidden(x: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addBigIntegers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: String!, y: String): simple__university_calc_Calculator__addBigIntegers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addBigIntegers__gqlv_action_params
+  validate(x: String, y: String): String
+}
+
+type simple__university_calc_Calculator__addBigIntegers__gqlv_action_args {
+  x: String
+  y: String
+}
+
+type simple__university_calc_Calculator__addBigIntegers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addBigIntegers__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__addBigIntegers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: String, y: String): String
+  hidden(x: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addByteWrappers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Byte!, y: Byte): simple__university_calc_Calculator__addByteWrappers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addByteWrappers__gqlv_action_params
+  validate(x: Byte, y: Byte): String
+}
+
+type simple__university_calc_Calculator__addByteWrappers__gqlv_action_args {
+  x: Byte
+  y: Byte
+}
+
+type simple__university_calc_Calculator__addByteWrappers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addByteWrappers__gqlv_action_args
+  results: Int
+}
+
+type simple__university_calc_Calculator__addByteWrappers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Byte): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Byte, y: Byte): String
+  hidden(x: Byte): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addBytes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Byte!, y: Byte!): simple__university_calc_Calculator__addBytes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addBytes__gqlv_action_params
+  validate(x: Byte, y: Byte): String
+}
+
+type simple__university_calc_Calculator__addBytes__gqlv_action_args {
+  x: Byte
+  y: Byte
+}
+
+type simple__university_calc_Calculator__addBytes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addBytes__gqlv_action_args
+  results: Byte
+}
+
+type simple__university_calc_Calculator__addBytes__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addBytes__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addBytes__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addBytes__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Byte): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addBytes__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Byte, y: Byte): String
+  hidden(x: Byte): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Float!, y: Float): simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_params
+  validate(x: Float, y: Float): String
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_args {
+  x: Float
+  y: Float
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_args
+  results: Float
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float, y: Float): String
+  hidden(x: Float): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addDoubles__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Float!, y: Float!): simple__university_calc_Calculator__addDoubles__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addDoubles__gqlv_action_params
+  validate(x: Float, y: Float): String
+}
+
+type simple__university_calc_Calculator__addDoubles__gqlv_action_args {
+  x: Float
+  y: Float
+}
+
+type simple__university_calc_Calculator__addDoubles__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addDoubles__gqlv_action_args
+  results: Float
+}
+
+type simple__university_calc_Calculator__addDoubles__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addDoubles__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addDoubles__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addDoubles__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addDoubles__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float, y: Float): String
+  hidden(x: Float): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Float!, y: Float): simple__university_calc_Calculator__addFloatWrappers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addFloatWrappers__gqlv_action_params
+  validate(x: Float, y: Float): String
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__gqlv_action_args {
+  x: Float
+  y: Float
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addFloatWrappers__gqlv_action_args
+  results: Float
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float, y: Float): String
+  hidden(x: Float): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addFloats__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Float!, y: Float!): simple__university_calc_Calculator__addFloats__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addFloats__gqlv_action_params
+  validate(x: Float, y: Float): String
+}
+
+type simple__university_calc_Calculator__addFloats__gqlv_action_args {
+  x: Float
+  y: Float
+}
+
+type simple__university_calc_Calculator__addFloats__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addFloats__gqlv_action_args
+  results: Float
+}
+
+type simple__university_calc_Calculator__addFloats__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addFloats__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addFloats__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addFloats__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addFloats__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Float, y: Float): String
+  hidden(x: Float): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Int!, y: Int): simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_params
+  validate(x: Int, y: Int): String
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_args {
+  x: Int
+  y: Int
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_args
+  results: Int
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Int): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Int, y: Int): String
+  hidden(x: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addIntegers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Int!, y: Int!): simple__university_calc_Calculator__addIntegers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addIntegers__gqlv_action_params
+  validate(x: Int, y: Int): String
+}
+
+type simple__university_calc_Calculator__addIntegers__gqlv_action_args {
+  x: Int
+  y: Int
+}
+
+type simple__university_calc_Calculator__addIntegers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addIntegers__gqlv_action_args
+  results: Int
+}
+
+type simple__university_calc_Calculator__addIntegers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addIntegers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addIntegers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addIntegers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Int): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addIntegers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Int, y: Int): String
+  hidden(x: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addShortWrappers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Short!, y: Short): simple__university_calc_Calculator__addShortWrappers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addShortWrappers__gqlv_action_params
+  validate(x: Short, y: Short): String
+}
+
+type simple__university_calc_Calculator__addShortWrappers__gqlv_action_args {
+  x: Short
+  y: Short
+}
+
+type simple__university_calc_Calculator__addShortWrappers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addShortWrappers__gqlv_action_args
+  results: Short
+}
+
+type simple__university_calc_Calculator__addShortWrappers__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addShortWrappers__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Short): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addShortWrappers__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Short, y: Short): String
+  hidden(x: Short): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addShorts__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Short!, y: Short!): simple__university_calc_Calculator__addShorts__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__addShorts__gqlv_action_params
+  validate(x: Short, y: Short): String
+}
+
+type simple__university_calc_Calculator__addShorts__gqlv_action_args {
+  x: Short
+  y: Short
+}
+
+type simple__university_calc_Calculator__addShorts__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__addShorts__gqlv_action_args
+  results: Short
+}
+
+type simple__university_calc_Calculator__addShorts__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__addShorts__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__addShorts__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__addShorts__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Short): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__addShorts__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Short, y: Short): String
+  hidden(x: Short): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__and__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Boolean!, y: Boolean!): simple__university_calc_Calculator__and__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__and__gqlv_action_params
+  validate(x: Boolean, y: Boolean): String
+}
+
+type simple__university_calc_Calculator__and__gqlv_action_args {
+  x: Boolean
+  y: Boolean
+}
+
+type simple__university_calc_Calculator__and__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__and__gqlv_action_args
+  results: Boolean
+}
+
+type simple__university_calc_Calculator__and__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__and__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__and__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__and__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Boolean): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__and__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Boolean, y: Boolean): String
+  hidden(x: Boolean): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__concat__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(prefix: String!, suffix: String): simple__university_calc_Calculator__concat__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__concat__gqlv_action_params
+  validate(prefix: String, suffix: String): String
+}
+
+type simple__university_calc_Calculator__concat__gqlv_action_args {
+  prefix: String
+  suffix: String
+}
+
+type simple__university_calc_Calculator__concat__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__concat__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__concat__gqlv_action_params {
+  "Prefix"
+  prefix: simple__university_calc_Calculator__concat__prefix__gqlv_action_parameter
+  "Suffix"
+  suffix: simple__university_calc_Calculator__concat__suffix__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__concat__prefix__gqlv_action_parameter {
+  datatype: String
+  disabled(prefix: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__concat__suffix__gqlv_action_parameter {
+  datatype: String
+  disabled(prefix: String, suffix: String): String
+  hidden(prefix: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__date__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(date: String!, numDays: Int!): simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_params
+  validate(date: String, numDays: Int): String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_args {
+  date: String
+  numDays: Int
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_params {
+  "Date"
+  date: simple__university_calc_Calculator__jdk8LocalPlusDays__date__gqlv_action_parameter
+  "Num Days"
+  numDays: simple__university_calc_Calculator__jdk8LocalPlusDays__numDays__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusDays__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String, numDays: Int): String
+  hidden(date: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: String!): simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: String): String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_args {
+  numHours: Int
+  numMinutes: Int
+  time: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_params {
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  "Time"
+  time: simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: String): String
+  hidden(time: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: String): String
+  hidden(numHours: Int, time: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: DateTime!, numDays: Int!, numHours: Int!, numMinutes: Int!): simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: DateTime, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_args {
+  dateTime: DateTime
+  numDays: Int
+  numHours: Int
+  numMinutes: Int
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_args
+  results: DateTime
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  "Date Time"
+  dateTime: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  "Num Days"
+  numDays: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int): String
+  hidden(dateTime: DateTime): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int, numHours: Int): String
+  hidden(dateTime: DateTime, numDays: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: DateTime, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: Time!): simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: Time): String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_args {
+  numHours: Int
+  numMinutes: Int
+  time: Time
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_args
+  results: Time
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_params {
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  "Time"
+  time: simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: Time): String
+  hidden(time: Time): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: Time): String
+  hidden(numHours: Int, time: Time): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: Time): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_args {
+  dateTime: String
+  numDays: Int
+  numHours: Int
+  numMinutes: Int
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  "Date Time"
+  dateTime: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  "Num Days"
+  numDays: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__date__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(date: String!, numDays: Int!): simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_params
+  validate(date: String, numDays: Int): String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_args {
+  date: String
+  numDays: Int
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__gqlv_action_params {
+  "Date"
+  date: simple__university_calc_Calculator__jodaLocalPlusDays__date__gqlv_action_parameter
+  "Num Days"
+  numDays: simple__university_calc_Calculator__jodaLocalPlusDays__numDays__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusDays__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String, numDays: Int): String
+  hidden(date: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: String!): simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: String): String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_args {
+  numHours: Int
+  numMinutes: Int
+  time: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_params {
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  "Time"
+  time: simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: String): String
+  hidden(time: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: String): String
+  hidden(numHours: Int, time: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaLocalPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_args {
+  dateTime: String
+  numDays: Int
+  numHours: Int
+  numMinutes: Int
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_args
+  results: String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  "Date Time"
+  dateTime: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  "Num Days"
+  numDays: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  "Num Hours"
+  numHours: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  "Num Minutes"
+  numMinutes: simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__nextMonth__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(month: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum!): simple__university_calc_Calculator__nextMonth__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__nextMonth__gqlv_action_params
+  validate(month: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum): String
+}
+
+type simple__university_calc_Calculator__nextMonth__gqlv_action_args {
+  month: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum
+}
+
+type simple__university_calc_Calculator__nextMonth__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__nextMonth__gqlv_action_args
+  results: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum
+}
+
+type simple__university_calc_Calculator__nextMonth__gqlv_action_params {
+  "Month"
+  month: simple__university_calc_Calculator__nextMonth__month__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__nextMonth__month__gqlv_action_parameter {
+  choices: [rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum]
+  datatype: String
+  disabled(month: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__not__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Boolean!): simple__university_calc_Calculator__not__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__not__gqlv_action_params
+  validate(x: Boolean): String
+}
+
+type simple__university_calc_Calculator__not__gqlv_action_args {
+  x: Boolean
+}
+
+type simple__university_calc_Calculator__not__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__not__gqlv_action_args
+  results: Boolean
+}
+
+type simple__university_calc_Calculator__not__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__not__x__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__not__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Boolean): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__or__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(x: Boolean!, y: Boolean!): simple__university_calc_Calculator__or__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_calc_Calculator__or__gqlv_action_params
+  validate(x: Boolean, y: Boolean): String
+}
+
+type simple__university_calc_Calculator__or__gqlv_action_args {
+  x: Boolean
+  y: Boolean
+}
+
+type simple__university_calc_Calculator__or__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_calc_Calculator__or__gqlv_action_args
+  results: Boolean
+}
+
+type simple__university_calc_Calculator__or__gqlv_action_params {
+  "X"
+  x: simple__university_calc_Calculator__or__x__gqlv_action_parameter
+  "Y"
+  y: simple__university_calc_Calculator__or__y__gqlv_action_parameter
+}
+
+type simple__university_calc_Calculator__or__x__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Boolean): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__or__y__gqlv_action_parameter {
+  datatype: String
+  disabled(x: Boolean, y: Boolean): String
+  hidden(x: Boolean): Boolean
+  validity: String
+}
+
+type simple__university_calc_Calculator__someLocale__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_calc_Calculator__someLocale__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_calc_Calculator__someLocale__gqlv_action_invoke {
+  results: String
+}
+
+type simple__university_calc_Calculator__someUrl__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_calc_Calculator__someUrl__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_calc_Calculator__someUrl__gqlv_action_invoke {
+  results: String
+}
+
+type simple__university_calc_Calculator__someUuid__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_calc_Calculator__someUuid__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_calc_Calculator__someUuid__gqlv_action_invoke {
+  results: UUID
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department {
+  "Object metadata"
+  _meta: simple__university_dept_Department__gqlv_meta
+  "University department specializing in a field of study"
+  addStaffMember: simple__university_dept_Department__addStaffMember__gqlv_action
+  "University department specializing in a field of study"
+  addStaffMembers: simple__university_dept_Department__addStaffMembers__gqlv_action
+  "University department specializing in a field of study"
+  changeDeptHead: simple__university_dept_Department__changeDeptHead__gqlv_action
+  "University department specializing in a field of study"
+  changeName: simple__university_dept_Department__changeName__gqlv_action
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  deptHead: simple__university_dept_Department__deptHead__gqlv_property
+  "Name"
+  name: simple__university_dept_Department__name__gqlv_property
+  "University department specializing in a field of study"
+  removeStaffMember: simple__university_dept_Department__removeStaffMember__gqlv_action
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  staffMembers: simple__university_dept_Department__staffMembers__gqlv_collection
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department__addStaffMember__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(staffMember: simple__university_dept_StaffMember__gqlv_input!): simple__university_dept_Department__addStaffMember__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Department__addStaffMember__gqlv_action_params
+  validate(staffMember: simple__university_dept_StaffMember__gqlv_input): String
+}
+
+type simple__university_dept_Department__addStaffMember__gqlv_action_args {
+  staffMember: simple__university_dept_StaffMember
+}
+
+type simple__university_dept_Department__addStaffMember__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Department__addStaffMember__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Department__addStaffMember__gqlv_action_params {
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  staffMember: simple__university_dept_Department__addStaffMember__staffMember__gqlv_action_parameter
+}
+
+type simple__university_dept_Department__addStaffMember__staffMember__gqlv_action_parameter {
+  autoComplete(search: String!): [simple__university_dept_StaffMember]
+  datatype: String
+  disabled(staffMember: simple__university_dept_StaffMember__gqlv_input): String
+  hidden: Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department__addStaffMembers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(staffMembers: [simple__university_dept_StaffMember__gqlv_input]): simple__university_dept_Department__addStaffMembers__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Department__addStaffMembers__gqlv_action_params
+  validate(staffMembers: [simple__university_dept_StaffMember__gqlv_input]): String
+}
+
+type simple__university_dept_Department__addStaffMembers__gqlv_action_args {
+  staffMembers: [simple__university_dept_StaffMember]
+}
+
+type simple__university_dept_Department__addStaffMembers__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Department__addStaffMembers__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Department__addStaffMembers__gqlv_action_params {
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  staffMembers: simple__university_dept_Department__addStaffMembers__staffMembers__gqlv_action_parameter
+}
+
+type simple__university_dept_Department__addStaffMembers__staffMembers__gqlv_action_parameter {
+  choices: [simple__university_dept_StaffMember]
+  datatype: String
+  disabled(staffMembers: [simple__university_dept_StaffMember__gqlv_input]): String
+  hidden: Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department__changeDeptHead__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(newDeptHead: simple__university_dept_DeptHead__gqlv_input!): simple__university_dept_Department__changeDeptHead__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Department__changeDeptHead__gqlv_action_params
+  validate(newDeptHead: simple__university_dept_DeptHead__gqlv_input): String
+}
+
+type simple__university_dept_Department__changeDeptHead__gqlv_action_args {
+  newDeptHead: simple__university_dept_DeptHead
+}
+
+type simple__university_dept_Department__changeDeptHead__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Department__changeDeptHead__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Department__changeDeptHead__gqlv_action_params {
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  newDeptHead: simple__university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parameter
+}
+
+type simple__university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parameter {
+  autoComplete(search: String!): [simple__university_dept_DeptHead]
+  datatype: String
+  default: simple__university_dept_DeptHead
+  disabled(newDeptHead: simple__university_dept_DeptHead__gqlv_input): String
+  hidden: Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department__changeName__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(newName: String!): simple__university_dept_Department__changeName__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Department__changeName__gqlv_action_params
+  validate(newName: String): String
+}
+
+type simple__university_dept_Department__changeName__gqlv_action_args {
+  newName: String
+}
+
+type simple__university_dept_Department__changeName__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Department__changeName__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Department__changeName__gqlv_action_params {
+  "New Name"
+  newName: simple__university_dept_Department__changeName__newName__gqlv_action_parameter
+}
+
+type simple__university_dept_Department__changeName__newName__gqlv_action_parameter {
+  datatype: String
+  default: String
+  disabled(newName: String): String
+  hidden: Boolean
+  validity: String
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_Department__deptHead__gqlv_property {
+  autoComplete(search: String!): [rich__university_dept_DeptHead]
+  datatype: String
+  disabled: String
+  get: simple__university_dept_DeptHead
+  hidden: Boolean
+  set(deptHead: rich__university_dept_DeptHead__gqlv_input): rich__university_dept_Department
+  validate(deptHead: rich__university_dept_DeptHead__gqlv_input): String
+}
+
+type simple__university_dept_Department__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+  version: String
+}
+
+type simple__university_dept_Department__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(name: String!): rich__university_dept_Department
+  validate(name: String): String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Department__removeStaffMember__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(staffMember: simple__university_dept_StaffMember__gqlv_input!): simple__university_dept_Department__removeStaffMember__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Department__removeStaffMember__gqlv_action_params
+  validate(staffMember: simple__university_dept_StaffMember__gqlv_input): String
+}
+
+type simple__university_dept_Department__removeStaffMember__gqlv_action_args {
+  staffMember: simple__university_dept_StaffMember
+}
+
+type simple__university_dept_Department__removeStaffMember__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Department__removeStaffMember__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Department__removeStaffMember__gqlv_action_params {
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  staffMember: simple__university_dept_Department__removeStaffMember__staffMember__gqlv_action_parameter
+}
+
+type simple__university_dept_Department__removeStaffMember__staffMember__gqlv_action_parameter {
+  choices: [simple__university_dept_StaffMember]
+  datatype: String
+  disabled(staffMember: simple__university_dept_StaffMember__gqlv_input): String
+  hidden: Boolean
+  validity: String
+}
+
+"Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+type simple__university_dept_Department__staffMembers__gqlv_collection {
+  datatype: String
+  disabled: String
+  get: [simple__university_dept_StaffMember]
+  hidden: Boolean
+}
+
+type simple__university_dept_Departments {
+  "University department specializing in a field of study"
+  createDepartment: simple__university_dept_Departments__createDepartment__gqlv_action
+  "University department specializing in a field of study"
+  findAllDepartments: simple__university_dept_Departments__findAllDepartments__gqlv_action
+  "University department specializing in a field of study"
+  findDepartmentByName: simple__university_dept_Departments__findDepartmentByName__gqlv_action
+}
+
+type simple__university_dept_Departments__createDepartment__deptHead__gqlv_action_parameter {
+  autoComplete(name: String, search: String!): [simple__university_dept_DeptHead]
+  datatype: String
+  disabled(deptHead: simple__university_dept_DeptHead__gqlv_input, name: String): String
+  hidden(name: String): Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Departments__createDepartment__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent(deptHead: simple__university_dept_DeptHead__gqlv_input, name: String!): simple__university_dept_Departments__createDepartment__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Departments__createDepartment__gqlv_action_params
+  validate(deptHead: simple__university_dept_DeptHead__gqlv_input, name: String): String
+}
+
+type simple__university_dept_Departments__createDepartment__gqlv_action_args {
+  deptHead: simple__university_dept_DeptHead
+  name: String
+}
+
+type simple__university_dept_Departments__createDepartment__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Departments__createDepartment__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Departments__createDepartment__gqlv_action_params {
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  deptHead: simple__university_dept_Departments__createDepartment__deptHead__gqlv_action_parameter
+  "Name"
+  name: simple__university_dept_Departments__createDepartment__name__gqlv_action_parameter
+}
+
+type simple__university_dept_Departments__createDepartment__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Departments__findAllDepartments__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_dept_Departments__findAllDepartments__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_dept_Departments__findAllDepartments__gqlv_action_invoke {
+  results: [simple__university_dept_Department]
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_Departments__findDepartmentByName__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(name: String!): simple__university_dept_Departments__findDepartmentByName__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Departments__findDepartmentByName__gqlv_action_params
+  validate(name: String): String
+}
+
+type simple__university_dept_Departments__findDepartmentByName__gqlv_action_args {
+  name: String
+}
+
+type simple__university_dept_Departments__findDepartmentByName__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Departments__findDepartmentByName__gqlv_action_args
+  results: simple__university_dept_Department
+}
+
+type simple__university_dept_Departments__findDepartmentByName__gqlv_action_params {
+  "Name"
+  name: simple__university_dept_Departments__findDepartmentByName__name__gqlv_action_parameter
+}
+
+type simple__university_dept_Departments__findDepartmentByName__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_DeptHead {
+  "Object metadata"
+  _meta: simple__university_dept_DeptHead__gqlv_meta
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  changeDepartment: simple__university_dept_DeptHead__changeDepartment__gqlv_action
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  changeName: simple__university_dept_DeptHead__changeName__gqlv_action
+  "University department specializing in a field of study"
+  department: simple__university_dept_DeptHead__department__gqlv_property
+  "Name"
+  name: simple__university_dept_DeptHead__name__gqlv_property
+}
+
+type simple__university_dept_DeptHead__changeDepartment__department__gqlv_action_parameter {
+  choices: [simple__university_dept_Department]
+  datatype: String
+  disabled(department: simple__university_dept_Department__gqlv_input): String
+  hidden: Boolean
+  validity: String
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_DeptHead__changeDepartment__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(department: simple__university_dept_Department__gqlv_input!): simple__university_dept_DeptHead__changeDepartment__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_DeptHead__changeDepartment__gqlv_action_params
+  validate(department: simple__university_dept_Department__gqlv_input): String
+}
+
+type simple__university_dept_DeptHead__changeDepartment__gqlv_action_args {
+  department: simple__university_dept_Department
+}
+
+type simple__university_dept_DeptHead__changeDepartment__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_DeptHead__changeDepartment__gqlv_action_args
+  results: simple__university_dept_DeptHead
+}
+
+type simple__university_dept_DeptHead__changeDepartment__gqlv_action_params {
+  "University department specializing in a field of study"
+  department: simple__university_dept_DeptHead__changeDepartment__department__gqlv_action_parameter
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_DeptHead__changeName__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeIdempotent(newName: String!): simple__university_dept_DeptHead__changeName__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_DeptHead__changeName__gqlv_action_params
+  validate(newName: String): String
+}
+
+type simple__university_dept_DeptHead__changeName__gqlv_action_args {
+  newName: String
+}
+
+type simple__university_dept_DeptHead__changeName__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_DeptHead__changeName__gqlv_action_args
+  results: simple__university_dept_DeptHead
+}
+
+type simple__university_dept_DeptHead__changeName__gqlv_action_params {
+  "New Name"
+  newName: simple__university_dept_DeptHead__changeName__newName__gqlv_action_parameter
+}
+
+type simple__university_dept_DeptHead__changeName__newName__gqlv_action_parameter {
+  datatype: String
+  default: String
+  disabled(newName: String): String
+  hidden: Boolean
+  validity: String
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_DeptHead__department__gqlv_property {
+  choices(department: rich__university_dept_Department__gqlv_input): [rich__university_dept_Department]
+  datatype: String
+  disabled: String
+  get: simple__university_dept_Department
+  hidden: Boolean
+  set(department: rich__university_dept_Department__gqlv_input): rich__university_dept_DeptHead
+  validate(department: rich__university_dept_Department__gqlv_input): String
+}
+
+type simple__university_dept_DeptHead__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+  version: String
+}
+
+type simple__university_dept_DeptHead__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(name: String): rich__university_dept_DeptHead
+  validate(name: String): String
+}
+
+type simple__university_dept_DeptHeads {
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  findAllHeads: simple__university_dept_DeptHeads__findAllHeads__gqlv_action
+  "Departmental head, responsible for curriculum, research, funding and staff"
+  findHeadByName: simple__university_dept_DeptHeads__findHeadByName__gqlv_action
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_DeptHeads__findAllHeads__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_dept_DeptHeads__findAllHeads__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_dept_DeptHeads__findAllHeads__gqlv_action_invoke {
+  results: [simple__university_dept_DeptHead]
+}
+
+"Departmental head, responsible for curriculum, research, funding and staff"
+type simple__university_dept_DeptHeads__findHeadByName__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(name: String!): simple__university_dept_DeptHeads__findHeadByName__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_DeptHeads__findHeadByName__gqlv_action_params
+  validate(name: String): String
+}
+
+type simple__university_dept_DeptHeads__findHeadByName__gqlv_action_args {
+  name: String
+}
+
+type simple__university_dept_DeptHeads__findHeadByName__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_DeptHeads__findHeadByName__gqlv_action_args
+  results: simple__university_dept_DeptHead
+}
+
+type simple__university_dept_DeptHeads__findHeadByName__gqlv_action_params {
+  "Name"
+  name: simple__university_dept_DeptHeads__findHeadByName__name__gqlv_action_parameter
+}
+
+type simple__university_dept_DeptHeads__findHeadByName__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_dept_People {
+  "Find Named"
+  findNamed: simple__university_dept_People__findNamed__gqlv_action
+  "Name Of"
+  nameOf: simple__university_dept_People__nameOf__gqlv_action
+}
+
+type simple__university_dept_People__findNamed__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(name: String!): simple__university_dept_People__findNamed__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_People__findNamed__gqlv_action_params
+  validate(name: String): String
+}
+
+type simple__university_dept_People__findNamed__gqlv_action_args {
+  name: String
+}
+
+type simple__university_dept_People__findNamed__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_People__findNamed__gqlv_action_args
+  results: simple__university_dept_Person
+}
+
+type simple__university_dept_People__findNamed__gqlv_action_params {
+  "Name"
+  name: simple__university_dept_People__findNamed__name__gqlv_action_parameter
+}
+
+type simple__university_dept_People__findNamed__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_dept_People__nameOf__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(person: simple__university_dept_Person__gqlv_input!): simple__university_dept_People__nameOf__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_People__nameOf__gqlv_action_params
+  validate(person: simple__university_dept_Person__gqlv_input): String
+}
+
+type simple__university_dept_People__nameOf__gqlv_action_args {
+  person: simple__university_dept_Person
+}
+
+type simple__university_dept_People__nameOf__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_People__nameOf__gqlv_action_args
+  results: String
+}
+
+type simple__university_dept_People__nameOf__gqlv_action_params {
+  "Person"
+  person: simple__university_dept_People__nameOf__person__gqlv_action_parameter
+}
+
+type simple__university_dept_People__nameOf__person__gqlv_action_parameter {
+  datatype: String
+  disabled(person: simple__university_dept_Person__gqlv_input): String
+  hidden: Boolean
+  validity: String
+}
+
+type simple__university_dept_Person {
+  "Object metadata"
+  _meta: simple__university_dept_Person__gqlv_meta
+  "Name"
+  name: simple__university_dept_Person__name__gqlv_property
+}
+
+type simple__university_dept_Person__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+}
+
+type simple__university_dept_Person__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(name: String!): rich__university_dept_Person
+  validate(name: String): String
+}
+
+type simple__university_dept_Staff {
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  createStaffMember: simple__university_dept_Staff__createStaffMember__gqlv_action
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  findAllStaffMembers: simple__university_dept_Staff__findAllStaffMembers__gqlv_action
+  "Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+  findStaffMemberByName: simple__university_dept_Staff__findStaffMemberByName__gqlv_action
+}
+
+"Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+type simple__university_dept_StaffMember {
+  "Object metadata"
+  _meta: simple__university_dept_StaffMember__gqlv_meta
+  "University department specializing in a field of study"
+  department: simple__university_dept_StaffMember__department__gqlv_property
+  "Grade"
+  grade: simple__university_dept_StaffMember__grade__gqlv_property
+  "Name"
+  name: simple__university_dept_StaffMember__name__gqlv_property
+  "Photo"
+  photo: simple__university_dept_StaffMember__photo__gqlv_property
+}
+
+"University department specializing in a field of study"
+type simple__university_dept_StaffMember__department__gqlv_property {
+  choices(department: rich__university_dept_Department__gqlv_input): [rich__university_dept_Department]
+  datatype: String
+  disabled: String
+  get: simple__university_dept_Department
+  hidden: Boolean
+  set(department: rich__university_dept_Department__gqlv_input): rich__university_dept_StaffMember
+  validate(department: rich__university_dept_Department__gqlv_input): String
+}
+
+type simple__university_dept_StaffMember__gqlv_meta {
+  cssClass: String
+  grid: String
+  icon: String
+  id: String!
+  layout: String
+  logicalTypeName: String!
+  saveAs(ref: String): String
+  title: String!
+  version: String
+}
+
+type simple__university_dept_StaffMember__grade__gqlv_property {
+  choices(grade: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum): [rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum]
+  datatype: String
+  disabled: String
+  get: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum!
+  hidden: Boolean
+  set(grade: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum!): rich__university_dept_StaffMember
+  validate(grade: rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum): String
+}
+
+type simple__university_dept_StaffMember__name__gqlv_property {
+  datatype: String
+  disabled: String
+  get: String!
+  hidden: Boolean
+  set(name: String!): rich__university_dept_StaffMember
+  validate(name: String): String
+}
+
+type simple__university_dept_StaffMember__photo__gqlv_property {
+  datatype: String
+  disabled: String
+  get: simple__university_dept_StaffMember__photo__gqlv_property_blob
+  hidden: Boolean
+  set(photo: String): rich__university_dept_StaffMember
+  validate(photo: String): String
+}
+
+type simple__university_dept_StaffMember__photo__gqlv_property_blob {
+  bytes: String
+  mimeType: String
+  name: String
+}
+
+type simple__university_dept_Staff__createStaffMember__department__gqlv_action_parameter {
+  choices(name: String): [simple__university_dept_Department]
+  datatype: String
+  disabled(department: simple__university_dept_Department__gqlv_input, name: String): String
+  hidden(name: String): Boolean
+  validity: String
+}
+
+"Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+type simple__university_dept_Staff__createStaffMember__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invokeNonIdempotent(department: simple__university_dept_Department__gqlv_input!, name: String!): simple__university_dept_Staff__createStaffMember__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Staff__createStaffMember__gqlv_action_params
+  validate(department: simple__university_dept_Department__gqlv_input, name: String): String
+}
+
+type simple__university_dept_Staff__createStaffMember__gqlv_action_args {
+  department: simple__university_dept_Department
+  name: String
+}
+
+type simple__university_dept_Staff__createStaffMember__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Staff__createStaffMember__gqlv_action_args
+  results: simple__university_dept_StaffMember
+}
+
+type simple__university_dept_Staff__createStaffMember__gqlv_action_params {
+  "University department specializing in a field of study"
+  department: simple__university_dept_Staff__createStaffMember__department__gqlv_action_parameter
+  "Name"
+  name: simple__university_dept_Staff__createStaffMember__name__gqlv_action_parameter
+}
+
+type simple__university_dept_Staff__createStaffMember__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+"Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+type simple__university_dept_Staff__findAllStaffMembers__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke: simple__university_dept_Staff__findAllStaffMembers__gqlv_action_invoke
+  validate: String
+}
+
+type simple__university_dept_Staff__findAllStaffMembers__gqlv_action_invoke {
+  results: [simple__university_dept_StaffMember]
+}
+
+"Staff member of a university department, responsible for delivering lectures, tutorials, exam invigilation and candidate interviews"
+type simple__university_dept_Staff__findStaffMemberByName__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(name: String!): simple__university_dept_Staff__findStaffMemberByName__gqlv_action_invoke
+  "Parameters of this action"
+  params: simple__university_dept_Staff__findStaffMemberByName__gqlv_action_params
+  validate(name: String): String
+}
+
+type simple__university_dept_Staff__findStaffMemberByName__gqlv_action_args {
+  name: String
+}
+
+type simple__university_dept_Staff__findStaffMemberByName__gqlv_action_invoke {
+  "Arguments used to invoke this action"
+  args: simple__university_dept_Staff__findStaffMemberByName__gqlv_action_args
+  results: simple__university_dept_StaffMember
+}
+
+type simple__university_dept_Staff__findStaffMemberByName__gqlv_action_params {
+  "Name"
+  name: simple__university_dept_Staff__findStaffMemberByName__name__gqlv_action_parameter
+}
+
+type simple__university_dept_Staff__findStaffMemberByName__name__gqlv_action_parameter {
+  datatype: String
+  disabled(name: String): String
+  hidden: Boolean
+  validity: String
+}
+
+enum rich__causeway_applib_annotation_SemanticsOf__gqlv_enum {
+  IDEMPOTENT
+  IDEMPOTENT_ARE_YOU_SURE
+  NON_IDEMPOTENT
+  NON_IDEMPOTENT_ARE_YOU_SURE
+  NOT_SPECIFIED
+  SAFE
+  SAFE_AND_REQUEST_CACHEABLE
+}
+
+enum rich__org_apache_causeway_applib_services_user_UserMemento_AuthenticationSource__gqlv_enum {
+  DEFAULT
+  EXTERNAL
+}
+
+enum rich__org_apache_causeway_viewer_graphql_viewer_test_domain_calc_Month__gqlv_enum {
+  APRIL
+  AUGUST
+  DECEMBER
+  FEBRUARY
+  JANUARY
+  JULY
+  JUNE
+  MARCH
+  MAY
+  NOVEMBER
+  OCTOBER
+  SEPTEMBER
+}
+
+enum rich__org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum {
+  LECTURER
+  PROFESSOR
+  READER
+  RESEARCH_ASSISTANT
+  SENIOR_LECTURER
+}
+
+"An 8-bit signed integer"
+scalar Byte
+
+"An RFC-3339 compliant DateTime Scalar"
+scalar DateTime
+
+"A 16-bit signed integer"
+scalar Short
+
+"An RFC-3339 compliant Full Time Scalar"
+scalar Time
+
+"A universally unique identifier compliant UUID Scalar"
+scalar UUID
+
+input rich__causeway_applib_DomainObjectList__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_FacetGroupNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_ParameterNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_PropertyNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_RoleMemento__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_TypeNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_UserMemento__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_node_ActionNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_node_CollectionNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_node_FacetAttrNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_applib_node_FacetNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_conf_ConfigurationProperty__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_conf_ConfigurationViewmodel__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationNamespace__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationTypeAction__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationTypeCollection__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationTypeMember__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationTypeProperty__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_feat_ApplicationType__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_schema_metamodel_v2_FacetHolder__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_security_LoginRedirect__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__causeway_testing_fixtures_FixtureResult__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input rich__java_lang_Runnable__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4243,7 +8203,7 @@ input rich__causeway_conf_ConfigurationProperty__gqlv_input {
   ref: String
 }
 
-input rich__causeway_conf_ConfigurationViewmodel__gqlv_input {
+input rich__java_util_Map__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4252,7 +8212,7 @@ input rich__causeway_conf_ConfigurationViewmodel__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input {
+input rich__java_util_SortedMap__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4261,7 +8221,7 @@ input rich__causeway_feat_ApplicationFeatureViewModel__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationNamespace__gqlv_input {
+input rich__java_util_concurrent_Callable__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4270,7 +8230,7 @@ input rich__causeway_feat_ApplicationNamespace__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationTypeAction__gqlv_input {
+input rich__java_util_function_BiFunction__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4279,7 +8239,7 @@ input rich__causeway_feat_ApplicationTypeAction__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationTypeCollection__gqlv_input {
+input rich__java_util_function_Consumer__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4288,7 +8248,7 @@ input rich__causeway_feat_ApplicationTypeCollection__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationTypeMember__gqlv_input {
+input rich__java_util_function_Function__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4297,7 +8257,7 @@ input rich__causeway_feat_ApplicationTypeMember__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationTypeProperty__gqlv_input {
+input rich__java_util_stream_Stream__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4306,7 +8266,7 @@ input rich__causeway_feat_ApplicationTypeProperty__gqlv_input {
   ref: String
 }
 
-input rich__causeway_feat_ApplicationType__gqlv_input {
+input rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4315,7 +8275,7 @@ input rich__causeway_feat_ApplicationType__gqlv_input {
   ref: String
 }
 
-input rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input {
+input rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4324,7 +8284,7 @@ input rich__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input {
   ref: String
 }
 
-input rich__causeway_schema_metamodel_v2_FacetHolder__gqlv_input {
+input rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4333,7 +8293,7 @@ input rich__causeway_schema_metamodel_v2_FacetHolder__gqlv_input {
   ref: String
 }
 
-input rich__causeway_security_LoginRedirect__gqlv_input {
+input rich__university_dept_Department__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4342,7 +8302,7 @@ input rich__causeway_security_LoginRedirect__gqlv_input {
   ref: String
 }
 
-input rich__causeway_testing_fixtures_FixtureResult__gqlv_input {
+input rich__university_dept_DeptHead__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4351,7 +8311,7 @@ input rich__causeway_testing_fixtures_FixtureResult__gqlv_input {
   ref: String
 }
 
-input rich__java_lang_Runnable__gqlv_input {
+input rich__university_dept_Person__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4360,7 +8320,7 @@ input rich__java_lang_Runnable__gqlv_input {
   ref: String
 }
 
-input rich__java_util_Map__gqlv_input {
+input rich__university_dept_StaffMember__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4369,7 +8329,7 @@ input rich__java_util_Map__gqlv_input {
   ref: String
 }
 
-input rich__java_util_SortedMap__gqlv_input {
+input simple__causeway_applib_DomainObjectList__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4378,7 +8338,7 @@ input rich__java_util_SortedMap__gqlv_input {
   ref: String
 }
 
-input rich__java_util_concurrent_Callable__gqlv_input {
+input simple__causeway_applib_FacetGroupNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4387,7 +8347,7 @@ input rich__java_util_concurrent_Callable__gqlv_input {
   ref: String
 }
 
-input rich__java_util_function_BiFunction__gqlv_input {
+input simple__causeway_applib_ParameterNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4396,7 +8356,7 @@ input rich__java_util_function_BiFunction__gqlv_input {
   ref: String
 }
 
-input rich__java_util_function_Consumer__gqlv_input {
+input simple__causeway_applib_PropertyNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4405,7 +8365,7 @@ input rich__java_util_function_Consumer__gqlv_input {
   ref: String
 }
 
-input rich__java_util_function_Function__gqlv_input {
+input simple__causeway_applib_RoleMemento__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4414,7 +8374,7 @@ input rich__java_util_function_Function__gqlv_input {
   ref: String
 }
 
-input rich__java_util_stream_Stream__gqlv_input {
+input simple__causeway_applib_TypeNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4423,7 +8383,7 @@ input rich__java_util_stream_Stream__gqlv_input {
   ref: String
 }
 
-input rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input {
+input simple__causeway_applib_UserMemento__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4432,7 +8392,7 @@ input rich__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input
   ref: String
 }
 
-input rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input {
+input simple__causeway_applib_node_ActionNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4441,7 +8401,7 @@ input rich__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_in
   ref: String
 }
 
-input rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input {
+input simple__causeway_applib_node_CollectionNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4450,7 +8410,7 @@ input rich__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureSc
   ref: String
 }
 
-input rich__university_dept_Department__gqlv_input {
+input simple__causeway_applib_node_FacetAttrNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4459,7 +8419,7 @@ input rich__university_dept_Department__gqlv_input {
   ref: String
 }
 
-input rich__university_dept_DeptHead__gqlv_input {
+input simple__causeway_applib_node_FacetNode__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4468,7 +8428,7 @@ input rich__university_dept_DeptHead__gqlv_input {
   ref: String
 }
 
-input rich__university_dept_Person__gqlv_input {
+input simple__causeway_conf_ConfigurationProperty__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
@@ -4477,7 +8437,241 @@ input rich__university_dept_Person__gqlv_input {
   ref: String
 }
 
-input rich__university_dept_StaffMember__gqlv_input {
+input simple__causeway_conf_ConfigurationViewmodel__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationFeatureViewModel__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationNamespace__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationTypeAction__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationTypeCollection__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationTypeMember__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationTypeProperty__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_feat_ApplicationType__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_schema_metamodel_v2_DomainClassDto__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_schema_metamodel_v2_FacetHolder__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_security_LoginRedirect__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__causeway_testing_fixtures_FixtureResult__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_lang_Runnable__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_Map__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_SortedMap__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_concurrent_Callable__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_function_BiFunction__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_function_Consumer__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_function_Function__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__java_util_stream_Stream__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__university_dept_Department__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__university_dept_DeptHead__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__university_dept_Person__gqlv_input {
+  "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
+  id: ID
+  "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"
+  logicalTypeName: String
+  "Use either 'ref' or 'id'; looks up an object previously saved to the execution context using 'saveAs(ref: ...)'"
+  ref: String
+}
+
+input simple__university_dept_StaffMember__gqlv_input {
   "Use either 'id' or 'ref'; looks up an entity from the persistent data store, or if a view model, then recreates using the id as a memento of the object's state"
   id: ID
   "If object identified by 'id', then optionally specifies concrete type.  This is only required if the parameter type defines a super class"