super-productivity/e2e/tests/sync
Johannes Millan dc0378edd6
[codex] Fix sync import conflict from startup example tasks (#7976)
* fix(sync): ignore startup example tasks during import

* fix(sync): defer startup example tasks until initial sync completes

Switch ExampleTasksService to afterInitialSyncDoneStrict$ so example tasks
are not created before the first remote import lands. On a fresh synced
client the imported tasks are then already in the store and the length===0
guard skips creation entirely — closing the same conflict for file-based
providers (Dropbox/WebDAV), which the op-log marker gate does not cover.

The isExampleTask marker + gate exclusion stay as a safety net for the
narrow case where example tasks are created on a still-empty server and an
import arrives before they are uploaded.

Also dedupe the two markRejected call sites into _discardExampleTaskOps and
document the local-only read (a remote isExampleTask flag can never bypass
the conflict dialog) and the intentional mixed-case behavior.

* test(sync): cover mixed-pending and empty-discard import gate cases

Add a SyncImportConflictGateService test for the mixed case (real pending
work + startup example tasks): the conflict dialog is still shown, but the
example-task id is reported in discardablePendingOpIds and intentionally
left for the caller to keep on USE_LOCAL — locking the documented invariant.

Also assert markRejected is not called on the config-only silent-accept path,
pinning the empty-array guard in _discardExampleTaskOps.

* test(sync): integration coverage for example-task import gate

Run the real OperationLogStoreService + SyncImportConflictGateService against
IndexedDB (no mocks) to cover the seam the unit specs stub:
- example-task creates persisted with their real multi-entity payload are
  recognized as non-meaningful and reported as discardable
- after markRejected they are actually excluded from getUnsynced() (never
  uploaded), while a pending config op is preserved
- real user work alongside example tasks still triggers the dialog
- a remote-sourced example-task op is never discardable (gate reads local
  pending only)

Verified load-bearing: removing the gate exclusion turns the first case red.

* fix(sync): mark onboarding done when example tasks are skipped

EXAMPLE_TASKS_CREATED was only written after creating example tasks, so a
synced client that skipped creation because real tasks already existed never
set the flag — and could recreate onboarding tasks on a later startup when
the task list happened to be empty.

Set the flag whenever tasks already exist at the initial-sync gate, so
onboarding runs at most once per client.

* docs(sync): note known limits of the example-task import gate

Document two accepted, narrow residuals of syncing onboarding example tasks:
- upload→piggyback path: example ops accepted in the same upload round are
  already synced and not in the discard list; state stays correct because the
  SYNC_IMPORT filter drops them as CONCURRENT on receivers.
- file-based snapshot path: hasMeaningfulStoreData() counts example tasks (no
  in-state marker), so a fresh Dropbox/WebDAV client that made example tasks
  while sync was disabled can still see the conflict dialog.

* test(sync): cover fresh-client example-task import gate (e2e)

Add a SuperSync e2e proving a fresh client with first-run example tasks accepts
an incoming SYNC_IMPORT without a conflict dialog, plus a backward-compatible
{ allowExampleTasks } opt-in to createSimulatedClient (the harness otherwise
pre-sets SUP_EXAMPLE_TASKS_CREATED).

Uses waitForInitialSync:false + a race between the conflict dialog and sync
completion so the test actually fails when the dialog appears (pre-fix), and
asserts all four onboarding titles are absent. Guards the op-log isExampleTask
marker/gate path (not the afterInitialSyncDoneStrict$ timing, which a fresh
e2e client cannot exercise since sync is disabled at boot).

* docs(sync): link example-task import-gate limitations to #7985
2026-06-03 15:57:53 +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(tasks): recover focusedTaskId when shortcut fires on a focused task 2026-05-02 19:23:26 +02: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): match renamed time-estimate icon in daily-summary spec 2026-05-08 22:30:59 +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(sync): cover incompatible supersync password change 2026-05-13 11:08:54 +02: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-example-task-fresh-client.spec.ts [codex] Fix sync import conflict from startup example tasks (#7976) 2026-06-03 15:57:53 +02: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 test(e2e): use spinner cycle for SYNC_IMPORT silent-accept completion signal 2026-04-29 16:17:56 +02: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 test(sync): scope keep-local validation assertion 2026-05-12 18:26:08 +02: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 Improve on sync (#7736) 2026-05-22 17:49:25 +02:00
supersync-lww-conflict.spec.ts Feat/issue 7330 bc1a3f (#7522) 2026-05-09 00:12:58 +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 test(e2e): scope supersync backup-revert DB restore to test user 2026-06-01 16:33:18 +02: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(e2e): add sync-stall recovery to flaky supersync setup and migration 2026-05-28 13:58:19 +02: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): scope supersync backup-revert DB restore to test user 2026-06-01 16:33:18 +02: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(sync): fix concurrent time tracking assertion 2026-05-09 19:28:19 +02: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 test: stabilize flaky e2e specs 2026-05-09 18:11:40 +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 Improve on sync (#7736) 2026-05-22 17:49:25 +02: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 test(e2e): harden failure signals and provider gates (#7753) 2026-05-23 20:33:04 +02: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