The delta API version 2025.1 is used to store and retrieve changes to nodes. It is intended for fine-grained changes to single values. it is not intended as a bulk API that updates large chunks of the model at once.

Table of Contents

1. Conventions used in this document

  • ALL-CAPS key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP14 (RFC2119, RFC8174) when, and only when, they appear in all capitals, as shown here.

  • Footnotes refer to more discussions and rationale, but are non-normative.

2. Introduction

Delta API assumes a bidirectional communication channel. The client initiates the channel with the repository to open a participation[1]. Both parties communicate through the established channel via messages.

Delta API supports these message kinds, loosely following CQRS pattern[2][3]:

  • Queries initiated/requested by the client, with synchronous response by the repository. A query requests some information from the repository without changing the repository’s contents. The repository gathers all information needed to answer the query, and sends the information back. The repository might reply invalid queries with a failure message. We also use queries for managing participations.[4]

  • Commands initiated/requested by the client, with synchronous response by the repository. A command requests some change to the repository. The repository quickly confirms having received the command, or rejects a failed command.[5] However, the repository processes the command asynchronously, and eventually broadcasts the effect(s) as event.

  • Events initiated/broadcast by the repository, without response by the client. An event describes some change that has been applied to the repository’s contents. Events correlate to their originating command(s)[6]; this command might have been sent by this client or another client.[7] All clients receive the same events (given the same subscription scope and disregarding event sequence numbers).

A client describes the interesting part of the repository’s contents by specifying its subscription scope. The client receives only events on nodes within that scope.

A typical workflow for a client would be:

  1. Client connects to repository and starts a participation.

  2. Client subscribes to some partitions with subscription queries. The response contains a serialization chunk with the current contents of these partitions.

  3. Client initiates its editor or processing with the chunk.

  4. Client sends commands to request changes to some nodes in the subscribed partitions.

  5. Client receives events with the actual changes that have been applied to the subscribed nodes.

  6. Client updates its editor or processing with the event’s contents.

  7. Client receives events originating from other clients' commands.

  8. Client updates its editor or processing with the event’s contents.

  9. Client ends the participation.

The repository is always the ultimate arbiter of its contents.[8] It can decide to apply each command verbatim, with some tweaks (e.g. because of concurrent changes), or not at all (e.g. because the command would introduce containment loops).

Each repository might introduce its own strategy how to handle commands.[3] For example, assume client 1 sends a deleteChild command to delete node X, and then client 2 sends a setProperty command on node X.

  • Repository A applies all commands in order, thus deletes node X and ignores the second command. It emits one childDeleted event, correlated to both commands.

  • Repository B keeps an internal "trash can" of all deleted nodes. It deletes node X on the first command, but resurrects node X on the second command and changes the property as requested. It first emits a childDeleted event (correlated to the first command), but later childAdded and propertyChanged events (both correlated to the second command).

  • Repository C batches command processing. It looks at both messages together, and decides it’s more important to keep the new property value around. It emits one propertyChanged event, correlated with both commands.

A client stays up-to-date with the repository’s contents if it applies all events in order.[9] The order is defined by the event’s sequence number.[10] A client can either decide to apply its own change immediately and filter out events based on that command, or wait for the correlated event to arrive and apply the change only then.

2.1. Command overview

We specified the semantics of each command and event precisely, leading to lots of similar, but different commands/events.[11]

This table provides an overview of actions (rows) and element they apply to (columns).

Action Child Annotation Reference Property Partition / Classifier

Add

Add child

Add annotation

Add reference

Add reference ResolveInfo

Add reference target[12]

Add property

Add partition

Delete

Delete child

Delete annotation

Delete reference

Delete reference ResolveInfo

Delete reference target

Delete property

Delete partition

Change

Replace child

Replace annotation

Change reference

Change reference ResolveInfo

Change reference target

Change property

Change classifier

Move from other node

Move child from other containment

Move annotation from other parent

Move entry from other reference

Move from other feature in same node

Move child from other containment in same parent

Move entry from other reference in same parent

Move in same feature in same node

Move child in same containment

Move annotation in same parent

Move entry in same reference

Move from other node and replace existing[13]

Move child from other containment and replace existing child

Move annotation from other parent and replace existing annotation

Move entry from other reference and replace existing entry

Move from other feature in same node and replace existing[13]

Move child from other containment in same parent and replace existing child

Move entry from other reference in same parent and replace existing entry

Move in same feature in same node and replace existing[13]

Move child in same containment and replace existing child

Move annotation in same parent and replace existing annotation

Move entry in same reference and replace existing entry

Composite

Composite

3. Description

3.1. Client characteristics

A client is a program connecting to a repository. Each client has exactly one participation with one repository at one point in time. The same client can have several consecutive participations with the same repository, but never at the same time. A client might interact with several repositories, but they are completely independent (i.e. same as two clients connecting to two repositories).[1]

The client has the responsibility to guarantee uniqueness of query and command ids within the same participation.

Authentication and authorization are out of scope of this API.

3.2. Channel characteristics

Logically, the channel has independent parts for each kind of message; in practice, we might transmit some or all of them through a shared channel.

This protocol is agnostic of its underlying technical implementation. We can use any (e.g. stateless, stateful) protocol, as long as it fulfills request/response characteristics for client-initiated query, command, and participation messages, and repository-initiated broadcast characteristics for event messages.

We assume the underlying protocol handles quality of service concerns (i.e. guaranteed one-time complete delivery of messages), they are out of scope of this API.

3.3. Participation characteristics

Each participation has a participation id, unique for all concurrent participations. The repository assigns the participation id upon starting a new participation. The participation id MUST follow the same format as identifier. It serves as a technical identifier.

A participation is transparent for reconnecting network connections,i.e. one participation can survive potential technical reconnects. A participation spans over time: if we would e.g. used REST, a participation spans over several REST requests/responses.

A participation starts by the client connecting to the repository via delta protocol. A participation ends either by the client ending it, or if the client disconnects involuntarily (e.g. by crashing or a connection failure).

A client can try to reconnect a participation if the client still knows a previously valid participation id, and the last event sequence number the client received.[14]

3.4. Event sequence numbers

Each event contains a sequence number.[10] This number is a positive integer that increments by one for each consecutive event. It is unique per participation.[15]

A client SHOULD use this number to order incoming events, and check whether the client missed any event.

3.5. Subscription characteristics

The subscription, or subscription scope, is the set of partitions a participation gets events for. A subscription does not have an identity on its own; it is bound to one participation.

Scope is defined by the node id of a partition; it includes all changes to the partition and all its descendants (including annotation instances).[16]

At the start of a participation, the subscription scope is empty. A client can change its subscription scope by subscribing to newly created partitions, or subscribe / unsubscribe a specific partition. A client can change the subscription scope at any time during a participation.

A client can send commands for any node id, independent of the client’s subscription. Assume a client sends a command for a node that’s part of a partition that client is not subscribed to. The repository treats that command the same as from a client that was subscribed to the containing partition, i.e. applies it in accordance with the repository’s policy. The repository also sends out the same events to subscribed clients, thus not to the sending client.[17]

3.6. Message characteristics

Each message is atomic; it cannot be split.

Each message has some id unique to the participation:

  • Queries have a query id.

  • Commands have a command id.[18]

  • Events have command sources.[6]

Each message optionally can have one or more protocol message consisting of:[19][20]

  • kind is an identifier-compatible string identifying the message type. Some message kinds are pre-defined in this specification. A repository MAY reply with other, additional message kinds.

  • message is a human-readable string describing the message.

  • data is a flat map with arbitrary keys and values. All values MUST be strings, the keys MUST be identifier-compatible. A kind might imply presence of specific keys in data.

This protocol message is symmetric to messages in bulk API.

4. Open questions

TODO

  • Which of the commands can potentially create invalid (recursively contained) trees?

  • Hypothesis: Only moveChild / moveAnnotation commands

    A
        contains A
    A
        contains B
            contains A
    A
        contains B
            contains C
                contains A
  • Which kind of errors do we accept? How does this interact with concurrent edits? Example: Does Delete child fail if the removedChild does not exist? -→ Postpone

  • Do we need "swapNodes" event? -→ definitely not for now How different from two composed moved commands?

  • Wording for commands/events: Shall we use "deleteXxx" everywhere? Or "removeXxx"? Or "deleteXxx" for deleting nodes, and "removeXxx" for removing properties / references? -→ "delete"

  • Decide on errors marked with ? (invalid optional parameter values)[21] -→ postponed

  • How to report a command has completely been discarded, without any resulting event?[22] -→ NoOpEvent

5. Scenarios

5.1. Virgin repository, first time client connects

virginRepo
  1. Client signs on to repository.

  2. Repository confirms participation with participation id client-a.

  3. Client initiates new partition.

  4. Client sends Add partition command with nodeA payload (details omitted) and command id cmd-1.

  5. Repository registers command for processing.

  6. Repository acknowledges reception of command with id cmd-1.

  7. Repository updates internal representation.

  8. Repository creates event for update.

  9. Repository emits event Partition added with nodeA payload and sequence number 1. It includes one CommandSource with value (client-a, cmd-1)

  10. Client receives event and forwards information to editor.

  11. Client draws nodeA.

5.2. Client reconnects to known partition

reconnectKnownPartition
  1. Client knows the relevant partition, wants to subscribe.

  2. Client sends Subscribe to partition query with partition node id partition-id.

  3. Repository retrieves all contents of partition with node id partition-id.

  4. Repository found contents.

  5. Repository responds to query with id qry-1 with contents of 3 nodes: partitionNode, childNodeA, childNodeB (details omitted).

  6. Client receives query result and forwards information to editor.

  7. Client draws childNodeA and childNodeB. partitionNode is not drawn, it represents the canvas.

5.3. Client changes known node with remote update

changeKnownNodeRemoteUpdate
  1. User enters new property value.

  2. Client editor forwards user action into command.

  3. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  4. Repository registers command for processing.

  5. Repository acknowledges reception of command with id cmd-1.

  6. Client informs editor of command submission.

  7. Repository updates internal representation.

  8. Repository creates event for update.

  9. Repository emits event Property added with nodeA node id, age property (details omitted), 23 value and sequence number 1. It includes one CommandSource with value (client-a, cmd-1)

  10. Client receives event and forwards information to editor.

  11. Client updates nodeA with new property value.

5.4. Client changes known node with local update

changeKnownNodeLocalUpdate
  1. User enters new property value.

  2. Client updates nodeA with new property value.

  3. Client editor forwards user action into command.

  4. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  5. Repository registers command for processing.

  6. Repository acknowledges reception of command with id cmd-1.

  7. Client registers processed command id cmd-1.

  8. Repository updates internal representation.

  9. Repository creates event for update.

  10. Repository emits event Property added with nodeA node id, age property (details omitted), 23 value and sequence number 1. It includes one CommandSource with value (client-a, cmd-1)

  11. Client found a matching registered processed command id.

  12. Client unregisters processed command id cmd-1, and does NOT forward information to editor — the event originates from this client, thus has already been processed.

  13. Another client sends Add property command with command id cmd-x (other parameters omitted).

  14. Repository updates internal representation.

  15. Repository creates event for update.

  16. Repository emits event Property added with sequence number 2 (other parameters omitted). It includes one CommandSource with value (other-client, cmd-x)

  17. Client did not find any matching registered processed command id.

  18. Client forwards information to editor.

  19. Client updates with new property value.

5.5. Client tries to change unknown node with failed command

changeUnknownNodeFailedCommand
  1. User enters new property value on node nodeA that’s known to the editor.

  2. Client editor forwards user action into command.

  3. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  4. Repository checks whether it knows a node with id nodeA.

  5. Repository doesn’t know that node.

  6. Repository refuses command.

  7. Client informs editor of failed command.

  8. Client informs user.

5.6. Client tries to change unknown node with failed event

changeUnknownNodeFailedEvent
  1. User enters new property value on node nodeA that’s known to the editor.

  2. Client editor forwards user action into command.

  3. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  4. Repository registers command for processing.

  5. Repository acknowledges reception of command with id cmd-1.

  6. Client registers processed command id cmd-1.

  7. Client informs editor of command submission.

  8. Repository realizes it does not know a node with id nodeA

  9. Repository creates event for notification.

  10. Repository emits Error event with unknownNode error code, cannot add property to unknown node message and sequence number 1. It includes one CommandSource with value (client-a, cmd-1).

  11. Client removes cmd-1 from open commands list.

5.7. Client with remote update changes property to same value as it already has

changeSameValueRemoteUpdate
  1. User enters changed property value that’s the same value as the old value.

  2. Client editor forwards user action into command.

  3. Client sends Change property command with nodeA node id, age property (details omitted), 23 old value, 23 new value and command id cmd-1.

  4. Repository registers command for processing.

  5. Repository acknowledges reception of command with id cmd-1.

  6. Client registers processed command id cmd-1.

  7. Client informs editor of command submission.

  8. Repository determines no change to internal representation.

  9. Repository creates event for notification.

  10. Repository emits No-op event with CommandSource with value (client-a, cmd-1) and sequence number 1.

  11. Client removes cmd-1 from open commands list.

5.8. Repository has bug, needs to tell client it couldn’t apply its commands

repositoryBug
  1. User enters new property value on node nodeA that’s known to the editor.

  2. Client editor forwards user action into command.

  3. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  4. Repository registers command for processing.

  5. Repository acknowledges reception of command with id cmd-1.

  6. Client registers processed command id cmd-1.

  7. Client informs editor of command submission.

  8. Repository tries to update internal representation. Some error occurs (e.g. database unavailable).

  9. Repository handles the error.

  10. Repository creates event for notification.

  11. Repository emits Error event with internalError error code, internal error occurred message and sequence number 1. It includes one CommandSource with value (client-a, cmd-1).

  12. Client removes cmd-1 from open commands list.

5.9. Concurrent changes to known node with local update

concurrentChangeLocalUpdate
  1. User enters new property value.

  2. Client updates nodeA with new property value.

  3. Client editor forwards user action into command.

  4. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  5. Repository registers command for processing.

  6. Repository acknowledges reception of command with id cmd-1.

  7. Client registers processed command id cmd-1.

  8. Another client sends Add property command nodeA node id, age property (details omitted), 42 value and command id cmd-x.

  9. Repository resolves concurrent updates t nodeA, age property with "last write wins" strategy. Repository updates internal representation with value 42.

  10. Repository creates event for update.

  11. Repository emits event Property added with nodeA node id, age property (details omitted), 23 value and sequence number 1. It includes one CommandSource with values (client-a, cmd-1) and (other-client, cmd-x).

  12. Client found a matching registered processed command id.

  13. Client unregisters processed command id cmd-1.

  14. Not all command sources could be matched against registered processed command ids. Client forwards information to editor.

  15. Client updates with new property value.

5.10. Concurrent changes to known node with remote update

concurrentChangeRemoteUpdate
  1. User enters new property value.

  2. Client editor forwards user action into command.

  3. Client sends Add property command with nodeA node id, age property (details omitted), 23 value and command id cmd-1.

  4. Repository registers command for processing.

  5. Repository acknowledges reception of command with id cmd-1.

  6. Client informs editor of command submission.

  7. Another client sends Add property command nodeA node id, age property (details omitted), 42 value and command id cmd-x.

  8. Repository resolves concurrent updates t nodeA, age property with "last write wins" strategy. Repository updates internal representation with value 42.

  9. Repository creates event for update.

  10. Repository emits event Property added with nodeA node id, age property (details omitted), 23 value and sequence number 1. It includes one CommandSource with values (client-a, cmd-1) and (other-client, cmd-x).

  11. Client receives event and forwards information to editor.

  12. Client updates nodeA with new property value.

6. Messages

6.1. Parameter types

protocolMessages

Optional protocol messages.

TargetNode

Target’s node as id.

MetaPointer

MetaPointer-tuple to describe an M2 element (classifier, feature, etc.). Encoded as meta-pointer.

PropertyValue

Property value encoded as property value.

ResolveInfo

ResolveInfo of a reference as string. Can be null.

Index

Position inside a multiple link or annotations as integer >= 0. Cannot be null. Use value 0 for single links.

Command

Any command.

CommandId

Id of a command.[18] Same format as identifiers; must be unique per participation.

QueryId

Id of a query. Same format as identifiers; must be unique per participation.

SerializationChunk

Chunk of nodes.

Event

Any event.

ParticipationId

Id of a participation. Same format as identifiers; must be unique for all concurrent participations.

CommandSource

(ParticipationId, CommandId) tuple[6] this event is based on. This allows a client to know when its command has been processed (either successful or not).

EventSequenceNumber

event sequence number of this event.

FreeId

Free node id.

DeltaProtocolVersion

Version of the delta protocol, e.g. 2025.1.

boolean

A boolean value, i.e. either true or false.

integer type

An integer value.

6.1.1. How to address references

We refer to references by the tuple of (parent, reference, index). Rationale: Both reference target and resolveInfo can be null, so they aren’t suitable for identifying the reference. However, target and resolveInfo MUST NOT both be null.

6.2. Errors

6.2.1. Invalid participation

The participation the client uses to communicate with the repository is not valid.

Possible reasons:

Technical name

invalidParticipation

6.2.2. Node already exists

Client tries to create a node with an id that already exists.

Technical name

nodeAlreadyExists

6.2.3. Unknown node

Client tries to operate on a node unknown to the repository.

Technical name

unknownNode

6.2.4. Unknown index

Client tries to operate on an index beyond the number of existing elements.

Technical name

unknownIndex

6.2.5. Entry at index is not the given entry

Client provided an entry (either a node or a target/resolveInfo) and an index, but the entry is not at the given index.

Technical name

indexNodeMismatch

6.2.6. Move without parent

Client tries to move a node that doesn’t have a parent.

Technical name

moveWithoutParent

6.2.7. Invalid move

Client tries to move a node incompatible with the emitted command.

Technical name

invalidMove

6.2.8. Undefined reference target

Client tries to set a reference with neither target nor resolveInfo

Technical name

undefinedReferenceTarget

6.3. Queries

6.3.1. Subscription

6.3.1.1. Subscribe to partition changes

This client wants to receive events on newly created (creation is true) or deleted (deletion is true) partitions, and automatically subscribe (partitions is true) to newly created partitions.[23]

Request parameters
creation

boolean Whether this client wants to receive events on newly created partitions (true), or not (false).

deletion

boolean Whether this client wants to receive events on deleted partitions (true), or not (false).

partitions

boolean Whether this client wants to automatically subscribe to newly created partitions (true), or not (false).

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Technical name

SubscribeToChangingPartitions

6.3.1.2. Subscribe to partition

This client wants to receive events on any changes to partition or any of its descendants.[24][16]

Request parameters
partition

TargetNode Node id of the partition this client wants to receive events of.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
contents

SerializationChunk Complete contents of partition, i.e. the node with id partition and all of its descendants (including annotation instances).

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Errors
Technical name

SubscribeToPartitionContents

6.3.1.3. Unsubscribe from partition

This client does not want to receive events on any changes to partition or any of its descendants anymore.[24]

Request parameters
partition

TargetNode Node id of the partition this client wants to stop receiving events of.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Errors
Technical name

UnsubscribeFromPartitionContents

6.3.2. Participation

Even though participation handling does not relate to repository contents, we consider them queries.[4].

6.3.2.1. Sign On (start a participation)

The client starts a participation.

Note
signing on is not the same as logging in: The latter includes some authentication/authorization check, which is out of scope of this specification.
Request parameters
deltaProtocolVersion

DeltaProtocolVersion

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
participationId

ParticipationId the repository assigns to this participation.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Errors
  • Unsupported delta protocol version

Technical name

SignOn

6.3.2.2. Sign Off (end a participation)

The client ends a participation.[25]

Note
signing off is not the same as logging off: The latter includes some authentication/authorization invalidation, which is out of scope of this specification.
Request parameters
queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Technical name

SignOff

6.3.2.3. Reconnect (resume an existing participation)

The client has been technically disconnected, but still knows its participation id. Then the client can ask to reconnect to the repository.[14]

Request parameters
participationId

ParticipationId The previously used participation id.

lastReceivedSequenceNumber

EventSequenceNumber Last event sequence number received by the client.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
lastSentSequenceNumber

EventSequenceNumber Last event sequence number sent by the repository.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Errors
Technical name

Reconnect

6.3.3. Miscellaneous

6.3.3.1. Get available ids

Request count number of unused valid ids.

Same functionality as bulk API ids command.

We don’t assume leases, i.e. ids handed out to one client are "owned" by that client forever.

Request parameters
count

integer type Number of ids requested.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
ids

FreeId[] List of ids guaranteed to be free. The repository MUST return between one (inclusive) and count (inclusive) ids. It MAY return less than count ids.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Technical name

GetAvailableIds

6.3.3.2. List partitions

Lists all non-language partitions accessible in the repository.[27]

Same functionality as bulk API listPartitions command.

Request parameters
queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Response parameters
partitions

SerializationChunk All accessible Partitions in the Repository. The partitions are sent as complete nodes. Does NOT include any children or annotations of the root partition nodes. Does NOT include Languages or partition children/annotations.

queryId

QueryId Id of this query.

protocolMessages

protocolMessages

Technical name

ListPartitions

6.4. Command — event pairs overview

legend
Diagram legend

6.4.1. Partitions

Command / Event / Description Before After

Add newPartition node as new partition.

nothing

addPartition

Delete partition deletedPartition.

deletePartition

nothing

6.4.2. Nodes

Command / Event / Description Before After

Change classifier of node from oldClassifier to newClassifier.

changeClassifier before
changeClassifier after

6.4.3. Properties

Command / Event / Description Before After

Add newValue as value of property property to node.

addProperty before
addProperty after

Delete existing property with oldValue from node.

deleteProperty before
deleteProperty after

Change existing property of node from oldValue to newValue.

changeProperty before
changeProperty after

6.4.4. Children

Command / Event / Description Before After

Add new node newChild to parent in containment at index.

addChild before
addChild after

Delete existing node deletedChild from parent's containment at index.

deleteChild before
deleteChild after

Replace existing node replacedChild inside parent's containment at index with new node newChild. Delete replacedChild.

replaceChild before
replaceChild after

Move existing node movedChild (currently inside oldParent's oldContainment at oldIndex) inside newParent's newContainment at newIndex.

moveChildFromOtherContainment before
moveChildFromOtherContainment after

Move existing node movedChild (currently inside parent's oldContainment at oldIndex) inside parent's newContainment at newIndex.

moveChildFromOtherContainmentInSameParent before
moveChildFromOtherContainmentInSameParent after

Move existing node movedChild (currently inside parent's containment at oldIndex) inside parent's containment at newIndex.

moveChildInSameContainment before
moveChildInSameContainment after

Move existing node movedChild (currently inside oldParent's oldContainment at oldIndex) inside newParent's newContainment at newIndex, replacing replacedChild that was previously inside newParent's newContainment at newIndex.

moveAndReplaceChildFromOtherContainment before
moveAndReplaceChildFromOtherContainment after

Move existing node movedChild (currently inside parent's oldContainment at oldIndex) inside parent's newContainment at newIndex, replacing replacedChild that was previously inside parent's newContainment at newIndex.

moveAndReplaceChildFromOtherContainmentInSameParent before
moveAndReplaceChildFromOtherContainmentInSameParent after

Move existing node movedChild (currently inside parent's containment at oldIndex) inside parent's containment at newIndex, replacing replacedChild that was previously inside parent's containment at newIndex.

moveAndReplaceChildInSameContainment before
moveAndReplaceChildInSameContainment after

6.4.5. Annotations

Command / Event / Description Before After

Add new node newAnnotation to parent's annotations at index.

addAnnotation before
addAnnotation after

Delete existing node deletedAnnotation from parent's annotations at index.

deleteAnnotation before
deleteAnnotation after

Replace existing node replacedAnnotation inside parent's annotations at index with new node newAnnotation. Delete replacedAnnotation.

replaceAnnotation before
replaceAnnotation after

Move existing node movedAnnotation (currently inside oldParent's annotations at oldIndex) inside newParent's annotations at newIndex.

moveAnnotationFromOtherParent before
moveAnnotationFromOtherParent after

Move existing node movedAnnotation (currently inside parent's annotations at oldIndex) inside parent's annotations at newIndex.

moveAnnotationInSameParent before
moveAnnotationInSameParent after

Move existing node movedAnnotation (currently inside oldParent's annotations at oldIndex) inside newParent's annotations at newIndex, replacing replacedAnnotation that was previously inside newParent's annotations at newIndex.

moveAndReplaceAnnotationFromOtherParent before
moveAndReplaceAnnotationFromOtherParent after

Move existing node movedAnnotation (currently inside parent's annotations at oldIndex) inside parent's annotations at newIndex, replacing replacedAnnotation that was previously inside parent's annotations at newIndex.

moveAndReplaceAnnotationInSameParent before
moveAndReplaceAnnotationInSameParent after

6.4.6. References

Command / Event / Description Before After

Add newTarget / newResolveInfo to parent's reference at index.

addReference before
addReference after

Delete existing deletedTarget/deletedResolveInfo from parent's reference at index.

deleteReference before
deleteReference after

Replace existing replacedTarget/replacedResolveInfo inside parent's reference at index with newTarget/newResolveInfo.

changeReference before
changeReference after

Move existing target/resolveInfo (currently inside oldParent's oldReference at oldIndex) to newParent's newReference at newIndex.

moveEntryFromOtherReference before
moveEntryFromOtherReference after

Move existing movedTarget/movedResolveInfo (currently inside parent's oldReference at oldIndex) to parent's newReference at newIndex.

moveEntryFromOtherReferenceInSameParent before
moveEntryFromOtherReferenceInSameParent after

Move existing movedTarget/movedResolveInfo (currently inside parent's reference at oldIndex) inside parent's reference at newIndex.

moveEntryInSameReference before
moveEntryInSameReference after

Move existing movedTarget/movedResolveInfo (currently inside oldParent's oldReference at oldIndex) to newParent's newReference at newIndex, replacing replacedTarget/replacedResolveInfo that was previously inside newParent's newReference at newIndex.

moveAndReplaceEntryFromOtherReference before
moveAndReplaceEntryFromOtherReference after

Move existing movedTarget/movedResolveInfo (currently inside parent's oldReference at oldIndex) to parent's newReference at newIndex, replacing replacedTarget/replacedResolveInfo that was previously inside parent's newReference at newIndex.

moveAndReplaceEntryFromOtherReferenceInSameParent before
moveAndReplaceEntryFromOtherReferenceInSameParent after

Move existing movedTarget/movedResolveInfo (currently inside parent's reference at oldIndex) inside parent's reference at newIndex, replacing replacedTarget/replacedResolveInfo that was previously inside parent's reference at newIndex.

moveAndReplaceEntryInSameReference before
moveAndReplaceEntryInSameReference after

Add newResolveInfo as ResolveInfo to existing entry inside parent's reference at index with target.

addReferenceResolveInfo before
addReferenceResolveInfo after

Delete existing deletedResolveInfo as ResolveInfo from existing entry inside parent's reference at index with target.

deleteReferenceResolveInfo before
deleteReferenceResolveInfo after

Change ResolveInfo of existing entry inside parent's reference at index from oldResolveInfo to newResolveInfo.

changeReferenceResolveInfo before
changeReferenceResolveInfo after

Add newTarget as target to existing entry inside parent's reference at index with resolveInfo.

addReferenceTarget before
addReferenceTarget after

Delete existing deletedTarget as target from existing entry inside parent's reference at index with resolveInfo.

deleteReferenceTarget before
deleteReferenceTarget after

Change target of existing entry inside parent's reference at index with resolveInfo from oldTarget to newTarget.

changeReferenceTarget before
changeReferenceTarget after

6.5. Commands

6.5.1. Lifecycle

commandsLifecycle

6.5.2. Partitions

6.5.2.1. Add partition

Add newPartition node as new partition.

Before After

nothing

addPartition
Parameters
newPartition

SerializationChunk[28] root node to form a new partition. The root node MUST NOT contain a parent (as this is a partition, thus cannot have a parent). All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[28]

commandId

CommandId Id of this command.

protocolMessages

protocolMessages

Technical name

AddPartition

Related event

Partition added

6.5.2.2. Delete partition

Delete partition deletedPartition, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
deletePartition

nothing

Parameters
deletedPartition

TargetNode

commandId

CommandId Id of this command.

protocolMessages

protocolMessages

Technical name

DeletePartition

Related event

Partition deleted

6.5.3. Nodes

6.5.3.1. Change classifier

Change classifier of node to newClassifier.

Before After
changeClassifier before
changeClassifier after
Parameters
node

TargetNode

newClassifier

MetaPointer

commandId

CommandId Id of this command.

protocolMessages

protocolMessages

Technical name

ChangeClassifier

Related event

Classifier changed

6.5.4. Properties

6.5.4.1. Add property

Add newValue as value of property property to node.

Before After
addProperty before
addProperty after
Parameters
node

TargetNode

property

MetaPointer

newValue

PropertyValue

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

AddProperty

Related event

Property added

6.5.4.2. Delete property

Delete existing property from node.

Before After
deleteProperty before
deleteProperty after
Parameters
node

TargetNode

property

MetaPointer

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

DeleteProperty

Related event

Property deleted

6.5.4.3. Change property

Change existing property of node to newValue.

Before After
changeProperty before
changeProperty after
Parameters
node

TargetNode

property

MetaPointer

newValue

PropertyValue

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

ChangeProperty

Related event

Property changed

6.5.5. Children

6.5.5.1. Add child

Add new node newChild to parent in containment at index. newChild might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[28]

Before After
addChild before
addChild after
Parameters
parent

TargetNode

newChild

SerializationChunk

containment

MetaPointer

index

Index

commandId

CommandId

protocolMessages

protocolMessages

Technical name

AddChild

Related event

Child added

6.5.5.2. Delete child

Delete existing node deletedChild[30] from parent's containment at index, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
deleteChild before
deleteChild after
Parameters
parent

TargetNode

containment

MetaPointer

index

Index

deletedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

DeleteChild

Related event

Child deleted

6.5.5.3. Replace child

Delete current child replacedChild[30] inside parent's containment at index, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Replace existing node replacedChild inside parent's containment at index with new node newChild. newChild might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[28]

Before After
replaceChild before
replaceChild after
Parameters
newChild

SerializationChunk

parent

TargetNode

containment

MetaPointer

index

Index

replacedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

ReplaceChild

Related event

Child replaced

6.5.5.4. Move child from other containment

Move existing node movedChild inside newParent's newContainment at newIndex.

Before After
moveChildFromOtherContainment before
moveChildFromOtherContainment after
Parameters
newParent

TargetNode

newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

MoveChildFromOtherContainment

6.5.5.5. Move child from other containment in same parent

Move existing node movedChild (currently inside one of movedChild's parent’s containments other than newContainment) inside movedChild's parent’s newContainment at newIndex.

Before After
moveChildFromOtherContainmentInSameParent before
moveChildFromOtherContainmentInSameParent after
Parameters
newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

MoveChildFromOtherContainmentInSameParent

6.5.5.6. Move child in same containment

Move existing node movedChild within its current containment to newIndex.

Before After
moveChildInSameContainment before
moveChildInSameContainment after
Parameters
newIndex

Index

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

MoveChildInSameContainment

6.5.5.7. Move child from other containment and replace existing child

Move existing node movedChild inside newParent's newContainment at newIndex. Delete current child replacedChild[30] inside newParent's newContainment at newIndex, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
moveAndReplaceChildFromOtherContainment before
moveAndReplaceChildFromOtherContainment after
Parameters
newParent

TargetNode

newContainment

MetaPointer

newIndex

Index

replacedChild

TargetNode

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceChildFromOtherContainment

6.5.5.8. Move child from other containment in same parent and replace existing child

Move existing node movedChild (currently inside one of movedChild's parent’s containments other than newContainment) inside movedChild's parent’s newContainment at newIndex. Delete current child replacedChild[30] inside movedChild's parent’s newContainment at newIndex, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
moveAndReplaceChildFromOtherContainmentInSameParent before
moveAndReplaceChildFromOtherContainmentInSameParent after
Parameters
newContainment

MetaPointer

newIndex

Index

replacedChild

TargetNode

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceChildFromOtherContainmentInSameParent

6.5.5.9. Move child in same containment and replace existing child

Move existing node movedChild within its current containment to newIndex. Delete current child replacedChild[30] inside the same containment at newIndex, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
moveAndReplaceChildInSameContainment before
moveAndReplaceChildInSameContainment after
Parameters
newIndex

Index

replacedChild

TargetNode

movedChild

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceChildInSameContainment

6.5.6. Annotations

6.5.6.1. Add annotation

Add new node newAnnotation to parent's annotations at index. newAnnotation might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[28]

Before After
addAnnotation before
addAnnotation after
Parameters
parent

TargetNode

newAnnotation

SerializationChunk

index

Index

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

AddAnnotation

Related event

Annotation added

6.5.6.2. Delete annotation

Delete existing node deletedAnnotation[30] from parent's annotations at index, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
deleteAnnotation before
deleteAnnotation after
Parameters
parent

TargetNode

index

Index

deletedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

DeleteAnnotation

Related event

Annotation deleted

6.5.6.3. Replace annotation

Delete current node replacedAnnotation[30] at parent's annotations at index, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Replace existing node replacedAnnotation inside parent's annotations at index with new node newAnnotation. newAnnotation might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[28]

Before After
replaceAnnotation before
replaceAnnotation after
Parameters
newAnnotation

SerializationChunk

parent

TargetNode

index

Index

replacedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

ReplaceAnnotation

Related event

Annotation replaced

6.5.6.4. Move annotation from other parent

Move existing node movedAnnotation inside newParent's annotations at newIndex.

Before After
moveAnnotationFromOtherParent before
moveAnnotationFromOtherParent after
Parameters
newParent

TargetNode

newIndex

Index

movedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

MoveAnnotationFromOtherParent

6.5.6.5. Move annotation in same parent

Move existing node movedAnnotation within the same parent to newIndex.

Before After
moveAnnotationInSameParent before
moveAnnotationInSameParent after
Parameters
newIndex

Index

movedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

MoveAnnotationInSameParent

6.5.6.6. Move annotation from other parent and replace existing annotation

Move existing node movedAnnotation inside newParent's annotations at newIndex. Delete current node replacedAnnotation[30] at newParent's annotations at newIndex, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
moveAndReplaceAnnotationFromOtherParent before
moveAndReplaceAnnotationFromOtherParent after
Parameters
newParent

TargetNode

newIndex

Index

replacedAnnotation

TargetNode

movedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceAnnotationFromOtherParent

6.5.6.7. Move annotation in same parent and replace existing annotation

Move existing node movedAnnotation within the same parent to newIndex. Delete current node replacedAnnotation[30] at movedAnnotation's parent’s annotations at newIndex, and all its descendants (including annotation instances). Does NOT change references to any of the deleted nodes.[29]

Before After
moveAndReplaceAnnotationInSameParent before
moveAndReplaceAnnotationInSameParent after
Parameters
newIndex

Index

replacedAnnotation

TargetNode

movedAnnotation

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceAnnotationInSameParent

6.5.7. References

6.5.7.1. Add reference
Before After
addReference before
addReference after
Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newTarget

TargetNode?

newResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

AddReference

Related event

Reference added

6.5.7.2. Delete reference

Delete existing entry deletedTarget/deletedResolveInfo[30] from parent's reference at index.

Before After
deleteReference before
deleteReference after
Parameters
parent

TargetNode

reference

MetaPointer

index

Index

deletedTarget

TargetNode?

deletedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

DeleteReference

Related event

Reference deleted

6.5.7.3. Change reference

Replace existing entry oldTarget/oldResolveInfo[30] inside parent's reference at index with newTarget/newResolveInfo.

Before After
changeReference before
changeReference after
Parameters
parent

TargetNode

reference

MetaPointer

index

Index

oldTarget

TargetNode?

oldResolveInfo

ResolveInfo?

newTarget

TargetNode?

newResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

ChangeReference

Related event

Reference changed

6.5.7.4. Move entry from other reference
Before After
moveEntryFromOtherReference before
moveEntryFromOtherReference after
Parameters
newParent

TargetNode

newReference

MetaPointer

newIndex

Index

oldParent

TargetNode

oldReference

MetaPointer

oldIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveEntryFromOtherReference

6.5.7.5. Move entry from other reference in same parent
Before After
moveEntryFromOtherReferenceInSameParent before
moveEntryFromOtherReferenceInSameParent after
Parameters
parent

TargetNode

newReference

MetaPointer

newIndex

Index

oldReference

MetaPointer

oldIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveEntryFromOtherReferenceInSameParent

6.5.7.6. Move entry in same reference

Move existing entry movedTarget/movedResolveInfo[30] inside parent's reference at oldIndex inside parent's reference at newIndex.

Before After
moveEntryInSameReference before
moveEntryInSameReference after
Parameters
parent

TargetNode

reference

MetaPointer

oldIndex

Index

newIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveEntryInSameReference

6.5.7.7. Move entry from other reference and replace existing entry
Before After
moveAndReplaceEntryFromOtherReference before
moveAndReplaceEntryFromOtherReference after
Parameters
newParent

TargetNode

newReference

MetaPointer

newIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

oldParent

TargetNode

oldReference

MetaPointer

oldIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceEntryFromOtherReference

6.5.7.8. Move entry from other reference in same parent and replace existing entry
Before After
moveAndReplaceEntryFromOtherReferenceInSameParent before
moveAndReplaceEntryFromOtherReferenceInSameParent after
Parameters
parent

TargetNode

newReference

MetaPointer

newIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

oldReference

MetaPointer

oldIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceEntryFromOtherReferenceInSameParent

6.5.7.9. Move entry in same reference and replace existing entry

Move existing entry movedTarget/movedResolveInfo[30] inside parent's reference at oldIndex inside parent's reference at newIndex, replacing existing entry replacedTarget/replacedResolveInfo[30] in parent's reference at newIndex.

Before After
moveAndReplaceEntryInSameReference before
moveAndReplaceEntryInSameReference after
Parameters
parent

TargetNode

reference

MetaPointer

oldIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

newIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

commandId

CommandId

protocolMessages

protocolMessages

Technical name

MoveAndReplaceEntryInSameReference

6.5.7.10. Add reference ResolveInfo

Add newResolveInfo as ResolveInfo to existing entry target[30] inside parent's reference at index.

Before After
addReferenceResolveInfo before
addReferenceResolveInfo after

Current target MUST NOT be null as we can only add ResolveInfo if ResolveInfo is null, and at least one of target and ResolveInfo MUST always be non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

target

TargetNode

newResolveInfo

ResolveInfo

commandId

CommandId

protocolMessages

protocolMessages

Technical name

AddReferenceResolveInfo

6.5.7.11. Delete reference ResolveInfo

Delete existing deletedResolveInfo from existing entry target[30] inside parent's reference at index.

Before After
deleteReferenceResolveInfo before
deleteReferenceResolveInfo after

Current target MUST NOT be null as we’re about to remove ResolveInfo, and at least one of target and ResolveInfo MUST always be non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

target

TargetNode

deletedResolveInfo

ResolveInfo

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

DeleteReferenceResolveInfo

6.5.7.12. Change reference ResolveInfo

Change oldResolveInfo of existing entry target[30] inside parent's reference at index to newResolveInfo.

Before After
changeReferenceResolveInfo before
changeReferenceResolveInfo after

Current target MAY be null as we can only change ResolveInfo if both current ResolveInfo and newResolveInfo is non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

target

TargetNode?

oldResolveInfo

ResolveInfo

newResolveInfo

ResolveInfo

commandId

CommandId

protocolMessages

protocolMessages

Errors
Technical name

ChangeReferenceResolveInfo

6.5.7.13. Add reference target

Add newTarget as target to existing entry resolveInfo[30] inside parent's reference at index.

Before After
addReferenceTarget before
addReferenceTarget after

Current ResolveInfo MUST NOT be null as we can only add target if target is null, and at least one of target and ResolveInfo MUST always be non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

resolveInfo

ResolveInfo

newTarget

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

AddReferenceTarget

Related event

Reference target added

6.5.7.14. Delete reference target

Delete existing deletedTarget from existing entry resolveInfo[30] inside parent's reference at index.

Before After
deleteReferenceTarget before
deleteReferenceTarget after

Current ResolveInfo MUST NOT be null as we’re about to remove target, and at least one of target and ResolveInfo MUST always be non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

deletedTarget

TargetNode

resolveInfo

ResolveInfo

commandId

CommandId

protocolMessages

protocolMessages

Technical name

DeleteReferenceTarget

Related event

Reference target deleted

6.5.7.15. Change reference target

Change oldTarget of existing entry resolveInfo[30] inside parent's reference at index to newTarget.

Before After
changeReferenceTarget before
changeReferenceTarget after

Current ResolveInfo MAY be null as we can only change target if both current Target and newTarget is non-null.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

oldTarget

TargetNode

resolveInfo

ResolveInfo?

newTarget

TargetNode

commandId

CommandId

protocolMessages

protocolMessages

Technical name

ChangeReferenceTarget

Related event

Reference target changed

6.5.8. Composite

6.5.8.1. Composite

Groups several commands into a logical group.[31] The parts are ordered.

Command groups don’t guarantee anything; the repository MAY take the group as a hint to resolve conflicts in a different manner.

Composite commands have a command id on their own.[32] We can nest composite commands arbitrarily.[33]

Parameters
parts

Command[]

protocolMessages

protocolMessages

Errors
Technical name

CompositeCommand

Related event

Composite

6.6. Events

6.6.1. Partitions

6.6.1.1. Partition added

Partition newPartition has been added to the repository.

This client is now subscribed to any changes to newPartition or any of its descendants.

Parameters
newPartition

SerializationChunk

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

PartitionAdded

Related command

Add partition

6.6.1.2. Partition deleted

Partition deletedPartition, and all its deletedDescendants[34], have been deleted from the repository.

This client is now unsubscribed from any changes to deletedPartition or any of its descendants.

Parameters
deletedPartition

TargetNode

deletedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

PartitionDeleted

Related command

Delete partition

6.6.2. Nodes

6.6.2.1. Classifier changed

Classifier of node has been changed from oldClassifier to newClassifier.

Parameters
node

TargetNode

newClassifier

MetaPointer

oldClassifier

MetaPointer

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ClassifierChanged

Related command

Change classifier

6.6.3. Properties

6.6.3.1. Property added

property of node has been set to newValue.

Parameters
node

TargetNode

property

MetaPointer

newValue

PropertyValue

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

PropertyAdded

Related command

Add property

6.6.3.2. Property deleted

Existing property of node with oldValue has been deleted.

Parameters
node

TargetNode

property

MetaPointer

oldValue

PropertyValue

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

PropertyDeleted

Related command

Delete property

6.6.3.3. Property changed

Existing property of node has been changed from oldValue to newValue.

Parameters
node

TargetNode

property

MetaPointer

newValue

PropertyValue

oldValue

PropertyValue

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

PropertyChanged

Related command

Change property

6.6.4. Children

6.6.4.1. Child added

New node newChild has been added to parent's containment at index. newChild might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[35]

All other children inside parent's containment with index >= index have been moved to next higher index.

Parameters
parent

TargetNode

newChild

SerializationChunk

containment

MetaPointer

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildAdded

Related command

Add child

6.6.4.2. Child deleted

Existing node deletedChild, and all its deletedDescendants[34], have been deleted from parent's containment at index.[36] All other children inside parent's containment with index > index have been moved to next lower index.

Parameters
deletedChild

TargetNode

deletedDescendants

TargetNode[]

parent

TargetNode

containment

MetaPointer

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildDeleted

Related command

Delete child

6.6.4.3. Child replaced

Existing node replacedChild, and all its replacedDescendants[34], inside parent's containment at index has been replaced with new node newChild. newChild might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[35]

replacedChild, and all its descendants, have been deleted.

Parameters
newChild

SerializationChunk

replacedChild

TargetNode

replacedDescendants

TargetNode[]

parent

TargetNode

containment

MetaPointer

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildReplaced

Related command

Replace child

6.6.4.4. Child moved from other containment

Existing node movedChild (previously inside oldParent's oldContainment at oldIndex) has been moved inside newParent's newContainment at newIndex.

All other children inside oldParent's oldContainment with index > oldIndex have been moved to next lower index.

All other children inside newParent's newContainment with index >= newIndex have been moved to next higher index.

Parameters
newParent

TargetNode

newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

oldParent

TargetNode

oldContainment

MetaPointer

oldIndex

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedFromOtherContainment

6.6.4.5. Child moved from other containment in same parent

Existing node movedChild (previously inside parent's oldContainment at oldIndex) has been moved inside parent's newContainment at newIndex.

All other children inside parent's oldContainment with index > oldIndex have been moved to next lower index.

All other children inside parent's newContainment with index >= newIndex have been moved to next higher index.

Parameters
newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

parent

TargetNode

oldContainment

MetaPointer

oldIndex

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedFromOtherContainmentInSameParent

6.6.4.6. Child moved in same containment

Existing node movedChild (previously inside parent's containment at oldIndex) has been moved inside parent's containment at newIndex.

If oldIndex < newIndex: All other children inside parent's containment with previous index > oldIndex and previous index ⇐ newIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] F[6]

If oldIndex > newIndex: All other children inside parent's containment with previous index >= newIndex and previous index < oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=1: A[0] X[1] B[2] C[3] D[4] E[5] F[6]

oldIndex MUST NOT be equal to newIndex.

Parameters
newIndex

Index

movedChild

TargetNode

parent

TargetNode

containment

MetaPointer

oldIndex

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedInSameContainment

6.6.4.7. Child moved from other containment and replaced existing child

Existing node movedChild (previously inside oldParent's oldContainment at oldIndex) has replaced the existing replacedChild inside newParent's newContainment at newIndex. replacedChild, and all its replacedDescendants[34], have been deleted.

All other children inside oldParent's oldContainment with index > oldIndex have been moved to next lower index.

No other children inside newParent's newContainment have been moved.

Parameters
newParent

TargetNode

newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

oldParent

TargetNode

oldContainment

MetaPointer

oldIndex

Index

replacedChild

TargetNode

replacedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedAndReplacedFromOtherContainment

6.6.4.8. Child moved from other containment in same parent and replaced existing child

Existing node movedChild (previously inside parent's oldContainment at oldIndex) has replaced the existing replacedChild inside parent's newContainment at newIndex. replacedChild, and all its replacedDescendants[34], have been deleted.

All other children inside parent's oldContainment with index > oldIndex have been moved to next lower index.

No other children inside parent's newContainment have been moved.

Parameters
newContainment

MetaPointer

newIndex

Index

movedChild

TargetNode

parent

TargetNode

oldContainment

MetaPointer

oldIndex

Index

replacedChild

TargetNode

replacedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedAndReplacedFromOtherContainmentInSameParent

6.6.4.9. Child moved in same containment and replaced existing child

Existing node movedChild (previously inside parent's containment at oldIndex) has replaced the existing replacedChild inside parent's containment at newIndex. replacedChild, and all its replacedDescendants[34], have been deleted.

If oldIndex < newIndex: All other children inside parent's containment with previous index > oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6] G[7]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] G[6]

If oldIndex > newIndex: All other children inside parent's containment with previous index >= oldIndex have been moved to next lower index. Example:
oldIndex=4: A[0] B[1] C[2] D[3] X[4] E[5] F[6]
newIndex=1: A[0] X[1] C[2] D[3] E[4] F[5]

oldIndex MUST NOT be equal to newIndex.

Parameters
newIndex

Index

movedChild

TargetNode

parent

TargetNode

containment

MetaPointer

oldIndex

Index

replacedChild

TargetNode

replacedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ChildMovedAndReplacedInSameContainment

6.6.5. Annotations

6.6.5.1. Annotation added

New node newAnnotation has been added to parent's annotations at index. newAnnotation might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[35]

All other annotations inside parent's annotations with index >= index have been moved to next higher index.

Parameters
parent

TargetNode

newAnnotation

SerializationChunk

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationAdded

Related command

Add annotation

6.6.5.2. Annotation deleted

Existing node deletedAnnotation, and all its deletedDescendants[34], have been deleted from parent's annotations at index.[36] All other annotations inside parent's annotations with index > index have been moved to next lower index.

Parameters
deletedAnnotation

TargetNode

deletedDescendants

TargetNode[]

parent

TargetNode

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationDeleted

Related command

Delete annotation

6.6.5.3. Annotation replaced

Existing node replacedAnnotation, and all its replacedDescendants[34], inside parent's annotations at index has been replaced with new node newAnnotation. newAnnotation might be a single node or an arbitrary complex subtree. All nodes in that subtree MUST be new, i.e. their id MUST NOT exist in the repository. Nodes in that subtree MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in that subtree.[35]

replacedAnnotation, and all its descendants, have been deleted.

Parameters
newAnnotation

SerializationChunk

replacedAnnotation

TargetNode

replacedDescendants

TargetNode[]

parent

TargetNode

index

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationReplaced

Related command

Replace annotation

6.6.5.4. Annotation moved from other parent

Existing node movedAnnotation (previously inside oldParent's annotations at oldIndex) has been moved inside newParent's annotations at newIndex.

All other annotations inside oldParent's annotations with index > oldIndex have been moved to next lower index.

All other annotations inside newParent's annotations with index >= newIndex have been moved to next higher index.

Parameters
newParent

TargetNode

newIndex

Index

movedAnnotation

TargetNode

oldParent

TargetNode

oldIndex

Index

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationMovedFromOtherParent

6.6.5.5. Annotation moved in same parent

Existing node movedAnnotation (previously inside parent's annotations at oldIndex) has been moved inside parent's annotations at newIndex.

If oldIndex < newIndex: All other annotations inside parent's annotations with previous index > oldIndex and previous index ⇐ newIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] F[6]

If oldIndex > newIndex: All other annotations inside parent's annotations with previous index >= newIndex and previous index < oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=1: A[0] X[1] B[2] C[3] D[4] E[5] F[6]

oldIndex MUST NOT be equal to newIndex.

Parameters
newIndex

Index

movedAnnotation

TargetNode

parent

TargetNode

oldIndex

TargetNode

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationMovedInSameParent

6.6.5.6. Annotation moved from other parent and replaced existing annotation

Existing node movedAnnotation (previously inside oldParent's annotations at oldIndex) has replaced the existing replacedAnnotation inside newParent's annotations at newIndex. replacedAnnotation, and all its replacedDescendants[34], have been deleted.

All other annotations inside oldParent's annotations with index > oldIndex have been moved to next lower index.

No other annotations inside newParent's annotations have been moved.

Parameters
newParent

TargetNode

newIndex

Index

movedAnnotation

TargetNode

oldParent

TargetNode

oldIndex

Index

replacedAnnotation

TargetNode

replacedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationMovedAndReplacedFromOtherParent

6.6.5.7. Annotation moved in same parent and replaced existing annotation

Existing node movedAnnotation (previously inside parent's annotations at oldIndex) has replaced the existing replacedAnnotation inside parent's annotations at newIndex. replacedAnnotation, and all its replacedDescendants[34], have been deleted.

If oldIndex < newIndex: All other annotations inside parent's annotations with previous index > oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6] G[7]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] G[6]

If oldIndex > newIndex: All other annotations inside parent's annotations with previous index >= oldIndex have been moved to next lower index. Example:
oldIndex=4: A[0] B[1] C[2] D[3] X[4] E[5] F[6]
newIndex=1: A[0] X[1] C[2] D[3] E[4] F[5]

oldIndex MUST NOT be equal to newIndex.

Parameters
newIndex

Index

movedAnnotation

TargetNode

parent

TargetNode

oldIndex

TargetNode

replacedAnnotation

TargetNode

replacedDescendants

TargetNode[]

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

AnnotationMovedAndReplacedInSameParent

6.6.6. References

6.6.6.1. Reference added

Reference with newTarget/newResolveInfo has been added to parent's reference at index. All other entries inside parent's reference with index >= index have been moved to next higher index.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newTarget

TargetNode?

newResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceAdded

Related command

Add reference

6.6.6.2. Reference deleted

Existing reference with deletedTarget/deletedResolveInfo has been deleted from parent's reference at index. All other entries inside parent's reference with index > index have been moved to next lower index.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

deletedTarget

TargetNode?

deletedResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceDeleted

Related command

Delete reference

6.6.6.3. Reference changed

Existing reference with oldTarget/oldResolveInfo inside parent's annotations at index has been replaced with newTarget/newResolveInfo.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newTarget

TargetNode?

newResolveInfo

TargetNode?

oldTarget

TargetNode?

oldResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceChanged

Related command

Change reference

6.6.6.4. Entry moved from other reference

Existing reference target/resolveInfo (previously inside oldParent's oldReference at oldIndex) has been moved to newParent's newReference at newIndex.

All other entries inside oldParent's oldReference with index > oldIndex have been moved to next lower index.

All other entries inside newParent's newReference with index >= newIndex have been moved to next higher index.

Parameters
newParent

TargetNode

newReference

MetaPointer

newIndex

Index

oldParent

TargetNode

oldReference

MetaPointer

oldIndex

Index

target

TargetNode?

resolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedFromOtherReference

6.6.6.5. Entry moved from other reference in same parent

Existing reference target/resolveInfo (previously inside parent's oldReference at oldIndex) has been moved to parent's newReference at newIndex.

All other entries inside parent's oldReference with index > oldIndex have been moved to next lower index.

All other entries inside parent's newReference with index >= newIndex have been moved to next higher index.

Parameters
parent

TargetNode

newReference

MetaPointer

newIndex

Index

oldReference

MetaPointer

oldIndex

Index

target

TargetNode?

resolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedFromOtherReferenceInSameParent

6.6.6.6. Entry moved in same reference

Existing reference target/resolveInfo (previously inside parent's reference at oldIndex) has been moved to parent's reference at newIndex.

If oldIndex < newIndex: All other entries inside parent's reference with previous index > oldIndex and previous index ⇐ newIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] F[6]

If oldIndex > newIndex: All other entries inside parent's reference with previous index >= newIndex and previous index < oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6]
newIndex=1: A[0] X[1] B[2] C[3] D[4] E[5] F[6]

oldIndex MUST NOT be equal to newIndex.

Parameters
parent

TargetNode

reference

MetaPointer

oldIndex

Index

newIndex

Index

target

TargetNode?

resolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedInSameReference

6.6.6.7. Entry moved from other reference and replaced existing entry

Existing reference movedTarget/movedResolveInfo (previously inside oldParent's oldReference at oldIndex) has replaced existing replacedTarget/replacedResolveInfo at newParent's newReference at newIndex.

All other entries inside oldParent's oldReference with index > oldIndex have been moved to next lower index.

No other entries inside newParent's newReference have been moved.

Parameters
newParent

TargetNode

newReference

MetaPointer

newIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

oldParent

TargetNode

oldReference

MetaPointer

oldIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedAndReplacedFromOtherReference

6.6.6.8. Entry moved from other reference in same parent and replaced existing entry

Existing reference movedTarget/movedResolveInfo (previously inside parent's oldReference at oldIndex) has replaced existing replacedTarget/replacedResolveInfo at parent's newReference at newIndex.

All other entries inside parent's oldReference with index > oldIndex have been moved to next lower index.

No other entries inside parent's newReference have been moved.

Parameters
parent

TargetNode

newReference

MetaPointer

newIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

oldReference

MetaPointer

oldIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedAndReplacedFromOtherReferenceInSameParent

6.6.6.9. Entry moved in same reference and replaced existing entry

Existing reference movedTarget/movedResolveInfo (previously inside parent's reference at oldIndex) has replaced existing replacedTarget/replacedResolveInfo at parent's reference at newIndex.

If oldIndex < newIndex: All other entries inside parent's reference with previous index > oldIndex have been moved to next lower index. Example:
oldIndex=3: A[0] B[1] C[2] X[3] D[4] E[5] F[6] G[7]
newIndex=5: A[0] B[1] C[2] D[3] E[4] X[5] G[6]

If oldIndex > newIndex: All other entries inside parent's reference with previous index >= oldIndex have been moved to next lower index. Example:
oldIndex=4: A[0] B[1] C[2] D[3] X[4] E[5] F[6]
newIndex=1: A[0] X[1] C[2] D[3] E[4] F[5]

oldIndex MUST NOT be equal to newIndex.

Parameters
parent

TargetNode

reference

MetaPointer

newIndex

Index

movedTarget

TargetNode?

movedResolveInfo

ResolveInfo?

oldIndex

Index

replacedTarget

TargetNode?

replacedResolveInfo

ResolveInfo?

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

EntryMovedAndReplacedInSameReference

6.6.6.10. Reference ResolveInfo added

newResolveInfo has been added as ResolveInfo to existing entry inside parent's reference at index with target.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newResolveInfo

ResolveInfo

target

TargetNode

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceResolveInfoAdded

Related command

Add reference ResolveInfo

6.6.6.11. Reference ResolveInfo deleted

ResolveInfo deletedResolveInfo has been deleted from existing entry inside parent's reference at index with target.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

target

TargetNode

deletedResolveInfo

ResolveInfo

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceResolveInfoDeleted

6.6.6.12. Reference ResolveInfo changed

ResolveInfo of existing entry inside parent's reference at index with target has been changed from replacedResolveInfo to newResolveInfo.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newResolveInfo

ResolveInfo

target

TargetNode?

replacedResolveInfo

ResolveInfo

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceResolveInfoChanged

6.6.6.13. Reference target added

newTarget has been added as target to existing entry inside parent's reference at index with resolveInfo.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newTarget

TargetNode

resolveInfo

ResolveInfo

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceTargetAdded

Related command

Add reference target

6.6.6.14. Reference target deleted

Target deletedTarget has been deleted from existing entry inside parent's reference at index with resolveInfo.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

resolveInfo

ResolveInfo

deletedTarget

TargetNode

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceTargetDeleted

Related command

Delete reference target

6.6.6.15. Reference target changed

Target of existing entry inside parent's reference at index with resolveInfo has been changed from replacedTarget to newTarget.

Parameters
parent

TargetNode

reference

MetaPointer

index

Index

newTarget

TargetNode

resolveInfo

ResolveInfo?

replacedTarget

TargetNode

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

ReferenceTargetChanged

Related command

Change reference target

6.6.7. Miscellaneous

6.6.7.1. Composite

The events in parts have happened in the given order.[31]

Composite events don’t mention origin commands on their own; they are only mentioned in each part.[6] We can nest composite events arbitrarily.[33]

Parameters
parts

Event[]

protocolMessages

protocolMessages

Technical name

CompositeEvent

Related command

Composite

6.6.7.2. No-op

Nothing happened as result of one or more command(s).[22]

Parameters
originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

NoOpEvent

Related command

none

6.6.7.3. Error

Repository couldn’t handle one or more command(s).[37]

Parameters
errorCode

String

message

String

originCommands

CommandSource[]

sequenceNumber

event sequence number

protocolMessages

protocolMessages

Technical name

Error

Related command

none


1. Define Delta Participation (was: Session) #337
2. https://en.wikipedia.org/wiki/Command_Query_Responsibility_Segregation
3. Do we separate basic model sync ("delta") from updates on changes ("notification") a la CQRS? #291
4. Is participation handling a query or something else? #350
5. Repo must tell client if command applied successfully #298
6. Each event must list all command ids it results from #306
7. Repo must send all updates to all clients #299
8. Repository takes the final decision on any change to its contents #339
9. Repository doesn’t maintain an understanding of the state of a client’s model #297
10. Should we have an event sequence number? #341
11. How fine-grained do we want to split up commands? #317
12. How fine-grained do we want reference commands? #329
13. Moving a child between parents, replacing a child at the destination #321
14. Can a client ask the repo if the participation is still alive? #349
15. Scope of event sequence number #343
16. How to specifiy subscription scope? #269
17. Can a client change a node it is not subscribed to? #352
18. Each command has a unique id #305
19. Do we allow additional data on events? #331
20. Do we allow additional data on commands? #332
21. How to handle commands with invalid optional parameter value? #312
22. How to report a command has completely been discarded, without any resulting event? #314
23. How does a delta client know about new partitions? #267
24. Can a client change its subscription scope during a connection? #270
25. Do we have a "end Participation" / "sign-off" API? #344
26. Reconnect query: Report invalid participation by error or by `participationValid` flag? #354
27. Do we want `listPartitions` query in delta? #361
28. Do we allow to add more than one node per AddChild command? #327
29. Deleting a node does not touch existing references to that node #285
30. Potential issues with delete<child/reference/…​> commands #371
31. Delta needs to support composite commands / events #281
32. Does a composite command have its own commandId? #353
33. Can we nest composite commands / events? #360
34. What type and contents should the "deletedChild" property of the ChildDeleted event have #370
35. If we add a subtree, do we emit one add per node or only one for the (added) root node of the tree? #326
36. If we remove a node via delta protocol, do we also need to send events for all descendants? #286
37. Repository error event #316