completedAt (or createdAt if not completed) + 30 days β matching formatExportExpiresAt() and serializeDataExportRun.ts fallback logic.DATA_EXPORT_RUN_TTL_DAYS, S3 lifecycle behavior, and the MongoDB TTL on expiresAt.attik-frontend/src/app/tools/data-exports/components/ExportRunsSection.tsx uses formatExportExpiresAt() and displays run.expiresAt directly when present; fallback derives from run.completedAt ?? run.createdAt + 30 days.attik-backend/src/util/functions/dataExports/serializeDataExportRun.ts passes through stored expiresAt values without correcting invalid ones, and only derives a fallback when the field is absent (same completedAt ?? createdAt base).attik-backend/src/util/functions/dataExports/runDataExportJob.ts sets expiresAt to dayjs().add(30, 'day') on success alongside completedAt; affected rows may still contain bad persisted values that bypass both serializer and UI fallback logic.Backend
attik-backend/src/util/functions/dataExports/runDataExportJob.ts and attik-backend/src/util/functions/dataExports/serializeDataExportRun.ts.(completedAt ?? createdAt) + 30 days when stored expiresAt is missing or invalid.attik-backend/src/util/functions/dataExports/sendDataExportReadyEmail.ts.expiresAt values, including the existing tests/unit/dataExport.serializeRun.test.ts path.Frontend
attik-frontend/src/app/tools/data-exports/components/ExportRunsSection.tsx displays the corrected expiration value in Your exports.DataExportsListClient.tsx and RunReportClient.tsx.Data correctness
attik-frontend/src/app/tools/data-exports/components/ExportRunsSection.tsxattik-backend/src/util/functions/dataExports/serializeDataExportRun.tsattik-backend/src/util/functions/dataExports/runDataExportJob.tsattik-backend/src/routes/dataExport.tsattik-backend/src/util/functions/dataExports/sendDataExportReadyEmail.tsPlease authenticate to join the conversation.
Planned
Main App
About 3 hours ago
Linear
Get notified by email when there are changes.
Planned
Main App
About 3 hours ago
Linear
Get notified by email when there are changes.