---
id: WF-PFM-DJE-006
title: Revalidate a finished job's conflicts
trigger: A caller asks to reconsider conflicts from a finished interactive job.
product_area: platform
module: data-job-engine
revision: 1
status: draft
design_intent: confirmed
origin: >-
  services-crm:docs/milestones/CRM-M7-data-operations.md D-37;
  services-platform:docs/standards/record-write-contracts.md#W4 (revalidation
  and retry)
implementation_evidence: observed
inference: []
source_sha:
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
implements:
  - CAP-PFM-DJE-006
moves:
  - STATE-PFM-DJE-001
crosses:
  - SVC-PFM-DJE-crm-data-jobs
  - SVC-PFM-DJE-engine
hops:
  - 'n': 1
    actor_or_service: Revalidate route
    action: >-
      Require the original operation’s submit authority and matching record
      category.
    anchor: 'services-crm:modules/data-jobs/aws/api/data-jobs.routes.ts:dataJobsRoutes'
    seam: sync
    on_failure: Return forbidden access or concealed missing-job results.
    left_inconsistent: No new preview has been saved.
    observer: The request response exposes the result.
    provenance: observed
    source: >-
      services-crm:modules/data-jobs/services/jobs/contact-data-jobs.ts:revalidateJobConflicts
  - 'n': 2
    actor_or_service: Engine revalidation
    action: >-
      Require a finished interactive non-rollback job with conflicts, then
      preserve eligible input in a new validation.
    anchor: >-
      macroservice-libraries:packages/data-jobs/src/revalidate-data-job-conflicts.ts:revalidateDataJobConflicts
    seam: sync
    on_failure: >-
      Return the relevant final-state, missing-conflict, lane or rollback
      refusal.
    left_inconsistent: Business records remain unchanged by revalidation.
    observer: The created preview identifies its preceding job.
    provenance: test
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#makes
      the revalidation a new validation of the one conflicted contact, linked to
      the job it corrects
  - 'n': 3
    actor_or_service: Batches and approver
    action: Capture current versions and let the operator approve the new impact.
    anchor: 'macroservice-libraries:packages/data-jobs/src/version-capture.ts'
    seam: queue
    on_failure: Use the ordinary validation and approval failure paths.
    left_inconsistent: Unapproved records keep their existing values.
    observer: The new job's preview.
    provenance: documented
    source: >-
      macroservice-libraries:packages/data-jobs/README.md#Versions: captured at
      validation, verified at application
idempotency: >-
  Each request creates an independent validation job. Revalidating twice does
  not collapse the two previews into one.
concurrency: >-
  New validation captures current versions. Another edit before approval can
  create a new conflict; stale input is never retried by discarding its guard
  during application.
branches: []
waits:
  - The new preview has its own 24-hour approval deadline.
evidence:
  - >-
    macroservice-libraries at 54536a44: src/revalidate-data-job-conflicts.ts,
    version-capture.ts.
  - >-
    services-crm at a8d1364f: services/jobs/contact-data-jobs.ts;
    tests/integration/services/jobs/contact-update-versions.integration.spec.js.
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-003, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Revalidate A Finished Job'S Conflicts

## What It Does

Conflict revalidation creates a new preview from conflicted input and the group members refused with it. It discards old expected versions so current versions can be reviewed afresh.

## The Flow

```mermaid
flowchart TD
  H1["Revalidate route"] --> H2
  H2["Engine revalidation"] --> H3
  H3["Batches and approver"]
```

## When Something Fails

Unsupported originals produce no preview. The new job can report another conflict if records move again, preserving the edit rather than repeatedly attempting the obsolete version.

## Open Design Questions

The recorded findings identify the remaining limits; this examination does not authorize stronger behavior or change the planning rules.
