twentyhq/twenty · error · Error
Failed to update the message campaign record page for worksp
Error message
Failed to update the message campaign record page for workspace ${workspaceId}: ${JSON.stringify(validateAndBuildResult, null, 2)} What it means
Thrown by the 2.31 command that trims the message campaign record page (deletes and updates page-layout widgets). It submits the operations via validateBuildAndRunLegacyWorkspaceMigration; on status === 'fail' it throws with the full report embedded. The report identifies which widget delete/update failed.
Source
Thrown at packages/twenty-server/src/database/commands/upgrade-version-command/2-31/2-31-workspace-command-1786456707000-trim-message-campaign-record-page.command.ts:159
const validateAndBuildResult =
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunLegacyWorkspaceMigration(
{
isSystemBuild: true,
applicationUniversalIdentifier:
twentyStandardFlatApplication.universalIdentifier,
workspaceId,
allFlatEntityOperationByMetadataName: {
pageLayoutWidget: {
flatEntityToCreate: [],
flatEntityToDelete: pageLayoutWidgetsToDelete,
flatEntityToUpdate: pageLayoutWidgetsToUpdate,
},
},
},
);
if (validateAndBuildResult.status === 'fail') {
throw new Error(
`Failed to update the message campaign record page for workspace ${workspaceId}: ${JSON.stringify(
validateAndBuildResult,
null,
2,
)}`,
);
}
this.logger.log(
`Updated the message campaign record page for workspace ${workspaceId}`,
);
}
}
View on GitHub (pinned to 1f5dd2bbd2)
Solutions
- Read the embedded JSON report to find the failing widget operation and error code.
- Reconcile missing widgets (remove orphan references) or re-seed the message campaign record page.
- Re-run the 2.31 command for the workspace.
Defensive patterns
Strategy: try-catch
Try / catch
try {
await command.runOnWorkspace({ workspaceId, options });
} catch (e) {
const report = JSON.parse(e.message.split(':').slice(1).join(':').trim());
logger.error({ workspaceId, report }, 'message campaign record page trim failed');
} Prevention
- Ensure the message campaign record page layout exists before trimming.
- Remove orphaned widget references before retrying.
When it happens
Trigger: A page-layout widget targeted for delete no longer exists (already removed); a widget targeted for update references a view/field that is gone; the message campaign record page layout itself is missing or was replaced by a custom one.
Common situations: A prior run partially trimmed the page; a custom message campaign layout diverged from the standard; cross-version upgrade where the base page was never seeded.
Related errors
- Failed to delete gauge widgets for workspace ${workspaceId}
- Failed to backfill record page(s) for workspace ${workspaceI
- Failed to add the CalendarEvent Call Recording tab for works
- Failed to add NOT_RECORDED to CallRecording status metadata
- Failed to backfill standard skills for workspace ${workspace
AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12).
Data as JSON: /api/errors/9c4bec3c74995428.
Report an issue: GitHub.