super-productivity/e2e/tests/sync
Johannes Millan 654f4d80ee fix(sync): break iOS WebDAV conflict-dialog loop (#7339)
Two compounding bugs trapped iOS WebDAV users in a per-minute conflict
dialog that no button could resolve:

1. FileBasedSyncAdapter's snapshotReplacement heuristic re-fires
   gapDetected on every sync from a non-writing client (clientId \!=
   excludeClient is true forever), so the download keeps coming back
   with snapshotState and OperationLogSyncService keeps throwing
   LocalDataConflictError despite the local clock already dominating
   the remote snapshot. Skip hydration and conflict when
   compareVectorClocks(local, remote) is EQUAL or GREATER_THAN, gated
   on both clocks being non-empty so a fresh client still hydrates a
   legacy/clockless snapshot.

2. SyncWrapperService._openConflictDialog$ filtered undefined out of
   the afterClosed() stream, so a programmatic close (iOS WebView
   lifecycle, re-entry) collapsed the observable and firstValueFrom
   threw EmptyError — the user's Use Local/Use Remote/Cancel click
   never reached the resolution branches. Drop the filter so undefined
   flows through to the existing cancellation path.

The dominate-skip deliberately does NOT append result.newOps to the
op log: VectorClockService.getEntityFrontier is last-write-wins by
seq, and writing historical remote ops at the current tail would
regress per-entity frontiers and let future LWW resolution overwrite
local data. Trade-off documented inline.

Adds an adapter-level integration reproducer that asserts gapDetected
re-fires forever for a non-writing client (the upstream loop trigger),
a 3-client WebDAV e2e that reproduces the loop end-to-end against a
real provider, plus service-level tests for the dominate-skip, the
empty-clock guard, the concurrent-clock conservative path, and
consecutive-sync loop prevention.
2026-04-25 22:36:14 +02:00
..
ENCRYPTION-E2E-STATUS.md refactor(sync): consolidate LegacySyncProvider into SyncProviderId 2026-02-15 11:19:22 +01:00
import-sync.spec.ts Fix/run 22683814946 (#6740) 2026-03-05 19:37:48 +01:00
supersync-account-deletion.spec.ts fix(e2e): fix failing and flaky supersync tests 2026-02-08 14:16:06 +01:00
supersync-account-reset.spec.ts test(sync): add encryption and supersync e2e test coverage 2026-03-01 21:27:08 +01:00
supersync-advanced-edge-cases.spec.ts fix(e2e): add settle time after done-toggle to prevent sync race condition 2026-03-24 20:09:02 +01:00
supersync-advanced.spec.ts fix(sync): preserve own vector clock counter across full-state op resets 2026-04-01 15:41:13 +02:00
supersync-archive-conflict.spec.ts test(e2e): harden LWW archive and encryption password-change tests 2026-04-19 19:20:34 +02:00
supersync-archive-data-sync.spec.ts fix(sync): preserve archived tasks during server migration and backup 2026-01-14 13:45:27 +01:00
supersync-archive-subtasks.spec.ts fix(e2e): improve test stability for parallel execution 2026-01-04 17:35:47 +01:00
supersync-backup-import-id-mismatch.spec.ts test(e2e): tighten backup-export selector for renamed privacy button 2026-04-21 21:50:52 +02:00
supersync-backup-recovery.spec.ts test(e2e): fix supersync E2E tests for mandatory encryption flow 2026-03-06 16:36:38 +01:00
supersync-cascade-delete.spec.ts test(e2e): fix reliability issues in supersync E2E tests 2026-02-13 14:06:43 +01:00
supersync-compaction.spec.ts chore(e2e): remove unused eslint-disable directive 2026-02-12 16:43:11 +01:00
supersync-concurrent-delete-reorder.spec.ts fix(sync): improve move operation reliability during sync 2026-03-24 16:25:42 +01:00
supersync-concurrent-import.spec.ts test(e2e): fix supersync E2E tests for mandatory encryption flow 2026-03-06 16:36:38 +01:00
supersync-constraint-error-recovery.spec.ts fix(tests): improve synchronization tests and increase timeout for IndexedDB operations 2026-02-06 20:10:21 +01:00
supersync-cross-entity.spec.ts fix(e2e): improve test stability for parallel execution 2026-01-04 17:35:47 +01:00
supersync-daily-summary.spec.ts test(e2e): fix flaky supersync tests by preventing premature waitForURL resolution 2026-04-14 22:09:02 +02:00
supersync-day-change-overdue-6992.spec.ts test(e2e): add day-change sync convergence test (#6992) and fix lint 2026-03-29 19:57:10 +02:00
supersync-divergence-bug-6571.spec.ts fix(sync): preserve own vector clock counter across full-state op resets 2026-04-01 15:41:13 +02:00
supersync-edge-cases.spec.ts test(e2e): fix done-toggle selector to use element instead of class 2026-03-24 16:25:42 +01:00
supersync-encryption-conflict.spec.ts test(e2e): fix done-toggle selector to use element instead of class 2026-03-24 16:25:42 +01:00
supersync-encryption-password-change.spec.ts test(e2e): fix recurring future-start-date and supersync encryption tests 2026-03-18 13:14:10 +01:00
supersync-encryption-password-preservation.spec.ts test(e2e): fix supersync E2E tests for mandatory encryption flow 2026-03-06 16:36:38 +01:00
supersync-encryption.spec.ts test(e2e): fix supersync encryption tests for mandatory encryption 2026-03-06 18:19:26 +01:00
supersync-error-handling.spec.ts test(e2e): fix done-toggle selector to use element instead of class 2026-03-24 16:25:42 +01:00
supersync-error-scenarios.spec.ts test(e2e): fix supersync error scenario tests and skip failing import tests 2026-03-06 23:08:37 +01:00
supersync-global-config-edge-cases.spec.ts test(e2e): strengthen assertions in supersync E2E tests 2026-02-12 16:42:07 +01:00
supersync-import-clean-server-state.spec.ts test(e2e): fix supersync error scenario tests and skip failing import tests 2026-03-06 23:08:37 +01:00
supersync-import-clean-slate.spec.ts test(e2e): fix 11 failing supersync import tests 2026-03-07 13:28:20 +01:00
supersync-import-conflict-dialog.spec.ts fix(test): add skipSpinnerCheck to USE_REMOTE waitForSyncToComplete calls 2026-02-02 21:31:25 +01:00
supersync-import-encryption-change.spec.ts test(e2e): fix 11 failing supersync import tests 2026-03-07 13:28:20 +01:00
supersync-import-encryption-preserve.spec.ts test(e2e): fix 11 failing supersync import tests 2026-03-07 13:28:20 +01:00
supersync-import-other-client-ops.spec.ts test(e2e): fix reliability issues in supersync E2E tests 2026-02-13 14:06:43 +01:00
supersync-import-same-client-ops.spec.ts test(e2e): fix reliability issues in supersync E2E tests 2026-02-13 14:06:43 +01:00
supersync-keep-local-archive-preservation.spec.ts fix(test): add skipSpinnerCheck to USE_REMOTE waitForSyncToComplete calls 2026-02-02 21:31:25 +01:00
supersync-lastseq-preservation.spec.ts test(e2e): fix reliability issues in supersync E2E tests 2026-02-13 14:06:43 +01:00
supersync-late-join.spec.ts test(e2e): fix failing supersync E2E tests 2026-03-07 22:32:03 +01:00
supersync-legacy-migration-sync.spec.ts test(e2e): fix failing supersync E2E tests 2026-03-07 22:32:03 +01:00
supersync-lww-conflict.spec.ts fix(sync): preserve own vector clock counter across full-state op resets 2026-04-01 15:41:13 +02:00
supersync-lww-singleton.spec.ts style: fix prettier formatting errors in e2e tests and nav-item scss 2026-04-01 15:41:14 +02:00
supersync-max-retry-rejection.spec.ts test(e2e): fix failing supersync E2E tests 2026-03-07 22:32:03 +01:00
supersync-models.spec.ts test(e2e): fix failing sync tests and reduce flakiness 2026-03-27 17:33:38 +01:00
supersync-multi-tab.spec.ts feat(shepherd): remove all tours except keyboard navigation 2026-03-22 17:00:42 +01:00
supersync-network-failure.spec.ts test(supersync): fix flaky E2E tests with timing adjustments 2026-01-24 21:14:57 +01:00
supersync-no-op-sync.spec.ts test(sync): add encryption and supersync e2e test coverage 2026-03-01 21:27:08 +01:00
supersync-planner.spec.ts fix(e2e): improve test stability for parallel execution 2026-01-04 17:35:47 +01:00
supersync-provider-switch-to-supersync.spec.ts test(sync): add encryption and supersync e2e test coverage 2026-03-01 21:27:08 +01:00
supersync-provider-switch.spec.ts test(e2e): fix reliability issues in supersync E2E tests 2026-02-13 14:06:43 +01:00
supersync-realtime-push.spec.ts test(e2e): block WebSocket in SuperSync tests to prevent sync race conditions 2026-03-30 23:14:01 +02:00
supersync-reenable-and-account-switch.spec.ts test(sync): add encryption and supersync e2e test coverage 2026-03-01 21:27:08 +01:00
supersync-repeat-task-advanced.spec.ts fix(e2e): improve test stability for parallel execution 2026-01-04 17:35:47 +01:00
supersync-repeat-task.spec.ts fix(sync): only show import conflict dialog for local unsynced imports 2026-01-11 11:22:32 +01:00
supersync-server-backup-revert.spec.ts feat(sync): add backup strategy with accounts-only dump and disaster recovery docs 2026-03-18 20:15:45 +01:00
supersync-server-migration-abort.spec.ts test(sync): add encryption and supersync e2e test coverage 2026-03-01 21:27:08 +01:00
supersync-server-migration.spec.ts test(supersync): fix flaky E2E tests with timing adjustments 2026-01-24 21:14:57 +01:00
supersync-simple-counter.spec.ts test(e2e): fix supersync E2E tests for mandatory encryption flow 2026-03-06 16:36:38 +01:00
supersync-snapshot-vector-clock.spec.ts test(e2e): fix done-toggle selector to use element instead of class 2026-03-24 16:25:42 +01:00
supersync-stress.spec.ts test(e2e): fix done-toggle selector to use element instead of class 2026-03-24 16:25:42 +01:00
supersync-superseded-clock-regression.spec.ts test(e2e): fix failing supersync E2E tests 2026-03-07 22:32:03 +01:00
supersync-task-ordering.spec.ts fix(e2e): stabilize flaky supersync tests with better waiting strategies 2026-01-13 18:26:45 +01:00
supersync-time-tracking-advanced.spec.ts test(e2e): reduce supersync test flakiness 2026-01-26 13:48:10 +01:00
supersync-token-expiry.spec.ts test(e2e): fix failing supersync E2E tests 2026-02-12 18:02:14 +01:00
supersync-vector-clock-max-size.spec.ts fix(sync): remove dead code, add defensive checks, and clean up vector clock logic 2026-02-02 17:15:13 +01:00
supersync-vector-clock-pruning.spec.ts fix: resolve pre-existing lint and prettier errors blocking commits (#6840) 2026-03-15 16:47:52 +01:00
supersync-worklog.spec.ts test(e2e): reduce supersync test flakiness 2026-01-26 13:48:10 +01:00
supersync-wrong-password-error.spec.ts test(e2e): fix failing supersync E2E tests 2026-03-07 22:32:03 +01:00
supersync.spec.ts Feat/to me it looks like there are lots of 60dd04 (#7280) 2026-04-20 12:04:38 +02:00
webdav-encryption-conflict-use-local.spec.ts feat(shepherd): remove all tours except keyboard navigation 2026-03-22 17:00:42 +01:00
webdav-encryption-disable.spec.ts fix(e2e): resolve flaky WebDAV tests and fix encryption test failures 2026-01-28 21:55:04 +01:00
webdav-first-sync-conflict.spec.ts fix(sync): break iOS WebDAV conflict-dialog loop (#7339) 2026-04-25 22:36:14 +02:00
webdav-legacy-migration-sync.spec.ts test(e2e): fix failing WebDAV and SuperSync E2E tests 2026-03-23 11:07:25 +01:00
webdav-provider-switch.spec.ts test(sync): add E2E test for fresh-client sync duplication bug (b2b63da9) 2026-02-03 14:38:05 +01:00
webdav-single-client-rapid-sync.spec.ts fix(sync): preserve own vector clock counter across full-state op resets 2026-04-01 15:41:13 +02:00
webdav-sync-advanced.spec.ts test(e2e): open attachment dialog via detail panel after #7314 2026-04-25 22:36:14 +02:00
webdav-sync-archive.spec.ts feat(shepherd): remove all tours except keyboard navigation 2026-03-22 17:00:42 +01:00
webdav-sync-delete-cascade.spec.ts feat(shepherd): remove all tours except keyboard navigation 2026-03-22 17:00:42 +01:00
webdav-sync-error-handling.spec.ts fix(ci): exclude WebDAV and SuperSync tests from build workflow 2026-01-21 20:42:50 +01:00
webdav-sync-expansion.spec.ts test(e2e): fix failing sync tests and reduce flakiness 2026-03-27 17:33:38 +01:00
webdav-sync-full.spec.ts feat(sync): replace WebDAV header-based conflict detection with content hashing 2026-03-30 17:33:06 +02:00
webdav-sync-tags.spec.ts fix(ci): exclude WebDAV and SuperSync tests from build workflow 2026-01-21 20:42:50 +01:00
webdav-sync-task-order.spec.ts fix(ci): exclude WebDAV and SuperSync tests from build workflow 2026-01-21 20:42:50 +01:00
webdav-sync-today-tag.spec.ts feat(shepherd): remove all tours except keyboard navigation 2026-03-22 17:00:42 +01:00