Thanks Tom, we have implemented something very similar using the $System.License object.

Sadly, the %CSP.REST class does not exist in Caché 2013.1.6 and the Class Explorer UML tool only works in Caché 2014.1 or later. We really struggle to keep pace with upgrades to Caché as there is always a fear that something will break after an upgrade is applied. Testing to confirm everything is working as expected is a huge undertaking and requires a lot of organisation. The next opportunity to upgrade Caché will probably be around Sept-Oct 2017.

1.  Good question but I'm not fully sure I understand the design-time and runtime concepts so I'll try to explain it in different terms. If you open two Caché  objects in memory using something like ##class(MyProjectName.MyClass1).%OpenId(id1) and ##class(MyProjectName.MyClass2).%OpenId(id2) can you create an arbitrary parent-child relationship object that links the two open objects within the executing ClassMethod? The implication is that if you were then to delete the parent object, you would also delete it's children.

2. Exporting individual classes from one server to another and getting compile errors due to missing dependencies and child dependencies. The classes have been provided by another programmer but the relationships are not necessary for what I am doing. I would question why so many relationships were created but I suspect the programmer was trying to ensure that all the data and all the levels of a single global were mapped to a class property.

3. I'll initially try to keep this high-level and theoretical rather than immediately delve into working code examples. I can tell you that the classes have been created from a Global using a CacheSQLStorage strategy.

We don't have any plans to introduce new namespaces but I can see how this would be a useful feature for some people. We have 'training' and 'live' namespaces that have a one-to-one mapping with a database. It allows you to test software in a "logically partitioned" area of the production server. This setup has its quirks. When you copy a live routine into a training database you have to run a routine that essentially converts references to live namespaces and replaces them with training namespaces. Training namespaces always end in 'T'. If you forget to run this routine, you could accidentally modify the live data...

You can also get this kind of information from the cache.cpf and CSP/bin/CSP.ini files. The Write $ZV function will get your version information. You may also view the system start-up time from the cconsole.log

Maybe is obvious to people but the downside to encryption is that if you lose your encryption keys, you lose all of your encrypted data. That would be ironic if the reason you encrypted your data was to prevent data loss and theft. This fear of data loss has been the key driver for not using key-based encryption within our applications - even though there are good business reasons for doing so.

No more certificate errors. I believe the issue with the certificate is now resolved.