serverpod-offline-sync/CHANGELOG.md
2026-10-08 19:00:44 -03:00

107 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Unreleased
- fix: Keep membership reads inside the caller's transaction, preventing web
deadlocks and reflecting uncommitted membership grants and revocations.
- 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.
## 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.