mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
* fix(sync-core): break whole-entity LWW timestamp ties by clientId An exact-millisecond timestamp tie on the same field of one entity fell to remote-wins with no tiebreak. Because local/remote are swapped between devices, each kept the other's value and diverged permanently. Fall back to a deterministic larger-clientId compare on the tie (mirrors noiseTiebreakSide), routing a local tie-win through the existing localWinOperationKind: 'update' path so the compensating op preserves the local value and dominates the loser's clock. * refactor(sync-core): tidy LWW tiebreak helper + strengthen tie tests Multi-review follow-up (no behavior change): - drop unreachable `?? ops[0]` fallback and the unused generic in winningClientId; correct the doc comment's "mirrors" overstatement. - rewrite the mislabeled service-level tie test that never exercised the tiebreak and add the local-clientId-larger direction (compensating op). * test(sync): cover LWW client-ID tie-win over a concurrent remote DELETE The tiebreak reaches _createLocalWinUpdateOp's delete-recreation branch via a tie (not just a newer timestamp); assert the entity is still recreated. |
||
|---|---|---|
| .. | ||
| compression.spec.ts | ||
| conflict-resolution.spec.ts | ||
| download-planning.spec.ts | ||
| encryption.spec.ts | ||
| error.util.spec.ts | ||
| full-state-op-types.spec.ts | ||
| remote-apply.spec.ts | ||
| replay-coordinator.spec.ts | ||
| sync-file-prefix.spec.ts | ||
| sync-import-filter.spec.ts | ||
| upload-planning.spec.ts | ||
| vector-clock.spec.ts | ||