Release per December 30, 2020: InPlace v0.7.0
InPlace Version v0.7.0 (from now on we release InPlace versions rather than PDR versions) delivers several milestones in the project as supported by NLnet: Practical Tools to Build the Context Web.
Major changes
- Context Serialization Refinement (milestone 22). When an end user is introduced into a context for the first time, the peer doing so should compute all the deltas that built the resources that this peer is allowed to see and possibly modify, according to the model. It turned out that this requires running all queries available to such an end user. While this algorithm was implemented in the previous phase of the project, we've discovered an important omission that covers less common cases (like computing a property from two or more other properties). This requires we lift the computation from a single-typed result to a multiple-typed result.
The importance of this refinement is that without it, peers will in some cases not be informed adequately.
- Calculated Roles and Expressions as LHS of Bot Rules and Object of Perspectives (milestone 16). Currently, we can only assign a value to the named property of the object of a Perspective. If we wish to reach outside of the context, we must first define a Calculated Role and then establish a Perspective on that. This introduces a lot of names that are used just once. This extension 'inlines' such definitions, by allowing an expression following the
perspective on
clause.
- Transaction Checking Refinement (milestone 21). When a transaction arrives in the PDR, either through an automated channel or because the end user drops a serialised transaction on the user interface, all of its deltas are checked against the relevant model. The infrastructure and handling principles were established in the previous phase of the project, demonstrating the principle; however, a number of more complex and involved cases have not yet been coded to completion.
- Unlinked Roles. To accommodate roles with very large numbers of instances, we introduce the keyword
unlinked
in the language. A context instance will not have pointers to instances of its unlinked roles. Instead, a query is run on the database, fetching instances of the relevant type from the given context. unlinked
has no semantics beyond this operational meaning. It can be considered a compiler instruction, optimizing a space factor.
Minor changes
- The Invitation screen now handles both invitations with and without a role to bind to. In case there is no role, it creates a local specialisation of the Aspect role
Invitee
. Previously, the Invitee
role itself was instantiated. As there is no screen for this aspect, specialisations of Invitation such as a model:SimpleChat$Chat
or model:BrokerServices$BrokerContract
were not accessible.
- The system of indexed names contained a bug for contexts, causing such names not to be resolved property. Fixed.
Documentation
New documents have been added:
- The Operational Meaning of a Perspective. Perspectives determine how we create screens, how users can change data, how we synchronise data and how we authorise changes we receive from peers.
Updated documents: