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

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 temporal distribution to cache DTO inputs, 19 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/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; - 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/Views/Dashboard/DashboardView.swift
  • HealthProbe/Views/DataTypes/DataTypesView.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.
  • HealthProbe/Views/Dashboard/DashboardView.swift no longer queries HealthSnapshot for status rows; Dashboard status now uses archive/cache rows only. SwiftData remains there for capture/review actions.
  • HealthProbe/Views/DataTypes/RecordChangeEvolutionChart.swift now accepts a small RecordChangeEvolutionSnapshot DTO and loads archive/cache counts without importing SwiftData or querying SnapshotDelta.
  • HealthProbe/ViewModels/DataTypeTemporalDistributionViewModel.swift and HealthProbe/Views/DataTypes/DataTypeTemporalDistributionView.swift now read a TemporalDistributionInput DTO backed by TypeCountDetailCache; they no longer import SwiftData, query timeline snapshots, or require ModelContext.
  • HealthProbe/Views/Snapshots/SnapshotsView.swift no longer queries SnapshotDelta or runs DeltaService list-summary repair. Timeline change summaries come from archive/cache rows when available; SwiftData remains there only for temporary snapshot navigation/deletion handles.
  • HealthProbe/ViewModels/DataTypesViewModel.swift now resolves baselines from small observation contexts and builds rows from Core Data cache + SQLite archive diff APIs. It no longer falls back to SnapshotDiffService.diff(...) over SwiftData TypeCount relationships.
  • HealthProbe/Models/AnomalyRecord.swift, HealthProbe/Models/AnomalyType.swift, and HealthProbe/Services/AnomalyDetector.swift were deleted. The app no longer writes count-drop anomaly rows or shows the old Dashboard anomaly review section.

Next Recommended Slices

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