diff options
| author | Christian Cleberg <[email protected]> | 2026-07-24 23:35:18 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-07-24 23:37:00 -0500 |
| commit | 99e4623af1b08f36120a01b67cbe60df99668651 (patch) | |
| tree | 07c8365f0c0054837f2b63611d71d1fd9c2f4e6c /DomainDig/DataAccessService.swift | |
| parent | a52dee116d4066d1b59bd90b4ebc4def4e1597d6 (diff) | |
| download | domain-dig-99e4623af1b08f36120a01b67cbe60df99668651.tar.gz domain-dig-99e4623af1b08f36120a01b67cbe60df99668651.tar.bz2 domain-dig-99e4623af1b08f36120a01b67cbe60df99668651.zip | |
feat: versioned store-migration policy for persisted data (v5 step 2)
Third v5.0.0 roadmap item: define and implement a migration policy for the
on-device persisted store (tracked domains, history/snapshots, audits,
workflows, monitoring, settings), so data upgrades cleanly across app versions
instead of relying on a one-shot marker.
- DataMigrationService is reworked from a single boolean marker
(`data.migrations.v3_4_0`) into a versioned runner keyed by an integer store
schema version (`data.storeSchemaVersion`). It runs each step once in
ascending order up to `currentStoreSchemaVersion`, stamping the version as it
goes. Adding a future migration is now a `case N:` plus a version bump.
Policy guarantees, all covered by tests:
- Forward-only and idempotent; every step must be safe on an empty/older store.
- Never downgrades: a store written by a newer build (higher version) is left
byte-for-byte untouched.
- Pre-versioning installs are handled: a set legacy boolean marker reads as
"already at v1", so the v1 normalization never re-runs for them.
v1 is the existing normalization pass (dedup + drop the legacy `watchedDomains`
key + sanitize monitoring settings), now expressed as migration step 1.
- Docs/data-migration.md documents the persisted surface, the two independent
version lines (store vs. backup export), when to use lenient decoding vs. a
migration step, the runner contract, an "adding a migration" checklist, and
backup-import compatibility. Linked from the README.
- DataMigrationServiceTests: 6 tests over legacy fixtures — fresh-store stamping,
legacy `watchedDomains` migration + key drop, in-place dedup of the stored
blob, idempotence, legacy-marker-as-v1, and the no-downgrade guard. Full unit
suite: 58 passing.
Diffstat (limited to 'DomainDig/DataAccessService.swift')
0 files changed, 0 insertions, 0 deletions
