Fix a sync conflict between Current and your PSA
A conflict is logged when the two systems disagree about a field and the ownership map can't settle it silently — for example, a record edited in both systems between polls, or a Current edit that your PSA flatly rejected. Each conflict records the entity, the field, and the values involved. A push failure stores your Current value (there is no PSA value — the write never landed); an auto-resolved row stores both your value and the PSA value that overrode it. Nothing is ever swallowed. Everything on this page works identically whether your PSA is ConnectWise, Autotask, or HaloPSA — the panel and its buttons are named for your provider.
Why conflicts are rare
Current doesn't guess who wins. Each field has a declared owner, and the sync respects it in both directions. On a pull, PSA-owned fields always win in Current; Current-owned fields survive every pull. Conflicts only arise in the narrow gray zone where both sides legitimately changed the same thing.
| Field | Owner | What that means in practice |
|---|---|---|
| Project name, status, budget | Your PSA | The PSA's value always wins on a pull. Change it there. |
| Project health | Current | Current's own signal — your PSA never touches it. |
| Task name, status | Your PSA | The PSA is the record of truth for what the task is and where it stands. |
| Task start and end dates | Current | Scheduling is Current's job — dates are pushed out to your PSA, not pulled over. |
| Critical-path flag, milestones | Current | Computed here; there's no PSA equivalent to overwrite them. |
For the full picture of which side owns what, read "Our methodology: your PSA stays the source of truth" and the field-mapping reference for your provider — "Autotask sync: the complete field-mapping reference" or "ConnectWise sync: the complete field-mapping reference."
The two kinds of conflict
The Conflicts panel on the sync health page has two tabs, and they mean genuinely different things.
- +Open — an edit you made in Current that never reached your PSA. The PSA rejected the write (a validation rule, a permission, a field it wouldn't accept), so the row shows only your Current value: "Current has X — this never reached your PSA." There is no PSA value to compare it against, because the write never landed. These are the ones to act on, and they're counted in the Outbox as undelivered work.
- +Auto-resolved — a record of where the two sides disagreed and the sync settled it without a person. When two-way sync is on, the sync only lets the PSA win a field it genuinely changed, and only if it changed it at least as recently as your Current edit of that same field (the PSA wins a tie). Nothing is lost: the value you had is stored on the row, next to the value the PSA set, so you can put it back. The reverse is recorded here too: when your Current edit was kept — because unrelated PSA activity touched the task but didn't actually change that field more recently than you did — the PSA's differing value is preserved as an audit-only row rather than applied, so an edit you made in Current no longer quietly reverts days later, and you can still see exactly what the PSA held. This tab also covers task dates the PSA changed that an earlier sync recorded but never applied: if a start or end date you set in Autotask kept showing the old value in Current, the PSA's date is now applied automatically on the next sync — as long as nobody edited that date inside Current — and the correction shows here with Restore my value.
Resolve an open conflict
- 1Open Integrations → your PSA's card → Sync details, then scroll to ConflictsYou need to be a Tenant Admin — Sync details only shows on the card for admins. Each row shows the record (linked, so you can open it), the field, the value that failed to reach your PSA, and when the conflict was logged. Newest first. When there are open conflicts, the card also shows an "N open conflicts — review" link to the same page.
- 2Retry push — the usual answerThis re-sends the record's current Current values through the same path the original edit used. If the rejection was transient, or you've since fixed whatever your PSA objected to, this delivers the edit and the conflict clears itself. Current stays the source of truth for the field.
- 3Accept the PSA's value — when your PSA is rightThe button is named for your provider — Accept Autotask or Accept ConnectWise. It re-pulls the record's whole project from your PSA so the PSA's values actually land in Current, then closes the conflict. Your Current value for that field is replaced.
- 4Dismiss — when neither appliesCloses the conflict and changes nothing, anywhere. Use it when the record is obsolete or the disagreement no longer matters. It's honest about doing nothing.
- 5When one field conflicts across many recordsThat's an ownership question, not a data question — decide which side owns the field and stop editing the other. There's no bulk resolve: each row still has to be cleared individually with Retry push, the Accept button, or Dismiss.
Restore a value your PSA overwrote
The Auto-resolved tab lists the last 14 days of fields where the PSA's newer change beat a Current edit (up to 100, newest first). For task fields with a write path — description, estimated hours, status, task type, department, and priority — a Restore my value button puts your value back in Current and pushes it to your PSA in the same action.
Symptom → cause
| What you see | Most likely cause | What to do |
|---|---|---|
| "This never reached your PSA" on a task's dates | Autotask calculates a "Fixed Work" task's due date from its estimated hours and won't accept a manual one; or the dates fall outside a phase or project window | Retry push. Current now auto-switches a Fixed Work task to "Fixed Duration" (so your date sticks) and widens a too-small phase/project window for you. If a date still can't be stored, Retry push names the real reason instead of a generic failure. |
| The same field conflicts on dozens of records | Both systems are being edited for the same purpose | Decide which side owns the field and stop editing the other, then clear the rows one at a time. |
| No Retry push button on the row | The field has no retry path from this panel | Use the Accept button or Dismiss (or change the field on the task itself). |
| Retry push says the fields are now empty in Current | The record changed after the conflict was logged; there's nothing left to send | Accept the PSA's value or Dismiss. |
| An edit you made "disappeared" | A newer PSA change won — check the Auto-resolved tab | Restore my value, which re-applies it in Current and pushes it back. |
| A conflict on a record you deleted in your PSA | The PSA counterpart is gone | Dismiss, then check "Removed in your PSA" on the sync health page. |
| Retry push says the task's project isn't linked to your PSA | The project is Current-native and has no counterpart to push to | Dismiss. See "Project modes: PSA-synced or Current-native." |
Related reading: "Reading the sync health dashboard (and fixing a stale sync)" for the rest of the page, and "PSA rate limits and dead-letter jobs" for failures caused by throttling rather than your data.
