This is a proposal to formalize and document serialization formats for Re-playable Event Graphs (REGs).
What are REGs? I am not an expert on REGs, but essentially it is a way to represents a sequence of all editing events in a format like this:
export interface ConcurrentTrace {
kind: 'concurrent';
endContent: 'string';
numAgents: number;
txns: ConcurrentTraceTransaction[];
}
export interface ConcurrentTraceTransaction {
parents: number[];
numChildren: number;
agent: number;
patches: [position: number, remove: number, insert: string][];
}
The key here is that:
- The full editing history is stored.
- The operations are stored in the local form
[position: number, remove: number, insert: string]. (There is no CRDT metadata.)
- Full causal graph is stored, i.e. each transaction has a list of
parents: [], which is a set of operations that this transaction depends on (knows about at the time of creation).
What I would like to get from this issue:
- Firstly, I would like to see if there is any interest for having a shared formal specification for the REG serialization format.
- Requirements: what would be a list of requirements for a REG serialization format?
- Implementation details: any tricks/gotchas/suggestions of the low-level implementation details?
cc @josephg @ept @dmonad @mweidner037 @gritzko @archagon @zxch3n
This is a proposal to formalize and document serialization formats for Re-playable Event Graphs (REGs).
What are REGs? I am not an expert on REGs, but essentially it is a way to represents a sequence of all editing events in a format like this:
The key here is that:
[position: number, remove: number, insert: string]. (There is no CRDT metadata.)parents: [], which is a set of operations that this transaction depends on (knows about at the time of creation).What I would like to get from this issue:
cc @josephg @ept @dmonad @mweidner037 @gritzko @archagon @zxch3n