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

SwiftData Retirement Inventory

Last Updated: 2026-05-26

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 the Snapshots and Data Types tab roots to archive/cache observations, 17 app files still have SwiftData imports because capture, Dashboard review actions, legacy detail transition paths, model definitions, and PDF/export transition paths still use prototype snapshot handles.

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/Snapshots/DataTypeSnapshotDetailView.swift
  • HealthProbe/Views/Snapshots/SnapshotDetailView.swift

Retirement path: - 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 legacy direct SwiftData TypeCount relationship traversal.
  • HealthProbe/Views/DataTypes/DataTypesView.swift no longer imports SwiftData or queries HealthSnapshot; it loads Core Data cached observation rows and opens DataTypeArchiveDetailView, an archive/cache-only detail view with paged SQLite new/missing record drill-down.
  • HealthProbe/Views/Snapshots/SnapshotsView.swift no longer imports SwiftData or queries HealthSnapshot; it loads Core Data cached observation rows and opens SnapshotArchiveDetailView, an archive/cache-only detail view that feeds Data Type drill-down through observation ids and cached summaries.
  • HealthProbe/Views/Snapshots/SnapshotDetailView.swift no longer queries SnapshotDelta/TypeDelta or carries the old SwiftData type-delta/chart fallback. Snapshot detail type rows now require archive/cache summaries; the temporary SwiftData dependency is limited to snapshot navigation, metadata, and PDF export handles.
  • HealthProbe/Views/Snapshots/DataTypeSnapshotDetailView.swift no longer queries SnapshotDelta/TypeDelta and no longer rebuilds legacy TypeCount.detailCache rows from the UI. It reads Core Data/SQLite diff summaries first and only displays an already-existing legacy detail cache as a transition fallback.
  • The unused HealthProbe/Views/DataTypes/TypeEvolutionTimeline.swift legacy chart was deleted, and the remaining TypeDiff/DiffFilter DTOs now live in HealthProbe/Models/TypeDiff.swift instead of the removed SnapshotDiffService helper.
  • 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. Delete or isolate unused SwiftData snapshot/type detail transition views once PDF/export and any remaining preview paths have archive/cache replacements.