summaryrefslogtreecommitdiff
path: root/DomainDig/HistoryView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-07-24 23:35:18 -0500
committerChristian Cleberg <[email protected]>2026-07-24 23:37:00 -0500
commit99e4623af1b08f36120a01b67cbe60df99668651 (patch)
tree07c8365f0c0054837f2b63611d71d1fd9c2f4e6c /DomainDig/HistoryView.swift
parenta52dee116d4066d1b59bd90b4ebc4def4e1597d6 (diff)
downloaddomain-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/HistoryView.swift')
0 files changed, 0 insertions, 0 deletions