The delta API version 2026.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.
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 between a client and a repository. The client initiates the channel with the repository to open a participation[1]. Both parties communicate through the established channel via messages.
-
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 to 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(s).
-
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:
-
Client connects to repository and starts a participation.
-
Client subscribes to some partitions with subscription queries. The response contains a serialization chunk with the current contents of these partitions.
-
Client initiates its editor or processing with the chunk.
-
Client sends commands to request changes to some nodes in the subscribed partitions.
-
Client receives events with the actual changes that have been applied to the subscribed nodes.
-
Client updates its editor or processing with the event’s contents.
-
Client receives events originating from other clients' commands.
-
Client updates its editor or processing with the event’s contents.
-
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
Xand ignores the second command. It emits onechildDeletedevent, correlated to both commands. -
Repository B keeps an internal "trash can" of all deleted nodes. It deletes node
Xon the first command, but resurrects nodeXon the second command and changes the property as requested. It first emits achildDeletedevent (correlated to the first command), but laterchildAddedandpropertyChangedevents (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
propertyChangedevent, 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. Out of scope
This specification precisely describes the semantic content of each message. We don’t describe the binding to any specific protocol (e.g. JSON over WebSockets, Protobuf over HTTP, message queues).
2.2. 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 |
|||||
Delete |
|||||
Change |
|||||
Move from other node |
|||||
Move from other feature in same node |
|||||
Move in same feature in same node |
|||||
Move from other node and replace existing[14] |
Move child from other containment and replace existing child |
Move annotation from other parent and replace existing annotation |
|||
Move from other feature in same node and replace existing[14] |
Move child from other containment in same parent and replace existing child |
||||
Move in same feature in same node and replace existing[14] |
Move annotation in same parent and replace existing annotation |
||||
Composite |
|||||
3. Description
3.1. Repository characteristics
A repository is a set of partitions, and a set of APIs, amongst them this delta API. The repository has an ID that must be unique for all repositories in the same context. LionWeb doesn’t specify the scope of the context.[15]
A repository is “its own universe”: nodes within it can’t reference nodes, or be referenced from nodes from other repositories. All nodes within the same repository MUST have unique IDs. Nodes can refer to nodes from the LionCore and built-in languages.
3.2. 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 ids and command ids within the same participation.
Authentication and authorization are out of scope of this API.
3.3. Channel characteristics
Logically, the channel has independent parts for each category of message; in practice, we might transmit some or all of them through a shared channel.
This protocol is agnostic of its underlying transport or technical implementation. By default, this protocol uses JSON encoding over a text-based, single channel, stateful, bi-directional, asynchronous, reliable, and trustworthy transport.[16] Any transport that fits these criteria (e.g. WebSocket[17]) MUST use the same encoding and MUST adhere to the Delta JSON Schema.[18]
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.4. 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.[19]
3.5. 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.[20]
A client SHOULD use this number to order incoming events, and check whether the client missed any event.
3.6. 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).[21]
At the start of a participation, the subscription scope is empty. A client can change its subscription scope by
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.[22]
3.7. Message characteristics
Most messages are atomic; they cannot be split. The exceptions are splittable messages.
Each message has some id unique to the participation and category:
-
Queries have a QueryId (for Chunked query response together with its ContinuedChunkSequenceNumber).
-
Commands have a CommandId (for Chunked Command together with its ContinuedChunkSequenceNumber).[23]
-
Events have EventSequenceNumber.[24]
Every defined message has a unique technical name. The technical name is a valid programming language identifier as described for IKeyed. Each binding to a specific protocol might use the technical name in a different way. For example, a JSON binding might have a member containing the technical name of the message, or a Protobuf binding might use the technical name as type name.
3.7.1. Splittable messages
All messages containing a SerializationChunk.
A client or repository CAN decide to split up a splittable message if that message would exceed the acceptable message size. LionWeb does not define the acceptable message size, it SHOULD be a parameter for each implementation.
All splittable messages MAY contain a SplitFlag.
If the flag is unset or false, the splittable message is self-contained.
If the flag is true, one or more continued chunk messages will follow.[25]
Splittable messages include:
- Queries
-
-
Subscribe to partition contents response
contents -
List partitions response
partitions -
List and subscribe partitions response
partitions
-
- Commands
- Events
Continued chunks continue the chunk from the related splittable message.
Each continued chunk refers to the splittable message it belongs to.
The continued chunk contains a chunk, a consecutive sequence number, and a ContinuedChunkCompletedFlag to signal whether it is the last continued chunk, or more will follow.
If the flag is true, this is the last continued chunk.
If the flag is false, one or more continued chunk messages will follow.[25]
There MUST NOT be any message in the same channel between the chunked message and all related continued chunks.
Continued chunks include:
3.7.2. Additional Info
-
kindis an identifier-compatible string identifying the additional info type. Some kinds are pre-defined in this specification. A repository MAY reply with other, additional kinds. -
distribute? is an optional boolean flag with default valuefalse. It is only valid in Commands, i.e. MUST NOT be used for Events or Queries. If present and set totrue, the repository MUST copy the additional info to all events that result from the command, and distribute the additional info to all participants receiving the event. -
messageis a human-readable string describing the additional info. -
datais a flat map with 0 or more arbitrary keys and values. All keys MUST be identifier-compatible and MUST be unique within the same additional info. All values MUST be strings. A kind might imply presence of specific keys indata.
This additional info is symmetric to additional infos in bulk API.
4. Scenarios
4.1. Virgin repository, first time client connects
-
Client signs on to repository
repo-alpha, with protocol version2026.1, and client idmyClient. -
Repository confirms participation with participation id
participation-a. -
Client initiates new partition.
-
Client sends Add partition command with
nodeApayload (details omitted) and command idcmd-1. -
Repository registers command for processing.
-
Repository updates internal representation.
-
Repository creates event for update.
-
Repository emits event Partition added with
nodeApayload and sequence number1. It includes one CommandSource with value(participation-a, cmd-1) -
Client receives event and forwards information to editor.
-
Client draws
nodeA.
4.2. Client reconnects to known partition
-
Client knows the relevant partition, wants to subscribe.
-
Client sends Subscribe to partition contents query with partition node id
partition-id. -
Repository retrieves all contents of partition with node id
partition-id. -
Repository found contents.
-
Repository responds to query with id
qry-1with contents of 3 nodes:partitionNode,childNodeA,childNodeB(details omitted). -
Client receives query result and forwards information to editor.
-
Client draws
childNodeAandchildNodeB.partitionNodeis not drawn, it represents the canvas.
4.3. Client changes known node with remote update
-
User enters new property value.
-
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client informs editor of command submission.
-
Repository updates internal representation.
-
Repository creates event for update.
-
Repository emits event Property added with
nodeAnode id,ageproperty (details omitted),23value and sequence number1. It includes one CommandSource with value(participation-a, cmd-1) -
Client receives event and forwards information to editor.
-
Client updates
nodeAwith new property value.
4.4. Client changes known node with local update
-
User enters new property value.
-
Client updates
nodeAwith new property value. -
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client registers processed command id
cmd-1. -
Repository updates internal representation.
-
Repository creates event for update.
-
Repository emits event Property added with
nodeAnode id,ageproperty (details omitted),23value and sequence number1. It includes one CommandSource with value(participation-a, cmd-1) -
Client found a matching registered processed command id.
-
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. -
Another client sends Add property command with command id
cmd-x(other parameters omitted). -
Repository updates internal representation.
-
Repository creates event for update.
-
Repository emits event Property added with sequence number
2(other parameters omitted). It includes one CommandSource with value(other-client, cmd-x) -
Client did not find any matching registered processed command id.
-
Client forwards information to editor.
-
Client updates with new property value.
4.5. Client tries to change invalid node id
-
User enters new property value on node
node with spacesthat’s known to the editor. -
Client editor forwards user action into command.
-
Client sends Add property command with
node with spacesnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository checks whether node id
node with spacesis valid. -
Client registers processed command id
cmd-1. -
Client informs editor of command submission.
-
Repository rejects invalid node id.
-
Repository sends ErrorEvent only to this participation with
invalidNodeIderror code,invalid node id 'node with spaces'message and sequence number1. It includes one CommandSource with value(participation-a, cmd-1). -
Client removes
cmd-1from open commands list. -
Client informs editor of failed command.
-
Client informs user.
4.6. Client tries to change unknown node with failed event
-
User enters new property value on node
nodeAthat’s known to the editor. -
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client registers processed command id
cmd-1. -
Client informs editor of command submission.
-
Repository realizes it does not know a node with id
nodeA -
Repository creates event for notification.
-
Repository emits ErrorEvent with
unknownNodeerror code,cannot add property to unknown nodemessage and sequence number1. It includes one CommandSource with value(participation-a, cmd-1). -
Client removes
cmd-1from open commands list.
4.7. Client with remote update changes property to same value as it already has
-
User enters changed property value that’s the same value as the old value.
-
Client editor forwards user action into command.
-
Client sends Change property command with
nodeAnode id,ageproperty (details omitted),23old value,23new value and command idcmd-1. -
Repository registers command for processing.
-
Client registers processed command id
cmd-1. -
Client informs editor of command submission.
-
Repository determines no change to internal representation.
-
Repository creates event for notification.
-
Repository emits No-op event with CommandSource with value
(participation-a, cmd-1)and sequence number1. -
Client removes
cmd-1from open commands list.
4.8. Repository has bug, needs to tell client it couldn’t apply its commands
-
User enters new property value on node
nodeAthat’s known to the editor. -
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client registers processed command id
cmd-1. -
Client informs editor of command submission.
-
Repository tries to update internal representation. Some error occurs (e.g. database unavailable).
-
Repository handles the error.
-
Repository creates event for notification.
-
Repository emits ErrorEvent with
internalErrorerror code,internal error occurredmessage and sequence number1. It includes one CommandSource with value(participation-a, cmd-1). -
Client removes
cmd-1from open commands list.
4.9. Concurrent changes to known node with local update
-
User enters new property value.
-
Client updates
nodeAwith new property value. -
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client registers processed command id
cmd-1. -
Another client sends Add property command
nodeAnode id,ageproperty (details omitted),42value and command idcmd-x. -
Repository resolves concurrent updates t
nodeA,ageproperty with "last write wins" strategy. Repository updates internal representation with value42. -
Repository creates event for update.
-
Repository emits event Property added with
nodeAnode id,ageproperty (details omitted),23value and sequence number1. It includes one CommandSource with values(participation-a, cmd-1)and(other-client, cmd-x). -
Client found a matching registered processed command id.
-
Client unregisters processed command id
cmd-1. -
Not all command sources could be matched against registered processed command ids. Client forwards information to editor.
-
Client updates with new property value.
4.10. Concurrent changes to known node with remote update
-
User enters new property value.
-
Client editor forwards user action into command.
-
Client sends Add property command with
nodeAnode id,ageproperty (details omitted),23value and command idcmd-1. -
Repository registers command for processing.
-
Client informs editor of command submission.
-
Another client sends Add property command
nodeAnode id,ageproperty (details omitted),42value and command idcmd-x. -
Repository resolves concurrent updates t
nodeA,ageproperty with "last write wins" strategy. Repository updates internal representation with value42. -
Repository creates event for update.
-
Repository emits event Property added with
nodeAnode id,ageproperty (details omitted),23value and sequence number1. It includes one CommandSource with values(participation-a, cmd-1)and(other-client, cmd-x). -
Client receives event and forwards information to editor.
-
Client updates
nodeAwith new property value.
4.11. Split query response
-
Client knows the relevant partition, wants to subscribe.
-
Client sends Subscribe to partition contents query with partition node id
partition-id. -
Repository retrieves all contents of partition with node id
partition-id. -
Repository found contents.
-
Repository responds to query with id
qry-1with contents of 2 nodes:partitionNode,nodeA(details omitted). Repository decided the response is too big, and splits it up (split: true). -
Client receives split query result and buffers partial response.
-
Repository continues its response to query with id
qry-1with another Chunked query response with chunk of 1 node:nodeB(details omitted). This is the first in the sequence of chunked responses (continuedChunkSequenceNumber: 0) and there will be another response (continuedChunkCompleted: false). -
Client receives the next split query result and buffers partial response.
-
Repository continues its response to query with id
qry-1with another Chunked query response with chunk of 2 nodes:nodeC,annotationD(details omitted). This is the second in the sequence of chunked responses (continuedChunkSequenceNumber: 1) and there will not be another response (continuedChunkCompleted: true). -
Client receives the final next split query result and composes the response.
-
Client forwards information to editor.
-
Client draws
nodeAandnodeB.partitionNodeis not drawn, it represents the canvas.
5. Messages
5.1. Parameter syntax
-
Parameters suffixed with
?CAN be omitted, or CAN have a value ofnull. Both representations express the parameter to be unset.[29] -
Parameters suffixed with
[]are ordered lists with zero or more elements.
5.2. Parameter types
| additionalInfos |
Optionally empty[30] list of additional infos. |
| 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 |
| Index |
Position inside a multiple link or annotations as integer >= 0.
Cannot be |
| Command |
Any command. |
| CommandId |
Id of a command.[23] 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 as described in serialization specification, but without top-level |
Nodes in the chunk MAY have references to already existing nodes, and already existing nodes MAY have references to nodes in the chunk.[32]
+ Chunks have different constraints, depending on use case:
+
| Single |
MUST contain a single anchor node, and all other nodes MUST be descendants of the anchor node. The chunk MUST contain all features of the anchor node and all its descendants, i.e. the anchor node is complete. |
| Multi |
MAY contain more than one root node (i.e. independent subtrees), and the chunk MUST contain all descendants of each root node. MUST contain all features of all contained nodes. |
| Shallow |
MAY contain more than one root node (i.e. independent subtrees), and each root node might be incomplete.
|
5.2.1. New nodes
The term "new node" refers to nodes that MUST NOT yet exist in the repository.[32]
5.2.2. Existing nodes
The term "existing node" refers to nodes that MUST exist in the repository.
5.2.3. Reused nodes
The term "reused node" refers to nodes that are removed and re-added in the same command/event.[33] A client SHOULD keep the identity of the reused node in its internal representation.
5.2.4. 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.
5.3. Errors
5.3.1. Invalid participation
The participation the client uses to communicate with the repository is not valid.
Possible reasons:
-
The participation never has been valid.
-
The client signed off.
-
The client disconnected.
invalidParticipation
5.3.2. Node already exists
Client tries to create a node with an id that already exists.
nodeAlreadyExists
5.3.3. Unknown node
Client tries to operate on a node unknown to the repository.
unknownNode
5.3.4. Unknown index
Client tries to operate on an index beyond the number of existing elements.
unknownIndex
5.3.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.
indexNodeMismatch
5.3.6. Move without parent
Client tries to move a node that doesn’t have a parent.
moveWithoutParent
5.3.7. Invalid move
Client tries to move a node incompatible with the emitted command.
invalidMove
5.3.8. Undefined reference target
Client tries to set a reference with neither target nor resolveInfo
undefinedReferenceTarget
5.4. Queries
5.4.1. Special responses
5.4.1.1. Error response
Any query might return with error parameters instead of its declared response parameters.[34]
See also ErrorEvent.
ErrorResponse
| errorCode |
|
| message |
|
| queryId |
QueryId Id of the related query. |
| additionalInfos |
5.4.1.2. Chunked query response
A continued chunk for a splittable response of one of the following queries:
-
Subscribe to partition contents response
contents -
List partitions response
partitions -
List and subscribe partitions response
partitions
ChunkedQueryResponse
| chunk |
SerializationChunk The continued chunk. The combination of all continued chunks MUST adhere to the same constraints as the related splittable message's chunk. |
| continuedChunkCompleted | |
| continuedChunkSequenceNumber | |
| queryId |
QueryId Id of the related splittable query |
| additionalInfos |
5.4.2. Subscription
5.4.2.1. Subscribe to partition changes
This client wants to receive Partition added events on newly created (if creation is true)
or Partition deleted events on deleted (if deletion is true) partitions.
The client automatically subscribes to newly created partitions (if creation is true), and receives the full contents of partitions.
See also Inform about partition changes.
SubscribeToChangingPartitions
| creation |
boolean
Whether this client wants to receive events on newly created partitions ( |
| deletion |
boolean
Whether this client wants to receive events on deleted partitions ( |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
Client already requested Inform about partition changes
5.4.2.2. Inform about partition changes
This client wants to receive Partition added events on newly created (if creation is true)
or Partition deleted events on deleted (if deletion is true) partitions.
The client receives partitions contents up to depthLimit.
The client does not subscribe to newly created partitions.[25]
See also Subscribe to partition changes.
InformAboutChangingPartitions
| creation |
boolean
Whether this client wants to receive events on newly created partitions ( |
| deletion |
boolean
Whether this client wants to receive events on deleted partitions ( |
| depthLimit |
depth limit
Depth of Partition added. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
Client already requested Subscribe to partition changes
5.4.2.3. Subscribe to partition contents
SubscribeToPartitionContents
| partition |
TargetNode Node id of the partition this client wants to receive events of. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| contents |
single chunk
Complete contents of |
| split? | |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
already subscribed to
partition
5.4.2.4. Unsubscribe from partition contents
This client does not want to receive events on any changes to partition or any of its descendants anymore.[35]
UnsubscribeFromPartitionContents
| partition |
TargetNode Node id of the partition this client wants to stop receiving events of. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
not subscribed to
partition
5.4.3. Participation
Even though participation handling does not relate to repository contents, we consider them queries.[4].
5.4.3.1. Sign On (start a participation)
The client starts a participation for a specific repository.
|
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. |
SignOn
| deltaProtocolVersion | |
| clientId | |
| repositoryId |
RepositoryId Id of the repository to which the client wants to establish a participation. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| participationId |
ParticipationId the repository assigns to this participation. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
Unsupported delta protocol version
5.4.3.2. Sign Off (end a participation)
The client ends a participation.[36]
|
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. |
SignOff
| queryId |
QueryId Id of this query. |
| additionalInfos |
| queryId |
QueryId Id of this query. |
| additionalInfos |
5.4.3.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.[19]
Reconnect
| participationId |
ParticipationId The previously used participation id. |
| lastReceivedSequenceNumber |
EventSequenceNumber Last event sequence number received by the client. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| lastSentSequenceNumber |
EventSequenceNumber Last event sequence number sent by the repository. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
-
Invalid participation If the participation is not valid.[37]
5.4.4. Miscellaneous
5.4.4.1. Get available 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. We identify the client by its clientId.
GetAvailableIds
| count |
integer type Number of ids requested. |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| ids |
FreeId[]
List of ids guaranteed to be free.
The repository MUST return between one (inclusive) and |
| queryId |
QueryId Id of this query. |
| additionalInfos |
5.4.4.2. List partitions
Lists all non-language partitions accessible in the repository.[38]
Same functionality as bulk API listPartitions command.
See also List and subscribe partitions.
ListPartitions
| depthLimit |
depth limit
Depth of |
| queryId |
QueryId Id of this query. |
| additionalInfos |
| partitions |
shallow chunk
All accessible Partitions in the Repository up to |
| split? | |
| queryId |
QueryId Id of this query. |
| additionalInfos |
5.4.4.3. List and subscribe partitions
Lists all non-language partitions accessible in the repository, and subscribes the client to all of them.[38] The client receives the full contents of all listed partitions.[25]
See also List partitions.
ListAndSubscribePartitions
| queryId |
QueryId Id of this query. |
| additionalInfos |
| partitions |
multi chunk All accessible Partitions in the Repository. |
| split? | |
| queryId |
QueryId Id of this query. |
| additionalInfos |
5.5. Command — event pairs overview
5.5.1. Partitions
| Command / Event / Description | Before | After |
|---|---|---|
nothing |
||
nothing |
5.5.2. Nodes
| Command / Event / Description | Before | After |
|---|---|---|
5.5.3. Properties
| Command / Event / Description | Before | After |
|---|---|---|
5.5.4. Children
| Command / Event / Description | Before | After |
|---|---|---|
Replace existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
5.5.5. Annotations
| Command / Event / Description | Before | After |
|---|---|---|
Delete existing node |
||
Replace existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
||
Move existing node |
5.5.6. References
| Command / Event / Description | Before | After |
|---|---|---|
Delete existing |
||
Replace existing |
5.6. Commands
5.6.1. Chunked Command
A continued chunk for one of the following splittable commands:
ChunkedCommand
| chunk |
SerializationChunk The continued chunk. The combination of all continued chunks MUST adhere to the same constraints as the related splittable message's chunk. |
| continuedChunkCompleted | |
| continuedChunkSequenceNumber | |
| commandId |
CommandId Id of the related splittable command |
| additionalInfos |
5.6.2. Partitions
5.6.2.1. Add partition
Add newPartition node as new partition.
The client implicitly subscribes to any changes to newPartition or any of its descendants.
| Before | After |
|---|---|
nothing |
AddPartition
| newPartition |
single chunk Subtree to form a new partition. The anchor node MUST NOT contain a parent (as this is a partition, thus cannot have a parent). All nodes in that subtree MUST be new nodes.
|
||
| split? | |||
| commandId |
CommandId Id of this command. |
||
| additionalInfos |
5.6.2.2. Delete partition
Delete existing partition deletedPartition, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
nothing |
DeletePartition
| deletedPartition | |
| commandId |
CommandId Id of this command. |
| additionalInfos |
5.6.3. Nodes
5.6.3.1. Change classifier
Change classifier of existing node node to newClassifier.
| Before | After |
|---|---|
ChangeClassifier
| node | |
| newClassifier | |
| commandId |
CommandId Id of this command. |
| additionalInfos |
5.6.4. Properties
5.6.4.1. Add property
| Before | After |
|---|---|
AddProperty
-
Unknown node for
node
5.6.4.2. Delete property
| Before | After |
|---|---|
DeleteProperty
-
Unknown node for
node
5.6.4.3. Change property
| Before | After |
|---|---|
ChangeProperty
-
Unknown node for
node
5.6.5. Children
5.6.5.1. Add child
Add new node newChild to parent in containment at index.
| Before | After |
|---|---|
AddChild
| parent | |
| newChild |
single chunk
Subtree to form a new child.
The anchor node MUST contain the |
| containment | |
| index | |
| split? | |
| commandId | |
| additionalInfos |
-
Unknown node for
parent -
Unknown index for
index(is beyond the number ofcontainmententries inparent)
5.6.5.2. Delete child
Delete existing node deletedChild[41] from parent's containment at index, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
DeleteChild
-
Unknown node for
parent -
?
indexis beyond (the number ofcontainmententries inparent) - 1 -
Entry at index is not the given entry for
containment/indexanddeletedChild
5.6.5.3. Replace child
Delete current child replacedChild[41] inside parent's containment at index, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
Replace existing node replacedChild inside parent's containment at index with new or reused node newChild.
| Before | After |
|---|---|
ReplaceChild
| newChild |
single chunk
Subtree to form a new child.
The anchor node MUST contain the |
| parent | |
| containment | |
| index | |
| replacedChild | |
| split? | |
| commandId | |
| additionalInfos |
-
Unknown node for
parent -
Entry at index is not the given entry for
containment/indexandreplacedChild -
?
indexis beyond (the number ofcontainmententries inparent) - 1
5.6.5.4. Move child from other containment
Move existing node movedChild inside newParent's newContainment at newIndex.
| Before | After |
|---|---|
MoveChildFromOtherContainment
-
Unknown index for
newIndex(is beyond the number ofnewContainmententries innewParent) -
?
movedChildis already a child ofnewParent
5.6.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
-
Unknown index for
newIndex(is beyond the number ofnewContainmententries inmovedChild's parent) -
Invalid move as
movedChildis already a child insidenewContainment
5.6.5.6. Move child in same containment
Move existing node movedChild within its current containment to newIndex.
| Before | After |
|---|---|
MoveChildInSameContainment
-
Unknown index for
newIndex(is beyond (the number ofmovedChild's containment entries inmovedChild's parent) - 1) -
Invalid move as
movedChildis already atnewIndex
5.6.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[41] inside newParent's newContainment at newIndex, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
MoveAndReplaceChildFromOtherContainment
-
Unknown index for
newIndex(is beyond the number ofnewContainmententries innewParent) -
Entry at index is not the given entry for
newContainment/newIndexandreplacedChild -
?
movedChildis already a child ofnewParent
5.6.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[41] 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.[39]
| Before | After |
|---|---|
MoveAndReplaceChildFromOtherContainmentInSameParent
-
Unknown index for
newIndex(is beyond the number ofnewContainmententries inmovedChild's parent) -
Invalid move as
movedChildis already a child insidenewContainment -
Entry at index is not the given entry for
newContainment/newIndexandreplacedChild
5.6.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[41] inside the same containment at newIndex, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
MoveAndReplaceChildInSameContainment
-
Unknown index for
newIndex(is beyond (the number of `movedChild's containment entries inmovedChild's parent) - 2) -
Invalid move as
movedChildis already atnewIndex -
Entry at index is not the given entry for
newIndexandreplacedChild
5.6.6. Annotations
5.6.6.1. Add annotation
Add new node newAnnotation to parent's annotations at index.
| Before | After |
|---|---|
AddAnnotation
| parent | |
| newAnnotation |
single chunk
Subtree to form a new annotation.
The anchor node MUST contain the |
| index | |
| split? | |
| commandId | |
| additionalInfos |
-
Unknown node for
parent -
Unknown index for
index(is beyond the number of annotations ofparent)
5.6.6.2. Delete annotation
Delete existing node deletedAnnotation[41] from parent's annotations at index, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
DeleteAnnotation
-
Unknown node for
parent -
Unknown index for
index(is beyond (the number of annotations ofparent) - 1) -
Entry at index is not the given entry for
indexanddeletedAnnotation
5.6.6.3. Replace annotation
Delete current node replacedAnnotation[41] at parent's annotations at index, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
Replace existing node replacedAnnotation inside parent's annotations at index with new or reused node newAnnotation.
| Before | After |
|---|---|
ReplaceAnnotation
| newAnnotation |
single chunk
Subtree to form a new annotation.
The anchor node MUST contain the |
| parent | |
| index | |
| replacedAnnotation | |
| split? | |
| commandId | |
| additionalInfos |
-
Unknown node for
parent -
Unknown index for
index(is beyond (the number of annotations ofparent) - 1) -
Entry at index is not the given entry for
indexandreplacedAnnotation
5.6.6.4. Move annotation from other parent
Move existing node movedAnnotation inside newParent's annotations at newIndex.
| Before | After |
|---|---|
MoveAnnotationFromOtherParent
-
Unknown index for
newIndex(is beyond the number of annotations ofnewParent) -
?
movedAnnotationis already an annotation ofnewParent
5.6.6.5. Move annotation in same parent
Move existing node movedAnnotation within the same parent to newIndex.
| Before | After |
|---|---|
MoveAnnotationInSameParent
-
Unknown index for
newIndex(is beyond (the number of annotations ofmovedAnnotation's parent) - 1)
5.6.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[41] at newParent's annotations at newIndex, and all its descendants (including annotation instances).
Does NOT change references to any of the deleted nodes.[39]
| Before | After |
|---|---|
MoveAndReplaceAnnotationFromOtherParent
-
Unknown index for
newIndex(is beyond the number of annotations ofnewParent) -
Entry at index is not the given entry for
newIndexandreplacedAnnotation -
?
movedAnnotationis already an annotation ofnewParent
5.6.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[41] 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.[39]
| Before | After |
|---|---|
MoveAndReplaceAnnotationInSameParent
-
Unknown index for
newIndex(is beyond (the number of annotations ofmovedAnnotation's parent) - 1) -
Entry at index is not the given entry for
newIndexandreplacedAnnotation
5.6.7. References
5.6.7.1. Add reference
Add newReference / newResolveInfo to parent's reference at index.
| Before | After |
|---|---|
AddReference
-
Unknown node for
parent -
Unknown index for
index(is beyond the number ofreferenceentries ofparent) -
Undefined reference target for
newReferenceandnewResolveInfo
5.6.7.2. Delete reference
Delete existing entry deletedReference/deletedResolveInfo[41] from parent's reference at index.
| Before | After |
|---|---|
DeleteReference
-
Unknown node for
parent -
Unknown index for
index(is beyond (the number ofreferenceentries ofparent) - 1) -
Entry at index is not the given entry for
reference/indexanddeletedReference/deletedResolveInfo -
Undefined reference target for
deletedReference/deletedResolveInfo
5.6.7.3. Change reference
Replace existing entry oldReference/oldResolveInfo[41] inside parent's reference at index with newReference/newResolveInfo.
| Before | After |
|---|---|
ChangeReference
| parent | |
| reference | |
| index | |
| oldReference | |
| oldResolveInfo | |
| newReference | |
| newResolveInfo | |
| commandId | |
| additionalInfos |
-
Unknown node for
parent -
Unknown index for
index(is beyond (the number ofreferenceentries ofparent) - 1) -
Undefined reference target for
newReferenceandnewResolveInfo -
Entry at index is not the given entry for
reference/indexandoldReference/oldResolveInfo
5.6.8. Composite
5.6.8.1. Composite
Groups several commands into a logical group.[42] 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.[43] We can nest composite commands arbitrarily.[44]
CompositeCommand [45]
| parts |
Command[] |
| protocolMessages |
-
accumulation of all errors of
parts
5.7. Events
5.7.1. Chunked Event
A continued chunk for one of the following splittable events:
ChunkedEvent
| chunk |
SerializationChunk The continued chunk. The combination of all continued chunks MUST adhere to the same constraints as the related splittable message's chunk. |
| continuedChunkCompleted | |
| chunkedEventSequenceNumber |
event sequence number Sequence number of the related splittable event |
| sequenceNumber | |
| additionalInfos |
5.7.2. Partitions
5.7.2.1. Partition added
New partition newPartition has been added to the repository.
PartitionAdded
| newPartition |
single chunk (if subscribed via List and subscribe partitions or Subscribe to partition changes) or
|
||
| split? | |||
| originCommands | |||
| sequenceNumber | |||
| additionalInfos |
5.7.2.2. Partition deleted
Partition deletedPartition, and all its deletedDescendants[46], have been deleted from the repository.
This client is now unsubscribed from any changes to deletedPartition or any of its descendants.
PartitionDeleted
5.7.3. Nodes
5.7.3.1. Classifier changed
Classifier of node has been changed from oldClassifier to newClassifier.
ClassifierChanged
5.7.4. Properties
5.7.4.1. Property added
PropertyAdded
5.7.4.2. Property deleted
PropertyDeleted
5.7.5. Children
5.7.5.1. Child added
New node newChild has been added to parent's containment at index.
All other children inside parent's containment with index >= index have been moved to next higher index.
ChildAdded
| parent | |
| newChild |
single chunk
Subtree that formed the new child.
The anchor node MUST contain the |
| containment | |
| index | |
| split? | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.2. Child deleted
Existing node deletedChild, and all its deletedDescendants[46], have been deleted from parent's containment at index.[48]
All other children inside parent's containment with index > index have been moved to next lower index.
ChildDeleted
| deletedChild | |
| deletedDescendants | |
| parent | |
| containment | |
| index | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.3. Child replaced
Existing node replacedChild, and all its replacedDescendants[46], inside parent's containment at index has been replaced with new or reused node newChild.
replacedChild, and all its descendants, have been deleted.
ChildReplaced
| newChild |
single chunk
Subtree that formed the new child.
The anchor node MUST contain the |
| replacedChild | |
| replacedDescendants | |
| parent | |
| containment | |
| index | |
| split? | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.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.
ChildMovedFromOtherContainment
| newParent | |
| newContainment | |
| newIndex | |
| movedChild | |
| oldParent | |
| oldContainment | |
| oldIndex | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.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.
ChildMovedFromOtherContainmentInSameParent
| newContainment | |
| newIndex | |
| movedChild | |
| parent | |
| oldContainment | |
| oldIndex | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.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]
ChildMovedInSameContainment
| newIndex | |
| movedChild | |
| parent | |
| containment | |
| oldIndex | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.5.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[46], 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.
ChildMovedAndReplacedFromOtherContainment
| newParent | |
| newContainment | |
| newIndex | |
| movedChild | |
| oldParent | |
| oldContainment | |
| oldIndex | |
| replacedChild | |
| replacedDescendants | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
Move child from other containment and replace existing child
5.7.5.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[46], 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.
ChildMovedAndReplacedFromOtherContainmentInSameParent
5.7.5.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[46], 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]
ChildMovedAndReplacedInSameContainment
| newIndex | |
| movedChild | |
| parent | |
| containment | |
| oldIndex | |
| replacedChild | |
| replacedDescendants | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.6. Annotations
5.7.6.1. Annotation added
New node newAnnotation has been added to parent's annotations at index.
All other annotations inside parent's annotations with index >= index have been moved to next higher index.
AnnotationAdded
| parent | |
| newAnnotation |
single chunk
Subtree that formed the new annotation.
The anchor node MUST contain the |
| index | |
| split? | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.6.2. Annotation deleted
Existing node deletedAnnotation, and all its deletedDescendants[46], have been deleted from parent's annotations at index.[48]
All other annotations inside parent's annotations with index > index have been moved to next lower index.
AnnotationDeleted
| deletedAnnotation | |
| deletedDescendants | |
| parent | |
| index | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.6.3. Annotation replaced
Existing node replacedAnnotation, and all its replacedDescendants[46], inside parent's annotations at index has been replaced with new or reused node newAnnotation.
replacedAnnotation, and all its descendants, have been deleted.
AnnotationReplaced
| newAnnotation |
single chunk
Subtree that formed the new annotation.
The anchor node MUST contain the |
| replacedAnnotation | |
| replacedDescendants | |
| parent | |
| index | |
| split? | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.6.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.
AnnotationMovedFromOtherParent
| newParent | |
| newIndex | |
| movedAnnotation | |
| oldParent | |
| oldIndex | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.6.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]
AnnotationMovedInSameParent
5.7.6.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[46], 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.
AnnotationMovedAndReplacedFromOtherParent
5.7.6.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[46], 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]
AnnotationMovedAndReplacedInSameParent
| newIndex | |
| movedAnnotation | |
| parent | |
| oldIndex | |
| replacedAnnotation | |
| replacedDescendants | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
Move annotation in same parent and replace existing annotation
5.7.7. References
5.7.7.1. Reference added
Reference with newReference/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.
ReferenceAdded
| parent | |
| reference | |
| index | |
| newReference | |
| newResolveInfo | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.7.2. Reference deleted
Existing reference with deletedReference/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.
ReferenceDeleted
| parent | |
| reference | |
| index | |
| deletedReference | |
| deletedResolveInfo | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.7.3. Reference changed
Existing reference with oldReference/oldResolveInfo inside parent's annotations at index has been replaced with newReference/newResolveInfo.
ReferenceChanged
| parent | |
| reference | |
| index | |
| newReference | |
| newResolveInfo | |
| oldReference | |
| oldResolveInfo | |
| originCommands | |
| sequenceNumber | |
| additionalInfos |
5.7.8. Miscellaneous
5.7.8.1. Composite
Composite events don’t mention origin commands on their own; they are only mentioned in each part.[6] We can nest composite events arbitrarily.[44]
CompositeEvent [49]
| parts |
Event[] |
| protocolMessages |
5.7.8.2. No-op
Nothing happened as result of one or more command(s).[50]
NoOp
none
5.7.8.3. ErrorEvent
The repository MAY send an error event to only one participation.[52]
See also Error response.
ErrorEvent
none
Appendix A: Delta JSON Schema
The LionWeb delta JSON Schema.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://lionweb.io/delta.schema.json",
"title": "LionWeb Delta Protocol",
"description": "Version: 0",
"type": "object",
"anyOf": [
{
"$ref": "#/$defs/QueryRequests"
},
{
"$ref": "#/$defs/QueryResponses"
},
{
"$ref": "#/$defs/Commands"
},
{
"$ref": "#/$defs/Events"
}
],
"$defs": {
"id": {
"type": "string",
"minLength": 1,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"deltaProtocolVersion": {
"enum": [
"2026.1"
]
},
"key": {
"$ref": "#/$defs/id"
},
"version": {
"type": "string",
"minLength": 1
},
"metaPointer": {
"type": "object",
"properties": {
"language": {
"$ref": "#/$defs/key"
},
"version": {
"$ref": "#/$defs/version"
},
"key": {
"$ref": "#/$defs/key"
}
},
"required": [
"language",
"version",
"key"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"depthLimit": {
"type": "integer",
"minimum": 0
},
"split": {
"type": "boolean"
},
"continuedChunkCompleted": {
"type": "boolean"
},
"continuedChunkSequenceNumber": {
"type": "integer",
"minimum": 0
},
"DeltaSerializationChunk": {
"type": "object",
"properties": {
"nodes": {
"type": "array",
"items": {
"$ref": "#/$defs/SerializedNode"
},
"uniqueItems": true
}
},
"required": [
"nodes"
],
"additionalProperties": false,
"minProperties": 1,
"maxProperties": 1
},
"SerializedNode": {
"type": "object",
"properties": {
"id": {
"$ref": "#/$defs/targetNode"
},
"classifier": {
"$ref": "#/$defs/metaPointer"
},
"properties": {
"type": "array",
"items": {
"$ref": "#/$defs/SerializedProperty"
}
},
"containments": {
"type": "array",
"items": {
"$ref": "#/$defs/SerializedContainment"
}
},
"references": {
"type": "array",
"items": {
"$ref": "#/$defs/SerializedReference"
}
},
"annotations": {
"type": "array",
"items": {
"$ref": "#/$defs/id"
},
"uniqueItems": true
},
"parent": {
"oneOf": [
{
"$ref": "#/$defs/id"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"classifier",
"properties",
"containments",
"references",
"annotations",
"parent"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"SerializedProperty": {
"type": "object",
"properties": {
"property": {
"$ref": "#/$defs/metaPointer"
},
"value": {
"oneOf": [
{
"$ref": "#/$defs/propertyValue"
},
{
"type": "null"
}
]
}
},
"required": [
"property",
"value"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"SerializedContainment": {
"type": "object",
"properties": {
"containment": {
"$ref": "#/$defs/metaPointer"
},
"children": {
"type": "array",
"items": {
"$ref": "#/$defs/id"
},
"uniqueItems": true
}
},
"required": [
"containment",
"children"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"SerializedReference": {
"type": "object",
"properties": {
"reference": {
"$ref": "#/$defs/metaPointer"
},
"targets": {
"type": "array",
"items": {
"$ref": "#/$defs/SerializedReferenceTarget"
}
}
},
"required": [
"reference",
"targets"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"SerializedReferenceTarget": {
"type": "object",
"properties": {
"resolveInfo": {
"$ref": "#/$defs/optionalResolveInfo"
},
"reference": {
"$ref": "#/$defs/optionalTargetNode"
}
},
"required": [
"resolveInfo",
"reference"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"queryId": {
"$ref": "#/$defs/id"
},
"commandId": {
"$ref": "#/$defs/id"
},
"commandSource": {
"type": "object",
"properties": {
"participationId": {
"$ref": "#/$defs/participationId"
},
"commandId": {
"$ref": "#/$defs/commandId"
}
},
"required": [
"participationId",
"commandId"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"commandSources": {
"type": "array",
"items": {
"$ref": "#/$defs/commandSource"
},
"uniqueItems": true
},
"participationId": {
"$ref": "#/$defs/id"
},
"repositoryId": {
"$ref": "#/$defs/id"
},
"clientId": {
"$ref": "#/$defs/id"
},
"targetNode": {
"$ref": "#/$defs/id"
},
"optionalTargetNode": {
"oneOf": [
{
"$ref": "#/$defs/targetNode"
},
{
"type": "null"
}
]
},
"targetNodes": {
"type": "array",
"items": {
"$ref": "#/$defs/targetNode"
},
"uniqueItems": true
},
"resolveInfo": {
"type": "string"
},
"optionalResolveInfo": {
"oneOf": [
{
"$ref": "#/$defs/resolveInfo"
},
{
"type": "null"
}
]
},
"eventSequenceNumber": {
"type": "integer",
"minimum": 0
},
"propertyValue": {
"type": "string"
},
"index": {
"type": "integer",
"minimum": 0
},
"additionalInfoKind": {
"$ref": "#/$defs/id"
},
"errorCode": {
"$ref": "#/$defs/id"
},
"additionalInfoDataKey": {
"$ref": "#/$defs/id"
},
"additionalInfos": {
"type": "array",
"items": {
"$ref": "#/$defs/AdditionalInfo"
}
},
"AdditionalInfo": {
"properties": {
"kind": {
"$ref": "#/$defs/additionalInfoKind"
},
"distribute": {
"$ref": "#/$defs/additionalInfoDistribute"
},
"message": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"$ref": "#/$defs/AdditionalInfoData"
}
}
},
"required": [
"kind",
"message",
"data"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 4
},
"additionalInfoDistribute": {
"type": "boolean",
"default": false
},
"AdditionalInfoData": {
"properties": {
"key": {
"$ref": "#/$defs/additionalInfoDataKey"
},
"value": {
"type": "string"
}
},
"required": [
"key",
"value"
],
"additionalProperties": false,
"minProperties": 2,
"maxProperties": 2
},
"QueryRequests": {
"anyOf": [
{
"$ref": "#/$defs/SubscribeToChangingPartitionsRequest"
},
{
"$ref": "#/$defs/InformAboutChangingPartitionsRequest"
},
{
"$ref": "#/$defs/SubscribeToPartitionContentsRequest"
},
{
"$ref": "#/$defs/UnsubscribeFromPartitionContentsRequest"
},
{
"$ref": "#/$defs/SignOnRequest"
},
{
"$ref": "#/$defs/SignOffRequest"
},
{
"$ref": "#/$defs/ReconnectRequest"
},
{
"$ref": "#/$defs/GetAvailableIdsRequest"
},
{
"$ref": "#/$defs/ListPartitionsRequest"
},
{
"$ref": "#/$defs/ListAndSubscribePartitionsRequest"
}
]
},
"QueryResponses": {
"anyOf": [
{
"$ref": "#/$defs/SubscribeToChangingPartitionsResponse"
},
{
"$ref": "#/$defs/InformAboutChangingPartitionsResponse"
},
{
"$ref": "#/$defs/SubscribeToPartitionContentsResponse"
},
{
"$ref": "#/$defs/UnsubscribeFromPartitionContentsResponse"
},
{
"$ref": "#/$defs/SignOnResponse"
},
{
"$ref": "#/$defs/SignOffResponse"
},
{
"$ref": "#/$defs/ReconnectResponse"
},
{
"$ref": "#/$defs/GetAvailableIdsResponse"
},
{
"$ref": "#/$defs/ListPartitionsResponse"
},
{
"$ref": "#/$defs/ListAndSubscribePartitionsResponse"
},
{
"$ref": "#/$defs/ErrorResponse"
},
{
"$ref": "#/$defs/ChunkedQueryResponse"
}
]
},
"SubscribeToChangingPartitionsRequest": {
"properties": {
"messageKind": {
"const": "SubscribeToChangingPartitionsRequest"
},
"creation": {
"type": "boolean"
},
"deletion": {
"type": "boolean"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"creation",
"deletion",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"SubscribeToChangingPartitionsResponse": {
"properties": {
"messageKind": {
"const": "SubscribeToChangingPartitionsResponse"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"InformAboutChangingPartitionsRequest": {
"properties": {
"messageKind": {
"const": "InformAboutChangingPartitionsRequest"
},
"creation": {
"type": "boolean"
},
"deletion": {
"type": "boolean"
},
"depthLimit": {
"$ref": "#/$defs/depthLimit"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"creation",
"deletion",
"depthLimit",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"InformAboutChangingPartitionsResponse": {
"properties": {
"messageKind": {
"const": "InformAboutChangingPartitionsResponse"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"SubscribeToPartitionContentsRequest": {
"properties": {
"messageKind": {
"const": "SubscribeToPartitionContentsRequest"
},
"partition": {
"$ref": "#/$defs/targetNode"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"partition",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"SubscribeToPartitionContentsResponse": {
"properties": {
"messageKind": {
"const": "SubscribeToPartitionContentsResponse"
},
"contents": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"split": {
"$ref": "#/$defs/split"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"contents",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 5
},
"UnsubscribeFromPartitionContentsRequest": {
"properties": {
"messageKind": {
"const": "UnsubscribeFromPartitionContentsRequest"
},
"partition": {
"$ref": "#/$defs/targetNode"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"partition",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"UnsubscribeFromPartitionContentsResponse": {
"properties": {
"messageKind": {
"const": "UnsubscribeFromPartitionContentsResponse"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"SignOnRequest": {
"properties": {
"messageKind": {
"const": "SignOnRequest"
},
"deltaProtocolVersion": {
"$ref": "#/$defs/deltaProtocolVersion"
},
"clientId": {
"$ref": "#/$defs/clientId"
},
"repositoryId": {
"$ref": "#/$defs/repositoryId"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"deltaProtocolVersion",
"clientId",
"repositoryId",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"SignOnResponse": {
"properties": {
"messageKind": {
"const": "SignOnResponse"
},
"participationId": {
"$ref": "#/$defs/participationId"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"participationId",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"SignOffRequest": {
"properties": {
"messageKind": {
"const": "SignOffRequest"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"SignOffResponse": {
"properties": {
"messageKind": {
"const": "SignOffResponse"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"ReconnectRequest": {
"properties": {
"messageKind": {
"const": "ReconnectRequest"
},
"participationId": {
"$ref": "#/$defs/participationId"
},
"lastReceivedSequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"participationId",
"lastReceivedSequenceNumber",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"ReconnectResponse": {
"properties": {
"messageKind": {
"const": "ReconnectResponse"
},
"lastSentSequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"lastSentSequenceNumber",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"GetAvailableIdsRequest": {
"properties": {
"messageKind": {
"const": "GetAvailableIdsRequest"
},
"count": {
"type": "integer",
"minimum": 0
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"count",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"GetAvailableIdsResponse": {
"properties": {
"messageKind": {
"const": "GetAvailableIdsResponse"
},
"ids": {
"$ref": "#/$defs/targetNodes"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"ids",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"ListPartitionsRequest": {
"properties": {
"messageKind": {
"const": "ListPartitionsRequest"
},
"depthLimit": {
"$ref": "#/$defs/depthLimit"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"depthLimit",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"ListPartitionsResponse": {
"properties": {
"messageKind": {
"const": "ListPartitionsResponse"
},
"partitions": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"split": {
"$ref": "#/$defs/split"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"partitions",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 5
},
"ListAndSubscribePartitionsRequest": {
"properties": {
"messageKind": {
"const": "ListAndSubscribePartitionsRequest"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"ListAndSubscribePartitionsResponse": {
"properties": {
"messageKind": {
"const": "ListAndSubscribePartitionsResponse"
},
"partitions": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"split": {
"$ref": "#/$defs/split"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"partitions",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 5
},
"ErrorResponse": {
"properties": {
"messageKind": {
"const": "ErrorResponse"
},
"errorCode": {
"$ref": "#/$defs/errorCode"
},
"message": {
"type": "string"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"errorCode",
"message",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"ChunkedQueryResponse": {
"properties": {
"messageKind": {
"const": "ChunkedQueryResponse"
},
"chunk": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"continuedChunkCompleted": {
"$ref": "#/$defs/continuedChunkCompleted"
},
"continuedChunkSequenceNumber": {
"$ref": "#/$defs/continuedChunkSequenceNumber"
},
"queryId": {
"$ref": "#/$defs/queryId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"continuedChunkCompleted",
"continuedChunkSequenceNumber",
"queryId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"Commands": {
"anyOf": [
{
"$ref": "#/$defs/AddPartition"
},
{
"$ref": "#/$defs/DeletePartition"
},
{
"$ref": "#/$defs/ChangeClassifier"
},
{
"$ref": "#/$defs/AddProperty"
},
{
"$ref": "#/$defs/DeleteProperty"
},
{
"$ref": "#/$defs/ChangeProperty"
},
{
"$ref": "#/$defs/AddChild"
},
{
"$ref": "#/$defs/DeleteChild"
},
{
"$ref": "#/$defs/ReplaceChild"
},
{
"$ref": "#/$defs/MoveChildFromOtherContainment"
},
{
"$ref": "#/$defs/MoveChildFromOtherContainmentInSameParent"
},
{
"$ref": "#/$defs/MoveChildInSameContainment"
},
{
"$ref": "#/$defs/MoveAndReplaceChildFromOtherContainment"
},
{
"$ref": "#/$defs/MoveAndReplaceChildFromOtherContainmentInSameParent"
},
{
"$ref": "#/$defs/MoveAndReplaceChildInSameContainment"
},
{
"$ref": "#/$defs/AddAnnotation"
},
{
"$ref": "#/$defs/DeleteAnnotation"
},
{
"$ref": "#/$defs/ReplaceAnnotation"
},
{
"$ref": "#/$defs/MoveAnnotationFromOtherParent"
},
{
"$ref": "#/$defs/MoveAnnotationInSameParent"
},
{
"$ref": "#/$defs/MoveAndReplaceAnnotationFromOtherParent"
},
{
"$ref": "#/$defs/MoveAndReplaceAnnotationInSameParent"
},
{
"$ref": "#/$defs/AddReference"
},
{
"$ref": "#/$defs/DeleteReference"
},
{
"$ref": "#/$defs/ChangeReference"
},
{
"$ref": "#/$defs/CompositeCommand"
},
{
"$ref": "#/$defs/ChunkedCommand"
}
]
},
"AddPartition": {
"properties": {
"messageKind": {
"const": "AddPartition"
},
"newPartition": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"split": {
"$ref": "#/$defs/split"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newPartition",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 5
},
"DeletePartition": {
"properties": {
"messageKind": {
"const": "DeletePartition"
},
"deletedPartition": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"deletedPartition",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"ChangeClassifier": {
"properties": {
"messageKind": {
"const": "ChangeClassifier"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"newClassifier": {
"$ref": "#/$defs/metaPointer"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"newClassifier",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"AddProperty": {
"properties": {
"messageKind": {
"const": "AddProperty"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"newValue": {
"$ref": "#/$defs/propertyValue"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"newValue",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"DeleteProperty": {
"properties": {
"messageKind": {
"const": "DeleteProperty"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"ChangeProperty": {
"properties": {
"messageKind": {
"const": "ChangeProperty"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"newValue": {
"$ref": "#/$defs/propertyValue"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"newValue",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"AddChild": {
"properties": {
"messageKind": {
"const": "AddChild"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newChild": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newChild",
"containment",
"index",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 8
},
"DeleteChild": {
"properties": {
"messageKind": {
"const": "DeleteChild"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"deletedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"containment",
"index",
"deletedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"ReplaceChild": {
"properties": {
"messageKind": {
"const": "ReplaceChild"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newChild": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"split": {
"$ref": "#/$defs/split"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newChild",
"containment",
"index",
"replacedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 9
},
"MoveChildFromOtherContainment": {
"properties": {
"messageKind": {
"const": "MoveChildFromOtherContainment"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newContainment",
"newIndex",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"MoveChildFromOtherContainmentInSameParent": {
"properties": {
"messageKind": {
"const": "MoveChildFromOtherContainmentInSameParent"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newContainment",
"newIndex",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"MoveChildInSameContainment": {
"properties": {
"messageKind": {
"const": "MoveChildInSameContainment"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"MoveAndReplaceChildFromOtherContainment": {
"properties": {
"messageKind": {
"const": "MoveAndReplaceChildFromOtherContainment"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newContainment",
"newIndex",
"replacedChild",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 8
},
"MoveAndReplaceChildFromOtherContainmentInSameParent": {
"properties": {
"messageKind": {
"const": "MoveAndReplaceChildFromOtherContainmentInSameParent"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newContainment",
"newIndex",
"replacedChild",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"MoveAndReplaceChildInSameContainment": {
"properties": {
"messageKind": {
"const": "MoveAndReplaceChildInSameContainment"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"replacedChild",
"movedChild",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"AddAnnotation": {
"properties": {
"messageKind": {
"const": "AddAnnotation"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newAnnotation": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newAnnotation",
"index",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 7
},
"DeleteAnnotation": {
"properties": {
"messageKind": {
"const": "DeleteAnnotation"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"index": {
"$ref": "#/$defs/index"
},
"deletedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"index",
"deletedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"ReplaceAnnotation": {
"properties": {
"messageKind": {
"const": "ReplaceAnnotation"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newAnnotation": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"index": {
"$ref": "#/$defs/index"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"split": {
"$ref": "#/$defs/split"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newAnnotation",
"index",
"replacedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 8
},
"MoveAnnotationFromOtherParent": {
"properties": {
"messageKind": {
"const": "MoveAnnotationFromOtherParent"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newIndex",
"movedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"MoveAnnotationInSameParent": {
"properties": {
"messageKind": {
"const": "MoveAnnotationInSameParent"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 5
},
"MoveAndReplaceAnnotationFromOtherParent": {
"properties": {
"messageKind": {
"const": "MoveAndReplaceAnnotationFromOtherParent"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newIndex",
"replacedAnnotation",
"movedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"MoveAndReplaceAnnotationInSameParent": {
"properties": {
"messageKind": {
"const": "MoveAndReplaceAnnotationInSameParent"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"replacedAnnotation",
"movedAnnotation",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"AddReference": {
"properties": {
"messageKind": {
"const": "AddReference"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"newReference": {
"$ref": "#/$defs/targetNode"
},
"newResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 8
},
"DeleteReference": {
"properties": {
"messageKind": {
"const": "DeleteReference"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"deletedReference": {
"$ref": "#/$defs/targetNode"
},
"deletedResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 8
},
"ChangeReference": {
"properties": {
"messageKind": {
"const": "ChangeReference"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"oldReference": {
"$ref": "#/$defs/targetNode"
},
"oldResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"newReference": {
"$ref": "#/$defs/targetNode"
},
"newResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 10
},
"CompositeCommand": {
"properties": {
"messageKind": {
"const": "CompositeCommand"
},
"parts": {
"type": "array",
"items": {
"$ref": "#/$defs/Commands"
}
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"parts",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"ChunkedCommand": {
"properties": {
"messageKind": {
"const": "ChunkedCommand"
},
"chunk": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"continuedChunkCompleted": {
"$ref": "#/$defs/continuedChunkCompleted"
},
"continuedChunkSequenceNumber": {
"$ref": "#/$defs/continuedChunkSequenceNumber"
},
"commandId": {
"$ref": "#/$defs/commandId"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"chunk",
"continuedChunkCompleted",
"continuedChunkSequenceNumber",
"commandId",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"Events": {
"anyOf": [
{
"$ref": "#/$defs/PartitionAdded"
},
{
"$ref": "#/$defs/PartitionDeleted"
},
{
"$ref": "#/$defs/ClassifierChanged"
},
{
"$ref": "#/$defs/PropertyAdded"
},
{
"$ref": "#/$defs/PropertyDeleted"
},
{
"$ref": "#/$defs/PropertyChanged"
},
{
"$ref": "#/$defs/ChildAdded"
},
{
"$ref": "#/$defs/ChildDeleted"
},
{
"$ref": "#/$defs/ChildReplaced"
},
{
"$ref": "#/$defs/ChildMovedFromOtherContainment"
},
{
"$ref": "#/$defs/ChildMovedFromOtherContainmentInSameParent"
},
{
"$ref": "#/$defs/ChildMovedInSameContainment"
},
{
"$ref": "#/$defs/ChildMovedAndReplacedFromOtherContainment"
},
{
"$ref": "#/$defs/ChildMovedAndReplacedFromOtherContainmentInSameParent"
},
{
"$ref": "#/$defs/ChildMovedAndReplacedInSameContainment"
},
{
"$ref": "#/$defs/AnnotationAdded"
},
{
"$ref": "#/$defs/AnnotationDeleted"
},
{
"$ref": "#/$defs/AnnotationReplaced"
},
{
"$ref": "#/$defs/AnnotationMovedFromOtherParent"
},
{
"$ref": "#/$defs/AnnotationMovedInSameParent"
},
{
"$ref": "#/$defs/AnnotationMovedAndReplacedFromOtherParent"
},
{
"$ref": "#/$defs/AnnotationMovedAndReplacedInSameParent"
},
{
"$ref": "#/$defs/ReferenceAdded"
},
{
"$ref": "#/$defs/ReferenceDeleted"
},
{
"$ref": "#/$defs/ReferenceChanged"
},
{
"$ref": "#/$defs/NoOpEvent"
},
{
"$ref": "#/$defs/CompositeEvent"
},
{
"$ref": "#/$defs/ErrorEvent"
},
{
"$ref": "#/$defs/ChunkedEvent"
}
]
},
"PartitionAdded": {
"properties": {
"messageKind": {
"const": "PartitionAdded"
},
"newPartition": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"split": {
"$ref": "#/$defs/split"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newPartition",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 5,
"maxProperties": 6
},
"PartitionDeleted": {
"properties": {
"messageKind": {
"const": "PartitionDeleted"
},
"deletedPartition": {
"$ref": "#/$defs/targetNode"
},
"deletedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"deletedPartition",
"deletedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"ClassifierChanged": {
"properties": {
"messageKind": {
"const": "ClassifierChanged"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"newClassifier": {
"$ref": "#/$defs/metaPointer"
},
"oldClassifier": {
"$ref": "#/$defs/metaPointer"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"newClassifier",
"oldClassifier",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"PropertyAdded": {
"properties": {
"messageKind": {
"const": "PropertyAdded"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"newValue": {
"$ref": "#/$defs/propertyValue"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"newValue",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"PropertyDeleted": {
"properties": {
"messageKind": {
"const": "PropertyDeleted"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"oldValue": {
"$ref": "#/$defs/propertyValue"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"oldValue",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
},
"PropertyChanged": {
"properties": {
"messageKind": {
"const": "PropertyChanged"
},
"node": {
"$ref": "#/$defs/targetNode"
},
"property": {
"$ref": "#/$defs/metaPointer"
},
"oldValue": {
"$ref": "#/$defs/propertyValue"
},
"newValue": {
"$ref": "#/$defs/propertyValue"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"node",
"property",
"oldValue",
"newValue",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 8
},
"ChildAdded": {
"properties": {
"messageKind": {
"const": "ChildAdded"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newChild": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newChild",
"containment",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 9
},
"ChildDeleted": {
"properties": {
"messageKind": {
"const": "ChildDeleted"
},
"deletedChild": {
"$ref": "#/$defs/targetNode"
},
"deletedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"deletedChild",
"deletedDescendants",
"parent",
"containment",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 9,
"maxProperties": 9
},
"ChildReplaced": {
"properties": {
"messageKind": {
"const": "ChildReplaced"
},
"newChild": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newChild",
"replacedChild",
"replacedDescendants",
"parent",
"containment",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 10,
"maxProperties": 11
},
"ChildMovedFromOtherContainment": {
"properties": {
"messageKind": {
"const": "ChildMovedFromOtherContainment"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"oldParent": {
"$ref": "#/$defs/targetNode"
},
"oldContainment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newContainment",
"newIndex",
"movedChild",
"oldParent",
"oldContainment",
"oldIndex",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 11,
"maxProperties": 11
},
"ChildMovedFromOtherContainmentInSameParent": {
"properties": {
"messageKind": {
"const": "ChildMovedFromOtherContainmentInSameParent"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"oldContainment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newContainment",
"newIndex",
"movedChild",
"parent",
"oldContainment",
"oldIndex",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 10,
"maxProperties": 10
},
"ChildMovedInSameContainment": {
"properties": {
"messageKind": {
"const": "ChildMovedInSameContainment"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedChild",
"parent",
"containment",
"oldIndex",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 9,
"maxProperties": 9
},
"ChildMovedAndReplacedFromOtherContainment": {
"properties": {
"messageKind": {
"const": "ChildMovedAndReplacedFromOtherContainment"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"oldParent": {
"$ref": "#/$defs/targetNode"
},
"oldContainment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newContainment",
"newIndex",
"movedChild",
"oldParent",
"oldContainment",
"oldIndex",
"replacedChild",
"replacedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 13,
"maxProperties": 13
},
"ChildMovedAndReplacedFromOtherContainmentInSameParent": {
"properties": {
"messageKind": {
"const": "ChildMovedAndReplacedFromOtherContainmentInSameParent"
},
"newContainment": {
"$ref": "#/$defs/metaPointer"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"oldContainment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newContainment",
"newIndex",
"movedChild",
"parent",
"oldContainment",
"oldIndex",
"replacedChild",
"replacedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 12,
"maxProperties": 12
},
"ChildMovedAndReplacedInSameContainment": {
"properties": {
"messageKind": {
"const": "ChildMovedAndReplacedInSameContainment"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedChild": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"containment": {
"$ref": "#/$defs/metaPointer"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"replacedChild": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedChild",
"parent",
"containment",
"oldIndex",
"replacedChild",
"replacedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 11,
"maxProperties": 11
},
"AnnotationAdded": {
"properties": {
"messageKind": {
"const": "AnnotationAdded"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"newAnnotation": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"newAnnotation",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 8
},
"AnnotationDeleted": {
"properties": {
"messageKind": {
"const": "AnnotationDeleted"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"deletedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"deletedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"index": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"deletedAnnotation",
"deletedDescendants",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 8
},
"AnnotationReplaced": {
"properties": {
"messageKind": {
"const": "AnnotationReplaced"
},
"newAnnotation": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"index": {
"$ref": "#/$defs/index"
},
"split": {
"$ref": "#/$defs/split"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newAnnotation",
"replacedAnnotation",
"replacedDescendants",
"parent",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 9,
"maxProperties": 10
},
"AnnotationMovedFromOtherParent": {
"properties": {
"messageKind": {
"const": "AnnotationMovedFromOtherParent"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"oldParent": {
"$ref": "#/$defs/targetNode"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newIndex",
"movedAnnotation",
"oldParent",
"oldIndex",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 9,
"maxProperties": 9
},
"AnnotationMovedInSameParent": {
"properties": {
"messageKind": {
"const": "AnnotationMovedInSameParent"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedAnnotation",
"parent",
"oldIndex",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 8,
"maxProperties": 8
},
"AnnotationMovedAndReplacedFromOtherParent": {
"properties": {
"messageKind": {
"const": "AnnotationMovedAndReplacedFromOtherParent"
},
"newParent": {
"$ref": "#/$defs/targetNode"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"oldParent": {
"$ref": "#/$defs/targetNode"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newParent",
"newIndex",
"movedAnnotation",
"oldParent",
"oldIndex",
"replacedAnnotation",
"replacedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 11,
"maxProperties": 11
},
"AnnotationMovedAndReplacedInSameParent": {
"properties": {
"messageKind": {
"const": "AnnotationMovedAndReplacedInSameParent"
},
"newIndex": {
"$ref": "#/$defs/index"
},
"movedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"oldIndex": {
"$ref": "#/$defs/index"
},
"replacedAnnotation": {
"$ref": "#/$defs/targetNode"
},
"replacedDescendants": {
"$ref": "#/$defs/targetNodes"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"newIndex",
"movedAnnotation",
"parent",
"oldIndex",
"replacedAnnotation",
"replacedDescendants",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 10,
"maxProperties": 10
},
"ReferenceAdded": {
"properties": {
"messageKind": {
"const": "ReferenceAdded"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"newReference": {
"$ref": "#/$defs/targetNode"
},
"newResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 9
},
"ReferenceDeleted": {
"properties": {
"messageKind": {
"const": "ReferenceDeleted"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"deletedReference": {
"$ref": "#/$defs/targetNode"
},
"deletedResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 9
},
"ReferenceChanged": {
"properties": {
"messageKind": {
"const": "ReferenceChanged"
},
"parent": {
"$ref": "#/$defs/targetNode"
},
"reference": {
"$ref": "#/$defs/metaPointer"
},
"index": {
"$ref": "#/$defs/index"
},
"newReference": {
"$ref": "#/$defs/targetNode"
},
"newResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"oldReference": {
"$ref": "#/$defs/targetNode"
},
"oldResolveInfo": {
"$ref": "#/$defs/resolveInfo"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parent",
"reference",
"index",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 11
},
"CompositeEvent": {
"properties": {
"messageKind": {
"const": "CompositeEvent"
},
"parts": {
"type": "array",
"items": {
"$ref": "#/$defs/Events"
}
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"parts",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 3,
"maxProperties": 3
},
"NoOpEvent": {
"properties": {
"messageKind": {
"const": "NoOpEvent"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 4,
"maxProperties": 4
},
"ErrorEvent": {
"properties": {
"messageKind": {
"const": "ErrorEvent"
},
"errorCode": {
"$ref": "#/$defs/errorCode"
},
"message": {
"type": "string"
},
"originCommands": {
"$ref": "#/$defs/commandSources"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"errorCode",
"message",
"originCommands",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 6,
"maxProperties": 6
},
"ChunkedEvent": {
"properties": {
"messageKind": {
"const": "ChunkedEvent"
},
"chunk": {
"$ref": "#/$defs/DeltaSerializationChunk"
},
"continuedChunkCompleted": {
"$ref": "#/$defs/continuedChunkCompleted"
},
"continuedChunkSequenceNumber": {
"$ref": "#/$defs/continuedChunkSequenceNumber"
},
"chunkedEventSequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"sequenceNumber": {
"$ref": "#/$defs/eventSequenceNumber"
},
"additionalInfos": {
"$ref": "#/$defs/additionalInfos"
}
},
"required": [
"messageKind",
"chunk",
"continuedChunkCompleted",
"continuedChunkSequenceNumber",
"chunkedEventSequenceNumber",
"sequenceNumber",
"additionalInfos"
],
"additionalProperties": false,
"minProperties": 7,
"maxProperties": 7
}
}
}