You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When conflicts arise during publishing, the user needs a way to decide what to do about them. A possible conflict situation would be for instance:
Editor A removes content node TextElement-1 and publishes their change. Meanwhile, Editor B edits the contents of TextElement-1. Once Editor B publishes their workspace, TextElement-1 is already gone. The changes to TextElement-1 cannot be published.
In this case, Editor B would currently run into an exception during publish:
That is, if Editor A had published their removal changes during an ongoing editing session of Editor B. In this case, Editor B would not be informed about their workspace having gone into OUTDATED_CONFLICT state.
When Editor B reloads the page, their workspace state is properly reflected:
Upon clicking the Synchronize personal workspace button, Editor B is currently informed that there's no way out of here:
Editor B is now trapped. Reasonably, they should at least be able to discard their workspace, but this currently leads to an error as well:
A way to escape this trap would be to perform a force-rebase on Editor Bs workspace. This has been implemented here: neos/neos-development-collection#4939
During the Hamburg spring, @ahaeslich, @mficzel and I discussed the following basic strategies that we can offer the user in case of conflicts:
"Discard All" - If publishing fails due to conflicts, we allow the user to throw away all changes
This additionally requires an "Are you sure?"-confirmation type dialog
For this, we would (ideally in beforehand) display information to the user, so they can understand what they're about to lose if they were to choose this strategy
Additional strategies had also been discussed (with input from @nezaniel and @mhsdesign), with regards on retaining conflicting changes for later use. We concluded that it's best to focus on the above strategies for 9.0 and explore other solutions later.
(1) A Select box in anticipation of n possible strategies. At the moment, this select box would contain the options "Discard All", "Save what you can" and "Cancel". The latter will just abort the publishing operation. (2) Conflicts may be complex and numerous. We will need some way to summarize them for editors.
Open Questions
What info can we reasonably display about publishing conflicts in the UI?
How do we explain that "Discard All" during conflict resolution is not the same thing as "Discard All" in the Publish Dropdown?
"Discard All" during conflict resolution will discard everything in the workspace
"Discard All" in the Publish Dropdown will discard all changes in the current site, but leave other sites untouched
Acceptance Criteria
If a user clicks on "Synchronize" and a conflict arises during the rebase operation, they are presented with a dialog that allows them to choose between several conflict resolution strategies
If a user chooses "Cancel" from the resolution strategy selection, the rebase operation is aborted without side effects
If a user chooses "Discard all" from the resolution strategy selection, their changes are discarded globally
If a user chooses "Save what you can" from the resolution strategy selection, they are presented with a dialog summarizing what changes they are about to lose
If a user clicks on "Cancel" in the "Save what you can" summary dialog, they are again presented with the resolution strategy selection
There is an E2E test scenario that creates a conflict state between two editors and asserts the results of choosing "Discard all" as a resolution strategy during rebase
There is an E2E test scenario that creates a conflict state between two editors and asserts the results of choosing "Save what you can" as a resolution strategy during rebase
The text was updated successfully, but these errors were encountered:
Good description. I only would add that the we ended up calling "Save what you can" forced-rebase.
Also it would be a viable option for 9.0 to include those in the rebase dialog when the workspace is in OUTDATED_CONFLICT state where it currently only says "call your admin | cancel".
grebaldi
changed the title
FEATURE: Offer resolution strategies when conflicts arise during publishing
FEATURE: Offer resolution strategies when conflicts arise during rebase
Mar 25, 2024
When conflicts arise during publishing, the user needs a way to decide what to do about them. A possible conflict situation would be for instance:
In this case,
Editor B
would currently run into an exception during publish:That is, if
Editor A
had published their removal changes during an ongoing editing session ofEditor B
. In this case,Editor B
would not be informed about their workspace having gone intoOUTDATED_CONFLICT
state.When
Editor B
reloads the page, their workspace state is properly reflected:Upon clicking the
Synchronize personal workspace
button,Editor B
is currently informed that there's no way out of here:Editor B
is now trapped. Reasonably, they should at least be able to discard their workspace, but this currently leads to an error as well:A way to escape this trap would be to perform a
force-rebase
onEditor B
s workspace. This has been implemented here: neos/neos-development-collection#4939During the Hamburg spring, @ahaeslich, @mficzel and I discussed the following basic strategies that we can offer the user in case of conflicts:
force
strategy to the rebase workspace command neos-development-collection#4939)Additional strategies had also been discussed (with input from @nezaniel and @mhsdesign), with regards on retaining conflicting changes for later use. We concluded that it's best to focus on the above strategies for 9.0 and explore other solutions later.
Here's a sketch for a possible dialog workflow:
(https://excalidraw.com/#room=b7f4a755ffda65849f6a,1SW-iMdJIpdvwWJWwb-CdQ)
(1) A Select box in anticipation of
n
possible strategies. At the moment, this select box would contain the options "Discard All", "Save what you can" and "Cancel". The latter will just abort the publishing operation.(2) Conflicts may be complex and numerous. We will need some way to summarize them for editors.
Open Questions
RebaseFailedException
(see: TASK: Introduce rebase failed exception and deprecateWorkspaceRebaseFailed
neos-development-collection#4965) gives us a list of failed commands accompanied by the exception that made the respective command fail. We can deduce from the command which node was affected and what kind of modification was made. We can deduce from the exception class what has caused the conflict.Acceptance Criteria
force
flag (as established in TASK: Addforce
strategy to the rebase workspace command neos-development-collection#4939) totrue
The text was updated successfully, but these errors were encountered: