{"record":{"id":"919eb7a1e553afef","repo":"twentyhq/twenty","slug":"standard-application-is-missing-the-messagecampaig-919eb7","errorCode":null,"errorMessage":"Standard application is missing the messageCampaign search field for field ${fieldMetadataUniversalIdentifier}","messagePattern":"Standard application is missing the messageCampaign search field for field (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/twenty-server/src/database/commands/upgrade-version-command/2-25/2-25-workspace-command-1785229970000-add-message-campaign-name-field.command.ts","lineNumber":342,"sourceCode":"\n        if (\n          isDefined(\n            flatSearchFieldMetadataMaps.byUniversalIdentifier[\n              searchFieldUniversalIdentifier\n            ],\n          )\n        ) {\n          return [];\n        }\n\n        const standardFlatSearchFieldMetadata =\n          findFlatEntityByUniversalIdentifier<FlatSearchFieldMetadata>({\n            flatEntityMaps: standardFlatSearchFieldMetadataMaps,\n            universalIdentifier: searchFieldUniversalIdentifier,\n          });\n\n        if (!isDefined(standardFlatSearchFieldMetadata)) {\n          throw new Error(\n            `Standard application is missing the messageCampaign search field for field ${fieldMetadataUniversalIdentifier}`,\n          );\n        }\n\n        return [standardFlatSearchFieldMetadata];\n      },\n    );\n  }\n}\n","sourceCodeStart":324,"sourceCodeEnd":352,"githubUrl":"https://github.com/twentyhq/twenty/blob/1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6/packages/twenty-server/src/database/commands/upgrade-version-command/2-25/2-25-workspace-command-1785229970000-add-message-campaign-name-field.command.ts#L324-L352","documentation":"Thrown by the 2.25 command that adds the messageCampaign name field, during computeSearchFieldMetadatasToCreate. For each searched field (name, subject), the command derives a searchFieldUniversalIdentifier via getSearchFieldUniversalIdentifier and checks if it already exists. If not, it looks up the standard FlatSearchFieldMetadata via findFlatEntityByUniversalIdentifier in the standard flat search field metadata maps. If the standard maps don't contain the derived search field identifier, the command throws.","triggerScenarios":"The derived searchFieldUniversalIdentifier (from getSearchFieldUniversalIdentifier using the standard application's universal identifier and the field's universal identifier) does not resolve to a FlatSearchFieldMetadata in the computed standard maps. Caused by: the standard search field definitions not including the messageCampaign name/subject search fields, a version mismatch, or the application universal identifier used in derivation doesn't match the standard's.","commonSituations":"Forked twenty-shared where messageCampaign search fields are not defined; running against an older twenty-shared build; a change in getSearchFieldUniversalIdentifier's derivation logic that doesn't match the standard definitions.","solutions":["Verify the standard flat search field metadata maps include entries for messageCampaign name and subject fields","Ensure getSearchFieldUniversalIdentifier's derivation matches how the standard search fields were defined","Rebuild twenty-shared: npx nx build twenty-shared","Run with --dryRun to inspect which search fields are being resolved"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before running, verify the standard search field maps include messageCampaign entries\nimport { getSearchFieldUniversalIdentifier } from 'twenty-shared/application';\nimport { STANDARD_OBJECTS } from 'twenty-shared/metadata';\nimport { computeTwentyStandardApplicationAllFlatEntityMaps } from '...';\n\nconst standardMaps = computeTwentyStandardApplicationAllFlatEntityMaps({\n  now: new Date().toISOString(),\n  workspaceId: 'check-only',\n  twentyStandardApplicationId: 'check-only',\n});\n\nfor (const fieldUid of [\n  STANDARD_OBJECTS.messageCampaign.fields.name.universalIdentifier,\n  STANDARD_OBJECTS.messageCampaign.fields.subject.universalIdentifier,\n]) {\n  const searchFieldUid = getSearchFieldUniversalIdentifier({\n    applicationUniversalIdentifier: TWENTY_STANDARD_APP_UID,\n    fieldMetadataUniversalIdentifier: fieldUid,\n  });\n\n  if (!isDefined(standardMaps.flatSearchFieldMetadataMaps.byUniversalIdentifier[searchFieldUid])) {\n    throw new Error(`Standard maps missing search field for ${fieldUid}`);\n  }\n}","typeGuard":"import { isDefined } from 'twenty-shared/utils';\n\nconst hasStandardSearchField = (\n  maps: FlatEntityMaps<FlatSearchFieldMetadata>,\n  uid: string,\n): boolean => isDefined(maps.byUniversalIdentifier[uid]);","tryCatchPattern":null,"preventionTips":["Verify getSearchFieldUniversalIdentifier's derivation matches how standard search fields were defined","Rebuild twenty-shared before running upgrade commands","Run with --dryRun to inspect which search fields are being resolved","Add integration tests that verify standard search field identifiers resolve for messageCampaign"],"tags":["metadata","upgrade-command","standard-application","workspace-migration","flat-search-field-metadata","message-campaign"],"backgroundTag":null,"analyzedSha":"1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6","analyzedAt":"2026-08-12T15:37:27.593Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}