{"record":{"id":"d09557c85a193b88","repo":"twentyhq/twenty","slug":"failed-to-delete-channel-standard-objects-for-work","errorCode":null,"errorMessage":"Failed to delete channel standard objects for workspace ${workspaceId}","messagePattern":"Failed to delete channel standard objects for workspace (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/twenty-server/src/database/commands/upgrade-version-command/2-8/2-8-workspace-command-1798000050000-drop-channel-standard-objects.command.ts","lineNumber":110,"sourceCode":"          allFlatEntityOperationByMetadataName: {\n            objectMetadata: {\n              flatEntityToCreate: [],\n              flatEntityToDelete: objectsToDelete,\n              flatEntityToUpdate: [],\n            },\n          },\n          workspaceId,\n          applicationUniversalIdentifier:\n            twentyStandardFlatApplication.universalIdentifier,\n        },\n      );\n\n    if (validateAndBuildResult.status === 'fail') {\n      this.logger.error(\n        `Failed to delete channel standard objects:\\n${JSON.stringify(validateAndBuildResult, null, 2)}`,\n      );\n\n      throw new Error(\n        `Failed to delete channel standard objects for workspace ${workspaceId}`,\n      );\n    }\n\n    this.logger.log(\n      `Deleted ${objectsToDelete.length} channel standard objects for workspace ${workspaceId}`,\n    );\n  }\n}\n","sourceCodeStart":92,"sourceCodeEnd":120,"githubUrl":"https://github.com/twentyhq/twenty/blob/1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6/packages/twenty-server/src/database/commands/upgrade-version-command/2-8/2-8-workspace-command-1798000050000-drop-channel-standard-objects.command.ts#L92-L120","documentation":"Thrown by the 2.8 command that drops channel standard objects. It builds object/relation delete operations for the channel objects and submits them via validateBuildAndRunLegacyWorkspaceMigration; on status === 'fail' it logs the report and throws. The report identifies which channel object delete failed.","triggerScenarios":"A channel object is referenced by a relation or view on another object that blocks deletion; a channel object was already removed in a prior run; custom fields/relations on the channel objects prevent the drop.","commonSituations":"Prior interrupted 2.8 run; message/participant objects still hold relations to channel; cross-version upgrade skipping dependent-relation cleanup.","solutions":["Read the logged JSON report to find the blocking dependency.","Remove or reassign the dependent relation/view/field rows referencing channel objects.","Re-run the 2.8 command; if the objects are already gone, mark the workspace handled."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Confirm no live relations still reference channel objects before dropping:\nconst refs = Object.values(flatRelationMetadataMaps.byId).filter(r => CHANNEL_OBJECT_UIS.includes(r.fromObjectMetadataUniversalIdentifier) || CHANNEL_OBJECT_UIS.includes(r.toObjectMetadataUniversalIdentifier));\nif (refs.length > 0) { /* drop or reassign them first */ }","typeGuard":null,"tryCatchPattern":"try {\n  await command.runOnWorkspace({ workspaceId, options });\n} catch (e) {\n  logger.error({ workspaceId, err: e.message }, 'channel objects drop failed');\n}","preventionTips":["Remove dependent relations/views on channel objects before their drop command.","On partial failure, clear orphaned rows before retrying."],"tags":["migration","upgrade-command","validate-and-build","workspace","object-metadata","channel","drop-object"],"backgroundTag":null,"analyzedSha":"1f5dd2bbd2a8da3419c8cfd52dd545c0024df1a6","analyzedAt":"2026-08-12T15:37:27.593Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}