Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
4.2 KiB
Conflict Copy
Definition
A Conflict Copy is a mechanism where, upon detection of a data conflict during synchronization, a copy of the local version of the conflicting data is preserved in a designated, separate location before the remote version overwrites the original local data.
Candidate Identity
P01, Family: Conflict Resolution, Scale: Component, Status: Draft, Maturity: Hypothesis, Evidence_kind: Primary
Context
A client application synchronizes data with a remote source. During this process, a conflict is detected between the local version of a data item and its remote counterpart.
Problem
How can the synchronization process proceed by applying the remote version of data, while still preserving the user's local changes for potential future reconciliation, without blocking the synchronization flow?
Forces
- Synchronization Priority: The need to quickly update the local client with the latest remote data to maintain consistency with the server or other clients.
- User Data Preservation: The need to avoid data loss by discarding a user's local changes when a conflict occurs.
- Simplicity of Resolution: The desire to allow users to resolve conflicts at their own pace, without immediate interruption during synchronization.
Solution
When a conflict is detected, the application creates a dedicated container (e.g., a "Conflict notebook" or folder). The local version of the conflicting data item is copied into this container. Subsequently, the remote version of the data item replaces the original local version.
Dynamics
- Synchronization initiates.
- A conflict is detected for a specific data item (e.g., a note).
- The application identifies the local version of the conflicting data.
- A copy of this local version is made and placed into a pre-defined "Conflict" container.
- The remote version of the data item then overwrites the original local data item.
- The synchronization process continues, having applied the remote change locally while preserving the pre-conflict local state.
Resulting Context
The local client now reflects the remote state of the data item, allowing synchronization to complete. The user's pre-conflict local changes are accessible in the "Conflict" container, enabling later review and manual reconciliation.
Consequences
- Pros: Prevents immediate data loss of local changes. Allows synchronization to proceed without user intervention at the moment of conflict. Provides a clear separation between automated synchronization and user-driven conflict resolution.
- Cons: Requires user action to review and potentially merge the conflict copy. The "Conflict" container might accumulate many items if not regularly managed, leading to clutter. The user might not be immediately aware of the conflict or the existence of the conflict copy.
Failure Modes
- The "Conflict" container is not easily discoverable by the user.
- The user is not adequately notified of the conflict or the creation of the conflict copy.
- The conflict copy itself is not durable or is accidentally deleted.
- The mechanism for merging or resolving the conflict copy is complex or non-existent.
Source Evidence
- C01: "it creates a Conflict notebook and copies the local note to it." (SRC-0005, Passage A)
- C02: "Then the remote note replaces the local note." (SRC-0005, Passage B)
- C03: Describes the overall process of preserving a local version and replacing the original with a remote version. (SRC-0005, Passages A and B)
Counterevidence
None.
Review Notes
The evidence clearly supports the creation of a copy of the local note and its placement in a "Conflict notebook" before the remote note replaces the local one. This directly aligns with the definition of a Conflict Copy.
Known Uses
- Joplin Conflict Notebook: The Joplin application creates a "Conflict notebook" and copies the local note to it when a conflict is detected, then the remote note replaces the local note.
- implementation: Joplin
- source_locator: SRC-0005, Passage A, Passage B
Recurrence
Recurrence: unknown
{"candidates": [{"id": "P01", "known_uses": [{"implementation": "Joplin", "source_locator": "SRC-0005, Passage A, Passage B"}], "recurrence": "unknown"}]}