From 0f6b4d07ed76a6827ad587fab77d950e5a5c4b80 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Mon, 10 Mar 2025 17:21:14 +0100 Subject: [PATCH 1/7] docs: suggestions architecture WIP --- adr/2025_03_10-suggestions/README.md | 172 ++++++++++++++++++ .../diff-yjs-snapshots.md | 32 ++++ .../images/doc+suggestions.png | Bin 0 -> 28164 bytes .../images/doc+suggestions_merged.png | Bin 0 -> 108785 bytes .../images/doc+suggestions_patch.png | Bin 0 -> 20802 bytes .../suggestions-as-content.md | 22 +++ .../suggestions-as-history.md | 31 ++++ .../suggestions-as-patches.md | 23 +++ 8 files changed, 280 insertions(+) create mode 100644 adr/2025_03_10-suggestions/README.md create mode 100644 adr/2025_03_10-suggestions/diff-yjs-snapshots.md create mode 100644 adr/2025_03_10-suggestions/images/doc+suggestions.png create mode 100644 adr/2025_03_10-suggestions/images/doc+suggestions_merged.png create mode 100644 adr/2025_03_10-suggestions/images/doc+suggestions_patch.png create mode 100644 adr/2025_03_10-suggestions/suggestions-as-content.md create mode 100644 adr/2025_03_10-suggestions/suggestions-as-history.md create mode 100644 adr/2025_03_10-suggestions/suggestions-as-patches.md diff --git a/adr/2025_03_10-suggestions/README.md b/adr/2025_03_10-suggestions/README.md new file mode 100644 index 000000000..d3c92de16 --- /dev/null +++ b/adr/2025_03_10-suggestions/README.md @@ -0,0 +1,172 @@ +# Versioning & Suggestions + +Due to the similarity between document versioning, red lining, track changes and suggestions, it is worth seeing an overview of all of their requirements to make sure we consider solutions that resolve multiple of them. + +- A diff between two versions of a document, is essentially a set of suggestions that takes your previous document, and transforms it into the more recent document. +- Red-lining and suggestions are the same, red-lining just allows you to attach metadata to the suggestion, like a comment of why the change was made. +- Track changes, is entering a mode where any edit you make, becomes a suggestion to the document. + +## Versioning Overview + +Versioning has already been implemented for Y.js & y-prosemirror, but to be explicit about the sort of thing we are looking for it is good to explicitly state the feature set versioning should have: + +- A user can take _snapshots_ of the current document state, and store that in a separate data store +- These snapshots can be viewed independently at any point in time later +- These snapshots can be _compared_ with each other + - This allows the user to see what changed between the two snapshots + - Changes should show: + - The content that was changed (i.e. additions or deletions) + - Updates to content (i.e. changing an attribute) + - Which user identifiers modified the content + - Ideally, a timestamp of when the content was modified + - Changes should only show content that was present in both documents (i.e. if some content was added and subsequently deleted in some version between the two snapshots, because it is not present in the final document of either snapshot, it should not show) + - These changes can be visualized in a number of ways: as a unified diff, split diff, or even stacked diff. _See [Appendix](#displaying-changes) for more information_ + +**Prior Art:** + +- Google Docs [Video here] + +### Suggestions Overview + +Suggestions are the ability to make changes to a document and have those changes tracked separately from the document content. This allows modifications to the document in a way that can be audited, and either approved or rejected by another party. + +- A user can turn on a mode, suggestion mode, which makes all of their edits to a document be tracked, but stored separately from the document itself. + - The original document should be unmodified when suggestion mode is turned back off. +- These stored changes, can be reviewed, and either approved or rejected separately. + - Approving a suggestion should apply the change to the document, Rejecting should drop that suggestion +- A suggestion may become "invalid" if the document that the change has been modified in a way that the change can no longer be applied (e.g. an insertion into a deleted paragraph, or a deletion of an already deleted paragraph) +- A suggestion should store: + - The content of the suggestion based on the type of suggestion + - **insertions:** where to insert the change, the content to insert + - **deletions:** where to delete the content, the content to be deleted + - **updates:** where to update the content, what key to update, what value to set the key to + - A timestamp of when the suggestion was proposed + - Which user proposed the suggestion + - An optional thread identifier, for discussion around why the change was made + +**Prior Art:** + +- Google Docs: [video here] + +### Similarities + +Versioning and suggestions have quite a bit of overlap between them, they both rely on having a set of changes which store: + +- user: who made the change (the change's attribution) +- timestamp: of when the change was made +- content: what changed & it's location in the document + +Ideally, we could re-use some of the logic and data structures between them for both features, since they overlap in representation and visualization to users. + +## What we need to decide + +### How should Y.js snapshots be compared + +Y.js already has versioning in the form of snapshots of the Y.js document, at a point in time. In Y.js, the snapshots have the nice property of having some form of a history associated to those edits. To figure out what changed, you could calculate a diff between the two histories of the document. Doing a comparison based on the document content alone, would not meet our requirement of being able to display who made the change and when. Luckily, in Y.js, there is additional metadata that we can extract from Y.js which can tell us which `clientID` made the change (`clientID` being an ID a user assumes when making edits to a document). More on how to calculate that diff here: [Diff two Y.js Snapshots](./diff-yjs-snapshots.md) + +This would be the most straightforward way to capture changes across versions of a document. The question then becomes how to display those changes within a prosemirror-based editor, which sort of depends on the approach taken for suggestions. + +### How should suggestions be stored + +There are a few different mental models we can use to represent or derive these changes: + +- [_Branched document histories_, and diffs between them](./suggestions-as-history.md) +- [Stored _patches_ and later applying that patch to a document](./suggestions-as-patches.md) +- [New _content types_ which represent the changes within the document content](./suggestions-as-content.md) + +### AttributionManager + +Currently, Y.js has been using a `PermanentUserData` class to keep track and store the `clientID`s that a specific user has used previously. Kevin has some ideas on an improved system for this, which he can elaborate on in detail, later. This will be crucial to how we can attribute users in prior versions of the document. + +If I were to share my wish-list for features this should have, it would be able to answer questions like: + +- Given a `clientID`, what `userID` made this change? +- At what time was this `clientID` first used? + - This gives approximate times for attributing content to a time, without having to store an additional timestamp per change). + - Most people don't need the specific time, they just want to know relative time "Is this days, months or years old?" + - Auditing should be done at a different level, and not in a user writable data structure like a YDoc + +I'd like to have Kevin give more details on the sort of features/properties we can expect from this. It will be a crucial feature to the implementation, and likely to be worked on first since it will be foundational to how the versioning works. + +## Summary + +This document was purposefully written from the perspective that Y.js is one of many document storage and synchronization mechanisms. And, we would like to keep our editor de-coupled from these specific implementation details as much as possible to encourage code re-use between different implementations. + +## Appendix + +This is a collection of scattered thoughts on the _diff_-erent aspects of diffing (sorry, had to), and their complications. + +### Diffing HTML + +Diffing HTML is fundamentally different than diffing by the semantics of a document. This, is probably best described in an example: + +Take the following document: + +```html +

Some text

+

More text

+``` + +Let's say that the user deletes the range of text from "text" and collapses the two paragraphs into 1 paragraph, resulting in this document: + +```html +

Some More text

+``` + +If we examine the changes, this is actually multiple operations: + +- deletion of the word "text" +- insertion of the words "More text" at the position where "text" was +- deletion of 2nd paragraph + +If we were to represent this change using HTML elements it was meant to look like this: + +```html +

Some text

+

More text

+``` + +Yet, a diff would represent it like this: + +```html +

Some textMore text

+

More text

+``` + +They ultimately result in the same in the final document but, the difference is in their semantics and user expectations. There are probably ways to simplify these changes in such a way that it is closer to what the user actually intended with the change (e.g. Prosemirror's [simplifyChanges](https://github.com/ProseMirror/prosemirror-changeset)), but it gets complicated rather quickly and we have to face that it may not always be easy to represent/display. + +### Displaying changes + +There are actually a few different ways to display changes in a document. Above, I was describing changes in what is called a _unified diff_. where changes are inter-leaved into the document using inline content and markers for where the inserted and deleted content exists. But, that is just one way to display a diff, you can also display diffs using a _split diff_ like so: + +```txt +❯ delta a b +1/a ⟶ 2/b +────────────────────────────────────────────────────── + +───┐ +1: │ +───┘ +│ 1 │

Some text

│ │ +│ 2 │

More text

│ │ +│ │ │ 1 │

Some More text

+``` + +And, there is _stacked diffs_, too! + +```txt +❯ diff a b +1,2c1 +<

Some text

+<

More text

+\ No newline at end of file +--- +>

Some More text

+\ No newline at end of file +``` + +The nice thing about these different ways of displaying diffs, is that they are better at representing certain kinds of changes (especially when they are colorized unlike these examples). For example, for block-level changes, the unified diff seems to capture this change the best, it becomes clear that two lines became one. + +So, there are multiple ways to display diffs, and they can be advantageous in different situations. Ideally, our solution would have flexibility in displaying changes in any of these ways. + +> As a matter of practicality, we are also looking into using these different ways of displaying diffs for things like displaying LLM responses, like if an LLM were to rewrite some content, it could display in a split diff view to show the changes the LLM actually made. So, this is not just a theoretical want, but something we would want to build this year. diff --git a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md new file mode 100644 index 000000000..4a3c2ed54 --- /dev/null +++ b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md @@ -0,0 +1,32 @@ + +# Diff two Y.js snapshots + +Y.js keeps track of metadata around what changes have been made to a document in order to efficiently synchronize changes. So, to compare a document with it's previous version, you can leverage this metadata by taking a snapshot of the full history of a document, and compare the insertions and deletions that have been made between the two snapshots. Because they share history, you can figure out what has been modified from _this point_ in history compared to _that point_ in history. For clarity, let's call this a `y-diff` for now to make sure it is different than a full content diff. + +## Changes as _attributes_ + +Kevin has already implemented a preliminary version of the `y-diff` between two documents. Specifically, by using `ychange` attributes to add metadata onto elements to indicate whether they were modified between the two versions. This approach works for simple documents at the moment, with some limitations around: + +- Certain features are missing (due to this being preliminary work) like + - XYZ +- Controlling the display of the diff: + - y-prosemirror is controlling how the diffs are rendered so doing something like a stacked diff would not be possible + - Trying to simplify changes to a more human understandable version as described in the HTML diffing section would not be possible, since y-prosemirror directly writes the changes it finds to elements +- Inability to edit content while displaying diffs + - For something like suggestions to work in the future, there needs to be a way to modify the document & still present the suggestions that have been made + +## Changes as _marks_ + +Another approach, would be to model what is currently being represented as attributes, but instead use marks similar to [`@handlewithcare/prosemirror-suggest-changes`'s schema](https://github.com/handlewithcarecollective/prosemirror-suggest-changes?tab=readme-ov-file#schema) where the content changes are represented as marks. This would allow flexibility in display (because of support for [markviews](https://prosemirror.net/docs/ref/#view.MarkView) which can decouple content from presentation). + +Though, I question whether it _should_ be the responsibility of `y-prosemirror` to be both finding the difference and modifying the content of the document to display those differences. It feels like `y-prosemirror` should be scoped to the integration of yjs & prosemirror, and this is somewhat out of scope for it. I would be okay with `y-prosemirror` providing utilities to find the `y-diff` between documents in the y-prosemirror format, but the responsibility of how that integrates with prosemirror should be the responsibility of the caller of that function, rather than, built into the `y-sync` plugin. + +## Changes as a _list of diffs_ + +One approach for this would be for y-prosemirror to provide the `y-diff` between two documents as a list of modifications, which can then be interpreted by another program to choose how to display or render those sets of changes. This is similar in approach to the snapshot compare extension that I implemented. + +This is non-trivial, because the shape of the document is nested and almost arbitrary. Difficult, but doable - this is exactly the sort of approach that [Snapshot Compare feature](https://tiptap.dev/docs/collaboration/documents/snapshot-compare#page-title) works on. It diffs two snapshots of Y.js documents, and is able to create a list of diffs between them, which can be displayed within the editor content. But, this feature is view-only, how would we be able to apply only specific segments? + +> Also, it is worth noting that this feature not only did the diff based on the document content, but actually by diffing the Y.js data structure itself, to attribute specific changes to specific users. + +There is a neat little trick in how these diffs are generated, it was to not just a list of changes, but actually as granular Prosemirror steps. Why do it like this? This means, that to apply only a single diff, would be as easy as applying only a single step of a transform! I never actually got around to implementing that part of the feature for time constraints, but that should 'just work' ™. Another nice property of this, is that, theoretically, you could also replace `y-sync` to do diffs with the new update that came in and have granular updates to a prosemirror document, which gives a much nicer experience for prosemirror devs whose plugins do not have to be aware of Yjs replacing the document content on each update. diff --git a/adr/2025_03_10-suggestions/images/doc+suggestions.png b/adr/2025_03_10-suggestions/images/doc+suggestions.png new file mode 100644 index 0000000000000000000000000000000000000000..887fb77cc063a79e0b31acde3f0a7f9540c1e74c GIT binary patch literal 28164 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%0AbVG8v9KojPn1Z!mtbUL8W?WgS}$W7^&yn+d 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�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 HOdkIqcHTm~ literal 0 HcmV?d00001 diff --git a/adr/2025_03_10-suggestions/images/doc+suggestions_patch.png b/adr/2025_03_10-suggestions/images/doc+suggestions_patch.png new file mode 100644 index 0000000000000000000000000000000000000000..0471e55f86ea20e8bac802b65f38b2d637642539 GIT binary patch literal 20802 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 Date: Mon, 10 Mar 2025 20:09:02 +0100 Subject: [PATCH 2/7] chore: cleanup --- adr/2025_03_10-suggestions/diff-yjs-snapshots.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md index 4a3c2ed54..fa877f1ec 100644 --- a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md +++ b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md @@ -23,10 +23,4 @@ Though, I question whether it _should_ be the responsibility of `y-prosemirror` ## Changes as a _list of diffs_ -One approach for this would be for y-prosemirror to provide the `y-diff` between two documents as a list of modifications, which can then be interpreted by another program to choose how to display or render those sets of changes. This is similar in approach to the snapshot compare extension that I implemented. - -This is non-trivial, because the shape of the document is nested and almost arbitrary. Difficult, but doable - this is exactly the sort of approach that [Snapshot Compare feature](https://tiptap.dev/docs/collaboration/documents/snapshot-compare#page-title) works on. It diffs two snapshots of Y.js documents, and is able to create a list of diffs between them, which can be displayed within the editor content. But, this feature is view-only, how would we be able to apply only specific segments? - -> Also, it is worth noting that this feature not only did the diff based on the document content, but actually by diffing the Y.js data structure itself, to attribute specific changes to specific users. - -There is a neat little trick in how these diffs are generated, it was to not just a list of changes, but actually as granular Prosemirror steps. Why do it like this? This means, that to apply only a single diff, would be as easy as applying only a single step of a transform! I never actually got around to implementing that part of the feature for time constraints, but that should 'just work' ™. Another nice property of this, is that, theoretically, you could also replace `y-sync` to do diffs with the new update that came in and have granular updates to a prosemirror document, which gives a much nicer experience for prosemirror devs whose plugins do not have to be aware of Yjs replacing the document content on each update. +One approach for this would be for y-prosemirror to provide the `y-diff` between two documents as a list of modifications, which can then be interpreted by another program to choose how to display or render those sets of changes. This de-couples the responsibility of showing the changes in the editor, from the responsibility of viewing, accepting or rejecting those changes. From 934e4d8245c8a4b2432eb6a1f071a4b5edc05627 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Mon, 10 Mar 2025 20:17:04 +0100 Subject: [PATCH 3/7] docs: more updates from feedback --- adr/2025_03_10-suggestions/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/adr/2025_03_10-suggestions/README.md b/adr/2025_03_10-suggestions/README.md index d3c92de16..b29a5adcd 100644 --- a/adr/2025_03_10-suggestions/README.md +++ b/adr/2025_03_10-suggestions/README.md @@ -32,6 +32,7 @@ Suggestions are the ability to make changes to a document and have those changes - A user can turn on a mode, suggestion mode, which makes all of their edits to a document be tracked, but stored separately from the document itself. - The original document should be unmodified when suggestion mode is turned back off. + - If in suggestion mode, and the user has write access to the document, they should be able to make changes to the document without having to leave suggestion mode. Such as applying a suggestion to the document. - These stored changes, can be reviewed, and either approved or rejected separately. - Approving a suggestion should apply the change to the document, Rejecting should drop that suggestion - A suggestion may become "invalid" if the document that the change has been modified in a way that the change can no longer be applied (e.g. an insertion into a deleted paragraph, or a deletion of an already deleted paragraph) @@ -68,11 +69,11 @@ This would be the most straightforward way to capture changes across versions of ### How should suggestions be stored -There are a few different mental models we can use to represent or derive these changes: +Suggestions are different from versioning in that, they are not a history of the document, but a set of pending changes that can be applied to the document. They may be rejected, or may be applied to the document. So, in a sense, they are a patch to the document. But, there are a few different mental models we can use to represent or store these changes to the document: -- [_Branched document histories_, and diffs between them](./suggestions-as-history.md) -- [Stored _patches_ and later applying that patch to a document](./suggestions-as-patches.md) -- [New _content types_ which represent the changes within the document content](./suggestions-as-content.md) +- [Seeing a suggestion as a _branch of the document history_, and the suggestion as being the diff between the two branches](./suggestions-as-history.md) +- [Storing document _patches_ and later applying that patch to a document](./suggestions-as-patches.md) +- [Suggestions as _document content_ which stores the changes within the document](./suggestions-as-content.md) ### AttributionManager From 4773355c35f1f8b8f658b9dd1b141d818f2a40aa Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Mon, 10 Mar 2025 20:26:04 +0100 Subject: [PATCH 4/7] docs: add a bit more detail --- .../diff-yjs-snapshots.md | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md index fa877f1ec..d176c71cb 100644 --- a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md +++ b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md @@ -3,7 +3,13 @@ Y.js keeps track of metadata around what changes have been made to a document in order to efficiently synchronize changes. So, to compare a document with it's previous version, you can leverage this metadata by taking a snapshot of the full history of a document, and compare the insertions and deletions that have been made between the two snapshots. Because they share history, you can figure out what has been modified from _this point_ in history compared to _that point_ in history. For clarity, let's call this a `y-diff` for now to make sure it is different than a full content diff. -## Changes as _attributes_ +## Representing these changes in the editor + +I won't go into detail about how to implement the `y-diff` between two documents, given that it is partially implemented in y-prosemirror, but will instead focus on how those changes end up being represented within the editor. + +We have a few different options: + +### Changes as _attributes_ Kevin has already implemented a preliminary version of the `y-diff` between two documents. Specifically, by using `ychange` attributes to add metadata onto elements to indicate whether they were modified between the two versions. This approach works for simple documents at the moment, with some limitations around: @@ -15,12 +21,20 @@ Kevin has already implemented a preliminary version of the `y-diff` between two - Inability to edit content while displaying diffs - For something like suggestions to work in the future, there needs to be a way to modify the document & still present the suggestions that have been made -## Changes as _marks_ +### Changes as _marks_ Another approach, would be to model what is currently being represented as attributes, but instead use marks similar to [`@handlewithcare/prosemirror-suggest-changes`'s schema](https://github.com/handlewithcarecollective/prosemirror-suggest-changes?tab=readme-ov-file#schema) where the content changes are represented as marks. This would allow flexibility in display (because of support for [markviews](https://prosemirror.net/docs/ref/#view.MarkView) which can decouple content from presentation). Though, I question whether it _should_ be the responsibility of `y-prosemirror` to be both finding the difference and modifying the content of the document to display those differences. It feels like `y-prosemirror` should be scoped to the integration of yjs & prosemirror, and this is somewhat out of scope for it. I would be okay with `y-prosemirror` providing utilities to find the `y-diff` between documents in the y-prosemirror format, but the responsibility of how that integrates with prosemirror should be the responsibility of the caller of that function, rather than, built into the `y-sync` plugin. -## Changes as a _list of diffs_ +### Changes as a _list of diffs_ + +One approach for this would be for y-prosemirror to provide the `y-diff` between two documents as a list of modifications, which can then be interpreted by another program (at the prosemirror level) to choose how to display, or render, those sets of changes. This de-couples the responsibility of showing the changes in the editor, from the responsibility of viewing, accepting or rejecting those changes. + +This would mean that the YDoc content would need to be serialized into a format that can be used by the caller to + +- Display the changes in the editor +- Apply/reject a change to the document +- Display those changes outside of the editor (e.g. in a side panel) -One approach for this would be for y-prosemirror to provide the `y-diff` between two documents as a list of modifications, which can then be interpreted by another program to choose how to display or render those sets of changes. This de-couples the responsibility of showing the changes in the editor, from the responsibility of viewing, accepting or rejecting those changes. +This would be a more complex approach, but would allow for more flexibility in how the changes are displayed within the editor, and how those diffs can be used in the future. From 212090ab82beb6047b216ff01bbb23f6dfa99dd9 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Mon, 10 Mar 2025 20:30:24 +0100 Subject: [PATCH 5/7] docs: update to make it not html specific --- adr/2025_03_10-suggestions/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/adr/2025_03_10-suggestions/README.md b/adr/2025_03_10-suggestions/README.md index b29a5adcd..c2ceabb9f 100644 --- a/adr/2025_03_10-suggestions/README.md +++ b/adr/2025_03_10-suggestions/README.md @@ -97,9 +97,9 @@ This document was purposefully written from the perspective that Y.js is one of This is a collection of scattered thoughts on the _diff_-erent aspects of diffing (sorry, had to), and their complications. -### Diffing HTML +### Keeping user intent, while diffing -Diffing HTML is fundamentally different than diffing by the semantics of a document. This, is probably best described in an example: +Diffing nested data structures (e.g. HTML) is fundamentally different than diffing by the semantics of a document. This, is probably best described in an example: Take the following document: @@ -136,6 +136,8 @@ Yet, a diff would represent it like this: They ultimately result in the same in the final document but, the difference is in their semantics and user expectations. There are probably ways to simplify these changes in such a way that it is closer to what the user actually intended with the change (e.g. Prosemirror's [simplifyChanges](https://github.com/ProseMirror/prosemirror-changeset)), but it gets complicated rather quickly and we have to face that it may not always be easy to represent/display. +Whatever the approach, we need to make sure that the changes are displayed in a way that is easy to understand and aligns with the user's intent. + ### Displaying changes There are actually a few different ways to display changes in a document. Above, I was describing changes in what is called a _unified diff_. where changes are inter-leaved into the document using inline content and markers for where the inserted and deleted content exists. But, that is just one way to display a diff, you can also display diffs using a _split diff_ like so: From f4a6b81897f9169a31b4d420c5e7be6fb7c75dc8 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Tue, 11 Mar 2025 09:23:17 +0100 Subject: [PATCH 6/7] chore: add more links --- adr/2025_03_10-suggestions/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/adr/2025_03_10-suggestions/README.md b/adr/2025_03_10-suggestions/README.md index c2ceabb9f..03340d390 100644 --- a/adr/2025_03_10-suggestions/README.md +++ b/adr/2025_03_10-suggestions/README.md @@ -24,7 +24,9 @@ Versioning has already been implemented for Y.js & y-prosemirror, but to be expl **Prior Art:** -- Google Docs [Video here] +- Google Docs +- [Upwelling](https://www.inkandswitch.com/upwelling/) +- [Patchwork](https://www.inkandswitch.com/patchwork/notebook/) ### Suggestions Overview @@ -47,7 +49,8 @@ Suggestions are the ability to make changes to a document and have those changes **Prior Art:** -- Google Docs: [video here] +- Google Docs +- [Manuscripts Track Changes](https://github.com/Atypon-OpenSource/manuscripts-track-changes-plugin), [prosemirror-suggest-changes](https://github.com/handlewithcarecollective/prosemirror-suggest-changes), [prosemirror-suggestion-mode](https://github.com/davefowler/prosemirror-suggestion-mode/) and [wax prosemirror tracked changes](https://gitlab.coko.foundation/wax/wax-prosemirror/-/blob/master/wax-prosemirror-core/src/utilities/track-changes/trackedTransaction.js?ref_type=heads) ### Similarities From dc2147a1b1374637ddca9d9e7b739ded8cac4546 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Wed, 12 Mar 2025 16:15:10 +0100 Subject: [PATCH 7/7] docs: update after meeting notes --- adr/2025_03_10-suggestions/README.md | 31 +++++++++++++++---- .../diff-yjs-snapshots.md | 5 +++ .../suggestions-as-content.md | 2 ++ .../suggestions-as-history.md | 9 ++++++ .../suggestions-as-patches.md | 2 ++ 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/adr/2025_03_10-suggestions/README.md b/adr/2025_03_10-suggestions/README.md index 03340d390..221c1541c 100644 --- a/adr/2025_03_10-suggestions/README.md +++ b/adr/2025_03_10-suggestions/README.md @@ -10,12 +10,16 @@ Due to the similarity between document versioning, red lining, track changes and Versioning has already been implemented for Y.js & y-prosemirror, but to be explicit about the sort of thing we are looking for it is good to explicitly state the feature set versioning should have: -- A user can take _snapshots_ of the current document state, and store that in a separate data store +- A document can be _snapshotted_ at any point in time. + - This is stored in a separate data store, in a Y.js document + - This can be done either by: + - A user manually choosing to save the document at a point in time (potentially with metadata like a version name, and a description of the changes made) + - Automatically when changes are made to the document + - Automatically on intervals (e.g. every 5 minutes or 100 changes) - These snapshots can be viewed independently at any point in time later -- These snapshots can be _compared_ with each other - - This allows the user to see what changed between the two snapshots - - Changes should show: - - The content that was changed (i.e. additions or deletions) +- These snapshots can be _compared_ with each other to see what changes were made between them + - Each change, should show: + - The content that was changed (i.e. additions or deletions or updates) - Updates to content (i.e. changing an attribute) - Which user identifiers modified the content - Ideally, a timestamp of when the content was modified @@ -100,6 +104,17 @@ This document was purposefully written from the perspective that Y.js is one of This is a collection of scattered thoughts on the _diff_-erent aspects of diffing (sorry, had to), and their complications. +### Timestamps + +While a timestamp seems like a simple thing to add to a change, it is actually a surprisingly difficult problem. Is a timestamp: + +- The time the change was made? + - From when they started typing? When they finished typing? +- From when they started editing the document? +- The time the change was accepted by the server? + +At what granularity should we be storing timestamps? Do we need to store them to millisecond precision? + ### Keeping user intent, while diffing Diffing nested data structures (e.g. HTML) is fundamentally different than diffing by the semantics of a document. This, is probably best described in an example: @@ -141,6 +156,9 @@ They ultimately result in the same in the final document but, the difference is Whatever the approach, we need to make sure that the changes are displayed in a way that is easy to understand and aligns with the user's intent. +> [!NOTE] +We are specifically not trying to represent the content as a flat YText document even though it may make this easier. In the interest of re-using the work on y-prosemirror as is. + ### Displaying changes There are actually a few different ways to display changes in a document. Above, I was describing changes in what is called a _unified diff_. where changes are inter-leaved into the document using inline content and markers for where the inserted and deleted content exists. But, that is just one way to display a diff, you can also display diffs using a _split diff_ like so: @@ -175,4 +193,5 @@ The nice thing about these different ways of displaying diffs, is that they are So, there are multiple ways to display diffs, and they can be advantageous in different situations. Ideally, our solution would have flexibility in displaying changes in any of these ways. -> As a matter of practicality, we are also looking into using these different ways of displaying diffs for things like displaying LLM responses, like if an LLM were to rewrite some content, it could display in a split diff view to show the changes the LLM actually made. So, this is not just a theoretical want, but something we would want to build this year. +> [!NOTE] +As a matter of practicality, we are also looking into using these different ways of displaying diffs for things like displaying LLM responses, like if an LLM were to rewrite some content, it could display in a split diff view to show the changes the LLM actually made. So, this is not just a theoretical want, but something we would want to build this year. diff --git a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md index d176c71cb..98dcb7cdb 100644 --- a/adr/2025_03_10-suggestions/diff-yjs-snapshots.md +++ b/adr/2025_03_10-suggestions/diff-yjs-snapshots.md @@ -38,3 +38,8 @@ This would mean that the YDoc content would need to be serialized into a format - Display those changes outside of the editor (e.g. in a side panel) This would be a more complex approach, but would allow for more flexibility in how the changes are displayed within the editor, and how those diffs can be used in the future. + +## To be determined + +- How do we represent a diff in the YDoc? + - At what level should we represent this diff? Yjs should probably have a low-level API for this to compare two documents. But, what should that look like at the Prosemirror level? There is already the Delta format, but would this have the metadata we need to fully represent the changes? diff --git a/adr/2025_03_10-suggestions/suggestions-as-content.md b/adr/2025_03_10-suggestions/suggestions-as-content.md index b5ed1fff6..a58f72e27 100644 --- a/adr/2025_03_10-suggestions/suggestions-as-content.md +++ b/adr/2025_03_10-suggestions/suggestions-as-content.md @@ -18,5 +18,7 @@ There will be additional metadata that could be tracked as attributes to these m ## Cons +The main tradeoff of this approach is around permissions (e.g. a suggestion-only user), at least without resorting to some server-side inspection of content changes (like comments). Theoretically, to get around this, you could use cryptography to sign the content of these changes to ensure that they have not been tampered with across editors, but a suggestion user would still have enough permissions to write into the document when they should not be able to. + - Adds complexity to displaying content in the editor, may need to rely on things like decorations to hide content we do not want to display - Since it is not a separate document, the permissions have to be the same as having write permissions to the document diff --git a/adr/2025_03_10-suggestions/suggestions-as-history.md b/adr/2025_03_10-suggestions/suggestions-as-history.md index 43d9285f7..c057f2604 100644 --- a/adr/2025_03_10-suggestions/suggestions-as-history.md +++ b/adr/2025_03_10-suggestions/suggestions-as-history.md @@ -29,3 +29,12 @@ When viewing what suggestions are available on a document, the frontend would ha - If diffing on the JSON, are we just recreating the version snapshot comparison and duplicating the work involved? - Complicated to setup - Storage of the branched versions need to be kept up to date (i.e. must apply new updates since the branch) and need to store that document separately + +## To be determined + +- How can we sync the branched versions? +- How does the editor know to edit the root document versus the suggestion document? + - It is unclear how to have 2 sources of truth for editing a single ProseMirror document. + - Who is responsible for synchronizing the change made? + - If it is the editor, then this potentially complicates a lot of the ProseMirror logic, forcing it to be "suggestion aware" + - If it is y-prosemirror, as the sync layer, how do we support different backends than Y.js? We'd still like to have suggestions usable on editors without Y.js diff --git a/adr/2025_03_10-suggestions/suggestions-as-patches.md b/adr/2025_03_10-suggestions/suggestions-as-patches.md index 986d23c29..51aab3fc7 100644 --- a/adr/2025_03_10-suggestions/suggestions-as-patches.md +++ b/adr/2025_03_10-suggestions/suggestions-as-patches.md @@ -19,5 +19,7 @@ One easy implementation of this is to have a suggestion be a serialization of a ### Cons +The main drawback of this approach is that it is significantly different from the approach we'd use for diffing versions of documents. Meaning that we'd have to come up with a different approach for storing the changes. Even so, relative positions also have some edge cases that we'd have to consider. + - This stores the change in a separate data structure, which would need to be either maintained by mapping new positions through, or using relative positions. - Being in a different data structure presents risk for being invalidated by changes to the document (which may not have been intentional). Imagine moving a paragraph that had a suggestion on it, it could result in the suggestion pointing into an element which no longer exists.