Problem
The import route says “Upload and queue CSV import job” but processes the import inline. Large imports should not depend on a single request lifecycle, and admins need a preview before mutating production data.
Proposed solution
Implement CSV imports as background jobs with an import record. Add dry-run validation, row-level preview, progress tracking, cancellation, resumable processing, and a rollback/export plan for created records.
Acceptance criteria
- Upload creates an import job and returns a job ID.
- Admins can run a dry-run validation before applying changes.
- UI shows progress, imported count, skipped count, error count, and created tags.
- Admins can cancel a pending or running import.
- Failed rows can be downloaded as a CSV with error messages.
- Completed imports produce an audit event and a summary report.
- Import processing does not require the browser request to stay open.
Problem
The import route says “Upload and queue CSV import job” but processes the import inline. Large imports should not depend on a single request lifecycle, and admins need a preview before mutating production data.
Proposed solution
Implement CSV imports as background jobs with an import record. Add dry-run validation, row-level preview, progress tracking, cancellation, resumable processing, and a rollback/export plan for created records.
Acceptance criteria