You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Deferred out of #45 (import endpoint) — see the scope-change comment on #45 and docs/milestones/data-import-sources/45-import-endpoint-plan.md's Scope changes section.
#45 ships automatic conflict detection and resolution (all 5 policies from #64: skip, newest-wins, merge-ours, merge-theirs, review), logging every conflict to System_ImportConflicts. review-policy conflicts are left Status = "pending" in that table but nothing currently lets a user resolve them — they just stay pending forever.
This issue is the manual-review half: letting a user look at pending conflicts and decide, per field, which side wins.
Blocked on
#56 (audit log) — not started. The original design (from #45's stale issue text) required every resolution decision to be recorded with ActorType='user', Action='updated', old/new values — that needs #56's IAuditLogger/AuditLog table to exist first.
What this issue should deliver
GET /api/v1/quotes/import/conflicts?status=pending (or similar) — list pending System_ImportConflicts rows, likely paginated (mirror System_AuditEntries' existing paging pattern).
POST /api/v1/quotes/import/conflicts/{id}/resolve (or similar — exact route TBD at planning time) — accepts a per-field resolution (keep existing / replace with incoming), updates the quote's stored fields accordingly, and marks the System_ImportConflicts row Status = "resolved", ResolvedAt set.
Decide at planning time: does this reuse FieldMergeResolver's existing merge machinery, or is a per-field keep/replace decision simple enough to not need it?
Notes
ExistingValue/IncomingValue/MergedFields on System_ImportConflicts are already opaque JSON blobs holding the exact field-level data a review UI would need to render a side-by-side comparison — no schema change anticipated for this table itself.
Context
Deferred out of #45 (import endpoint) — see the scope-change comment on #45 and
docs/milestones/data-import-sources/45-import-endpoint-plan.md's Scope changes section.#45 ships automatic conflict detection and resolution (all 5 policies from #64:
skip,newest-wins,merge-ours,merge-theirs,review), logging every conflict toSystem_ImportConflicts.review-policy conflicts are leftStatus = "pending"in that table but nothing currently lets a user resolve them — they just stay pending forever.This issue is the manual-review half: letting a user look at pending conflicts and decide, per field, which side wins.
Blocked on
#56 (audit log) — not started. The original design (from #45's stale issue text) required every resolution decision to be recorded with
ActorType='user',Action='updated', old/new values — that needs #56'sIAuditLogger/AuditLogtable to exist first.What this issue should deliver
GET /api/v1/quotes/import/conflicts?status=pending(or similar) — list pendingSystem_ImportConflictsrows, likely paginated (mirrorSystem_AuditEntries' existing paging pattern).POST /api/v1/quotes/import/conflicts/{id}/resolve(or similar — exact route TBD at planning time) — accepts a per-field resolution (keepexisting /replacewith incoming), updates the quote's stored fields accordingly, and marks theSystem_ImportConflictsrowStatus = "resolved",ResolvedAtset.FieldMergeResolver's existing merge machinery, or is a per-field keep/replace decision simple enough to not need it?Notes
ExistingValue/IncomingValue/MergedFieldsonSystem_ImportConflictsare already opaque JSON blobs holding the exact field-level data a review UI would need to render a side-by-side comparison — no schema change anticipated for this table itself.