# SwiftData Retirement Inventory

**Last Updated:** 2026-05-25

This inventory supports Milestone 9 in [`Refactoring-Plan.md`](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.
