{"record":{"id":"e0bea03be0d96131","repo":"twentyhq/twenty","slug":"failed-to-merge-records","errorCode":null,"errorMessage":"Failed to merge records","messagePattern":"Failed to merge records","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsActions.ts","lineNumber":46,"sourceCode":"\n  const setIsMergeInProgress = useSetAtomState(isMergeInProgressState);\n\n  const { t } = useLingui();\n  const { enqueueSuccessSnackBar, enqueueErrorSnackBar } = useSnackBar();\n  const { closeSidePanelMenu } = useSidePanelMenu();\n\n  const navigate = useNavigateApp();\n  const handleMergeRecords = async () => {\n    setIsMergeInProgress(true);\n    try {\n      const mergedRecord = await mergeManyRecords({\n        recordIds: selectedRecords.map((record) => record.id),\n        mergeSettings,\n        preview: false,\n      });\n\n      if (!mergedRecord) {\n        throw new Error('Failed to merge records');\n      }\n\n      const recordCount = selectedRecords.length;\n\n      enqueueSuccessSnackBar({\n        message: t`Successfully merged ${recordCount} records`,\n      });\n      closeSidePanelMenu();\n\n      navigate(AppPath.RecordShowPage, {\n        objectNameSingular,\n        objectRecordId: mergedRecord.id,\n      });\n    } catch (error) {\n      enqueueErrorSnackBar({\n        message:\n          error instanceof Error\n            ? error.message","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/twentyhq/twenty/blob/1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6/packages/twenty-front/src/modules/object-record/record-merge/hooks/useMergeRecordsActions.ts#L28-L64","documentation":"Thrown by useMergeRecordsActions (useMergeRecordsActions.ts:47-49) when mergeManyRecords returns a falsy mergedRecord. This indicates the merge mutation did not return the merged record, either due to a server error swallowed in the response or a schema/metadata mismatch.","triggerScenarios":"User clicks merge with selected records, mergeManyRecords resolves, but the returned mergedRecord is undefined/null.","commonSituations":"Stale object metadata causing a malformed merge mutation; server-side merge validation failure returning partial/null data; Apollo cache returning an incomplete object; permissions issue preventing the merge from completing.","solutions":["Refresh object metadata and retry the merge.","Inspect the mergeManyRecords mutation response in Apollo devtools.","Verify the current user has permission to merge the selected records.","Check server logs for merge resolver errors returning null."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"const hasMergedRecord = <T>(r: T | null | undefined): r is T =>\n  isDefined(r);","tryCatchPattern":"try {\n  await handleMergeRecords();\n} catch (err) {\n  if (err.message === 'Failed to merge records') {\n    enqueueErrorSnackBar({ message: t`Merge failed, please try again` });\n  }\n}","preventionTips":["Refetch metadata before merging.","Confirm the user has merge permissions on all selected records.","Inspect the mergeManyRecords response in Apollo devtools.","Validate selection count meets merge minimums."],"tags":["frontend","object-record","record-merge","graphql","mutation"],"backgroundTag":null,"analyzedSha":"1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6","analyzedAt":"2026-08-12T15:37:27.593Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}