I should be able to have a Model Property override characteristics of some of the constituent sub-Properties
Summary: This is extremely advanced, but it would be quite powerful to be able to consider Model Types to be "parameterized" like this.
The motivating use case is Spirit Island. We have several separate Review Properties, which are mostly identical except that they would ideally like different Chart Labels, and they need to have separate Rating Summarizers. It would be useful if there was some way to not have to completely redo everything for each Review Property, but instead be able to strategically override some bits.
I have no clue how this would be implemented, but it's worth thinking about. Indeed, it may even prove to be important, since the Spirit Island example points up that this issue is in the way of building properly resuable controls.
The fundamental problem is that, while we provide mechanisms for overriding the values of a Model Type, we don't have any way to override the meta-Properties inside it. Since those meta-Properties are increasingly important "parameters", that matters.
An alternate way of looking at this: could we provide a way for those inner meta-Properties to delegate "upwards"? That is, could one declare itself to be a "parameter", to be set at the containing level? Might or might not work, but it seems cognate to similar problems in traditional programming languages.
Note that we may even need a mechanism for building encapsulated Properties because of this, quite contrary to the usual rule for Querki. The example is the Rating Summarizer: while each Review Property is structurally similar, each one needs its own Summarizer -- they can't share. This may imply that, for example, the Summarizer should be embedded under the Review in the namespace. (So this particular Summarizer would be "My Review/Summary".) Unfortunately, though, this presents some real problems from an OID standpoint: Links need to go to the instantiation of the Summarizer, not the "model" Property. Indeed, there may need to be some rethink of how this all hooks together, to support that. (The Summarizer is an extreme case in terms of difficulty, but there might be other cases.)
Think about other such "reusable controls". We need a whole bunch of examples in order to tease out the issues properly.
LATER: this now works, by allowing Model Types to use Properties that are defined by the enclosing scope. Basically, when you refer to a Property inside a Model Type, if it isn't found, it will walk up the Context chain until it either finds that Property or hits a Thing.