HealthProbe / HealthProbe / Doc / 04-project / SwiftData-Retirement-Inventory.md
1 contributor
117 lines | 4.716kb

SwiftData Retirement Inventory

Last Updated: 2026-05-25

This inventory supports Milestone 9 in Refactoring-Plan.md. SwiftData is legacy/prototype infrastructure only. The target app must launch and run active Time Machine flows from SQLite archive + Core Data cache, with local settings stored outside SwiftData where needed.

Current Count

After moving local settings/data-maintenance flows out of SwiftData, 23 app files still have SwiftData imports.

Launch Container

This file keeps SwiftData required at app launch:

  • HealthProbe/HealthProbeApp.swift

Retirement path: - replace prototype snapshot model dependencies in tab roots; - remove .modelContainer(...) once no active view needs @Query or ModelContext.

Legacy Model Definitions

These files define SwiftData @Model classes and are the largest retirement block:

  • HealthProbe/Models/AnomalyRecord.swift
  • HealthProbe/Models/HealthRecord.swift
  • HealthProbe/Models/HealthSnapshot.swift
  • HealthProbe/Models/SnapshotDelta.swift
  • HealthProbe/Models/TypeCount.swift
  • HealthProbe/Models/TypeDelta.swift
  • HealthProbe/Models/TypeDistributionBin.swift
  • HealthProbe/Models/YearlyCount.swift

Retirement path: - replace HealthSnapshot, TypeCount, SnapshotDelta, TypeDelta, YearlyCount, TypeDistributionBin, and HealthRecord active reads with archive/cache DTOs; - replace AnomalyRecord flows with neutral change/diff DTOs; - retire active reads/writes before removing the launch container.

Capture And Maintenance Services

These services still write/read legacy SwiftData transition models:

  • HealthProbe/Services/DeltaService.swift
  • HealthProbe/Services/HealthKitService.swift
  • HealthProbe/Services/ObserverService.swift
  • HealthProbe/Services/SnapshotLifecycleService.swift
  • HealthProbe/Utilities/TypeCountArchiveRepair.swift

Retirement path: - make capture persist archive observations first and expose only bridge ids while transition UI still exists; - move operation logging out of SwiftData; - delete legacy record repair once old SwiftData stores are no longer opened; - remove snapshot deletion/repair logic after archive/cache navigation replaces prototype snapshots.

UI And View Models

These active surfaces still use @Query, ModelContext, or SwiftData model types:

  • HealthProbe/ViewModels/DashboardViewModel.swift
  • HealthProbe/ViewModels/DataTypeTemporalDistributionViewModel.swift
  • HealthProbe/Views/Dashboard/DashboardView.swift
  • HealthProbe/Views/DataTypes/DataTypeTemporalDistributionView.swift
  • HealthProbe/Views/DataTypes/DataTypesView.swift
  • HealthProbe/Views/DataTypes/RecordChangeEvolutionChart.swift
  • HealthProbe/Views/Snapshots/DataTypeSnapshotDetailView.swift
  • HealthProbe/Views/Snapshots/SnapshotDetailView.swift
  • HealthProbe/Views/Snapshots/SnapshotsView.swift

Retirement path: - replace tab-root @Query snapshot lists with Core Data cache observation queries plus archive ids; - replace detail navigation parameters from SwiftData models to observation/type DTOs; - remove remaining snapshot/cache SwiftData rows from active flows; - keep paged record drill-down and export paths on archive APIs.

Removed During This Pass

The following SwiftData dependencies were removed from active flows:

  • HealthProbe/Services/AnomalyDetector.swift
  • HealthProbe/Services/IntegrityService.swift
  • HealthProbe/Models/MetricTimeoutProfile.swift was deleted.
  • Metric timeout learning/calibration now uses HealthProbe/Utilities/LocalMetricTimeoutProfile.swift, a Codable local store outside ModelContainer.
  • SettingsView, DashboardView, and HealthKitService read/write timeout calibration through the local store.
  • HealthProbe/Models/DeviceProfile.swift was deleted.
  • Device display name/color settings now use HealthProbe/Utilities/LocalDeviceProfile.swift, a Codable local store used by Settings, Dashboard, Snapshots, and legacy PDF export.
  • HealthProbe/Models/OperationLog.swift was deleted.
  • Snapshot deletion logging now uses HealthProbe/Utilities/LocalOperationLog.swift, a bounded Codable local log outside ModelContainer.
  • HealthProbe/ContentView.swift no longer imports SwiftData; its preview no longer creates a legacy model container.
  • HealthProbe/Views/Settings/SettingsView.swift no longer imports SwiftData. Its Data section now reports/rebuilds/deletes the rebuildable Core Data UI cache and leaves the SQLite archive untouched.

Next Recommended Slices

  1. Move DashboardView capture review actions away from ModelContext.
  2. Replace Snapshots/Data Types navigation handles with archive/cache DTOs.