Skip to content

UNDA — Data Retention Policy

Status: Draft baseline. Final values must be reviewed by counsel before production (§13).

Data categoryRetention baselineTrigger for deletionNotes
Account identity (profiles.id, email if signed in)While account existsAccount deletion via Privacy CenterSome residual security logs may retain hashed identifier per §15.
Cycle history (profiles.last_period_start, avg_cycle_length, avg_period_length, cycles)User-controlled; retained while account existsFull delete via Privacy Center; per-cycle edit in SettingsNever auto-expired.
Per-day logs (cycle_days)User-controlledPer-day clear + full delete via Privacy CenterUser can also individually untoggle symptoms today. Historical edit is B (pending).
Workout sessions (workout_sessions)User-controlled; suggested cap: 3 years for recommendation training dataAccount deletion, or "Clear workout history" toggle in Privacy Center (planned)felt_score older than N is de-weighted by the recommender rather than deleted.
Imported activities (Strava/Intervals/Garmin)Until disconnect; disconnect deletes previously imported rows by default (§8.4)Disconnect the integrationThe UI must state this behaviour.
OAuth tokens (per integration)Until disconnect or provider revocationDisconnect the integration or provider-side revokeStored via flutter_secure_storage — never in the sqflite DB or logs.
Recommendation historyProduct-useful window (baseline: 12 months)Rolling deletion job (planned once cloud sync exists)Persist enough to explain "why this workout" for the past N sessions.
Debug logs (crash SDK if added)30 days baselineAutomatic vendor-sideSensitive-value scrubbers configured per §6.3.
Security logs (auth events, admin access)12 monthsAutomaticRedacted per §6.2.
Backups (Supabase, when enabled)30-day rollingAutomaticDeleted rows may persist in backup until rotation; document to user in Privacy Notice.

Enforcement

Currently the app has no automated retention jobs — every retention window above is either user-controlled or bounded by "life of account" until we ship cloud sync + the associated jobs. That is acceptable pre-beta because everything lives on-device, but must be delivered before the Pre-Public-Launch Gate (§25).

Change control

Any new datastore requires a row in this table in the same PR (RULE 8: "Do not introduce a datastore without defining deletion behaviour").

UNDA is a fitness and training support product. It is not a medical device.