{"record":{"id":"dd362d807ffdfbc8","repo":"twentyhq/twenty","slug":"could-not-find-an-available-originalfieldname-ol","errorCode":null,"errorMessage":"Could not find an available ${originalFieldName}Old name after ${MAX_OLD_NAME_ATTEMPTS} attempts","messagePattern":"Could not find an available (.+?)Old name after (.+?) attempts","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/call-recording-name-collision.util.ts","lineNumber":167,"sourceCode":"      .filter(\n        (flatFieldMetadata) =>\n          flatFieldMetadata.objectMetadataUniversalIdentifier ===\n          STANDARD_OBJECTS.calendarEvent.universalIdentifier,\n      )\n      .map((flatFieldMetadata) => flatFieldMetadata.name),\n    ...additionalTakenNames,\n  ]);\n\n  for (let attempt = 0; attempt < MAX_OLD_NAME_ATTEMPTS; attempt++) {\n    const discriminator = attempt === 0 ? '' : `${attempt + 1}`;\n    const candidateName = `${originalFieldName}${FIELD_OLD_NAME_SUFFIX}${discriminator}`;\n\n    if (!takenFieldNames.has(candidateName)) {\n      return candidateName;\n    }\n  }\n\n  throw new Error(\n    `Could not find an available ${originalFieldName}Old name after ${MAX_OLD_NAME_ATTEMPTS} attempts`,\n  );\n};\n\nexport const buildCalendarEventFieldRenameUpdates = ({\n  flatFieldMetadataMaps,\n  now,\n}: {\n  flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>;\n  now: string;\n}): FlatFieldMetadata[] => {\n  const reservedOldFieldNames = new Set<string>();\n\n  return findCalendarEventFieldNameCollisionsForCallRecording(\n    flatFieldMetadataMaps,\n  ).map((collidingFieldMetadata) => {\n    const name = resolveAvailableOldCalendarEventFieldName({\n      flatFieldMetadataMaps,","sourceCodeStart":149,"sourceCodeEnd":185,"githubUrl":"https://github.com/twentyhq/twenty/blob/1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/call-recording-name-collision.util.ts#L149-L185","documentation":"Thrown by resolveAvailableOldCalendarEventFieldName after 100 candidate field names (<name>Old, <name>Old2 ... <name>Old101) are all taken among calendarEvent fields plus the additional reserved set. MAX_OLD_NAME_ATTEMPTS is 100.","triggerScenarios":"A workspace's calendarEvent object has 100+ fields covering the entire <originalFieldName>Old<number> range, leaving no free name for renaming a colliding recordingPreference/callRecordings field.","commonSituations":"Pathological workspace with mass duplicate calendarEvent fields; repeated aborted migrations leaving many Old-suffixed fields; extremely unlikely under normal use.","solutions":["Query calendarEvent fields matching /^<originalFieldName>Old\\d*$/ in the failing workspace and remove the surplus.","Re-run the command once names are freed.","As a last resort, raise MAX_OLD_NAME_ATTEMPTS in the util and re-run."],"exampleFix":"// before: throws after 100 attempts with no prior signal\nconst name = resolveAvailableOldCalendarEventFieldName({ flatFieldMetadataMaps, originalFieldName });\n\n// after: pre-check available slots\nconst taken = countFieldsMatching(flatFieldMetadataMaps, new RegExp(`${originalFieldName}Old\\\\d*`));\nif (taken >= 100) {\n  throw new Error(`No free ${originalFieldName}Old slots; clean up duplicate calendarEvent fields first`);\n}","handlingStrategy":"validation","validationCode":"import { resolveAvailableOldCalendarEventFieldName } from '../utils/call-recording-name-collision.util';\n\n// Before calling, count existing <originalFieldName>Old* calendarEvent fields:\nconst pattern = new RegExp(`${originalFieldName}Old\\\\d*`);\nconst takenCount = Object.values(flatFieldMetadataMaps.byUniversalIdentifier)\n  .filter(isDefined)\n  .filter((f) => f.objectMetadataUniversalIdentifier === STANDARD_OBJECTS.calendarEvent.universalIdentifier && pattern.test(f.name))\n  .length;\nif (takenCount >= 100) {\n  throw new Error(`${originalFieldName}Old namespace exhausted; remove duplicate calendarEvent fields before retrying`);\n}\nconst name = resolveAvailableOldCalendarEventFieldName({ flatFieldMetadataMaps, originalFieldName });","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Before running the CallRecording sync, query calendarEvent fields matching /^<originalFieldName>Old\\d*$/ and clean up duplicates.","Recompute the workspace cache so the taken-name set is accurate.","Treat this error as a data-hygiene signal requiring cleanup, not a retryable glitch."],"tags":["migration","call-recording","name-collision","field-metadata","exhaustion"],"backgroundTag":null,"analyzedSha":"1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6","analyzedAt":"2026-08-12T15:37:27.593Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}