editing-traces
editing-traces copied to clipboard
Re-playable Event Graph (REG) storage format specification
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