Skip to content

[Feature] Convert CSV imports into async jobs with dry-run preview, progress, cancel, and rollback support #311

Description

@richardcmckinney

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions