serverpod-offline-sync/CHANGELOG.md

105 lines
5 KiB
Markdown
Raw Normal View History

## Unreleased
- fix: Include the persisted local logical clock in resume checkpoints so
reconnecting within the same millisecond or after clock rollback settles.
- fix: Keep relay checkpoints tagged with their actual author and recover
incorrectly tagged stored progress without repeated transfers on reconnect.
- fix: Require `recordSyncCheckpoint` to receive an HLC authored by its
`otherNodeId`, throwing `ArgumentError` on a mismatch. Valid checkpoints
replace incorrectly tagged stored progress.
- fix: Reconsider released unique claims after local updates and upserts so
the author and peers receiving checkpoint deltas keep the same projection.
- test: Add checkpoint-based deterministic delivery alongside full-history
convergence, with replayable batches and separate coverage metrics.
## 0.0.9
- fix: Refreshes node clocks across sync wrappers.
- fix: Repairs foreign keys on columns that also carry a unique claim.
- chore: Release the Serverpod dependency version to `^4.0.0`.
## 0.0.8
- fix: BREAKING. Reject unique-text values ending in `__conflict__<UUID>`,
`__hidden__<UUID>`, or `__park__<UUID>`, and unique version-8 UUIDs (except
primary keys, foreign keys, and nullable UUID columns). Local writes and
incoming sync throw `OfflineSyncReservedValueException` for these values.
- fix: Enforce database unique constraints on local writes and restores, and
reject upsert batches that target the same record more than once.
- fix: Retain upserted values and explicit nulls when replacing a conflicting
value, including upserts matched through another unique index.
- fix: Treat restored rows as fresh writes so field values and conflict ages
stay consistent across sync and bootstrap.
- fix: Preserve UUID-shaped text and binary values during conflict resolution
and sync, and encode restored values according to their column types.
- fix: Show UUIDs correctly in errors for references to deleted records.
2026-09-16 11:48:50 -03:00
## 0.0.7
- fix: Keep non-synced `updateRow` calls in the test harness transaction.
- fix: Allow generated client sync sessions to close their SQLite connections.
- fix: Resolve shared-package models and enums during projection and sync.
- fix: Preserve boolean types when syncing SQLite column updates.
- fix: Preserve JSON and JSONB field types and values through inserts, updates,
and explicit nulls.
## 0.0.6
- refactor: BREAKING. Rename integration APIs and ownership scopes:
- Rename `CrdtDatabase*` wrappers to `OfflineSyncDatabase*`.
- Rename `CrdtSync` to `OfflineSyncEngine` and `CrdtSyncSession` to
`OfflineSyncSubscription`.
- Access sync through `.offlineSync` and `.offlineSyncDb` instead of
`.crdt` and `.crdtDb`.
- Replace `CrdtScope*` models and services with `OfflineSyncSpace*`
- Change access to shared spaces through `.spaces` instead of `.scopes`.
- Use `spaceId` in models and indexes, and `offline_sync_spaces` in
ownership relations.
- Initialize with `initializeOfflineSync` and use `offlineSyncDatabaseInterceptor`.
- Import client helpers from `offline_sync.dart` instead of `crdt.dart`.
- Rename the synchronization endpoint, serialized events, and space metadata
tables.
- fix: Recompute `onDelete=SetDefault` repairs when default targets are
inserted, deleted, restored, or hidden to preserve authored values.
- fix: Reject local deletes atomically when a needed `SetDefault` target is
missing, hidden, owned by another space, or deleted in the same batch.
- fix: Preserve projection-selected nulls during inserts instead of reapplying
column defaults, and apply fixed UUID foreign-key defaults in local upserts.
- fix: Resolve composite unique conflicts when only a fixed discriminator
column changes.
- perf: Avoid redundant foreign-key projection for ordinary local writes and
primary-key upserts, and batch dependency checks and field-clock writes.
- perf: Overlap independent membership reads and skip unnecessary space lookups
for untracked tables.
- chore: Update Serverpod to `4.0.0` and use the published CLI.
## 0.0.5
- fix: BREAKING. Rebuilds foreign key and unique projection from authored facts.
- perf: Increases unique-conflict merge throughput by ~40%.
- perf: Increases foreign-key chain insert merge throughput by ~3.3×.
- perf: Increases foreign-key chain delete merge throughput by ~44%.
- perf: Reduces storage used by CRDT metadata on relations.
- chore: Updated Serverpod to `4.0.0-rc.2`.
## 0.0.4
- chore: Updated Serverpod to `4.0.0-rc.1`.
## 0.0.3
- fix: Requires non-nullable foreign keys to be `deferred`.
- fix: Rejects `onDelete=Restrict` on synced tables in favor of `onDelete=NoAction`.
- fix: Throws proper `DatabaseException` instead of bare `Exception` on the database.
- chore: Updated Serverpod to `4.0.0-rc.1`.
## 0.0.2
- fix: Skips tracking FKs for relations with non-sync tables.
- fix: Fixes batch `insert` of previously tombstoned rows not being tracked correctly.
- refactor: Moves the core implementation to the `serverpod_offline_sync` shared package.
- chore: Updated Serverpod to `4.0.0-beta.2`.
## 0.0.1
- chore: Initial version.