twentyhq/twenty · error · Error

Failed to add coreWorkflowId field for workspace

Error message

Failed to add coreWorkflowId field for workspace ${workspaceId}

What it means

Thrown by the 2.23 command that adds the coreWorkflowId field, after the standard field was successfully resolved. The command calls validateBuildAndRunLegacyWorkspaceMigration with a fieldMetadata creation operation. If the legacy pipeline returns status 'fail', the result is logged to logger.error and the generic error is thrown.

Solutions

  1. Read the logger.error JSON output for the specific failure report
  2. Flush flatFieldMetadataMaps from workspace cache and retry — the command is idempotent
  3. Verify the workflow object exists in flatObjectMetadataMaps
  4. Run with --dryRun to confirm the operation shape
Defensive patterns

Strategy: retry

Validate before calling

// Before running, flush field metadata cache
await workspaceCacheService.invalidateAndRecompute(workspaceId, [
  'flatFieldMetadataMaps',
  'flatObjectMetadataMaps',
]);

// Confirm the workflow object exists
const { flatObjectMetadataMaps } = await workspaceCacheService.getOrRecompute(workspaceId, [
  'flatObjectMetadataMaps',
]);

const hasWorkflow = isDefined(
  flatObjectMetadataMaps.byUniversalIdentifier[STANDARD_OBJECTS.workflow.universalIdentifier]
);

if (!hasWorkflow) {
  console.log('workflow object does not exist — command will skip');
}

Try / catch

// Retry once after flushing cache — the command is idempotent
try {
  await command.runOnWorkspace({ workspaceId, options: { dryRun: false } });
} catch (error) {
  if (error.message.includes('Failed to add coreWorkflowId field')) {
    await workspaceCacheService.flush(workspaceId, ['flatFieldMetadataMaps']);
    await command.runOnWorkspace({ workspaceId, options: { dryRun: false } });
  } else {
    throw error;
  }
}

Prevention

When it happens

Trigger: validateBuildAndRunLegacyWorkspaceMigration returns status 'fail' when creating the coreWorkflowId FlatFieldMetadata. Caused by: the workflow object not existing in workspace metadata at build time, a universal identifier collision, stale flatFieldMetadataMaps cache, or a DB error during column creation.

Common situations: Workspace cache reports the field as missing when it exists in the DB; a prior partial run created the DB column but not the metadata row; concurrent workspace modifications during upgrade.

Related errors


AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12). Data as JSON: /api/errors/3dc31f9a8bdcbbc2. Report an issue: GitHub.

Appendix: source

Thrown at packages/twenty-server/src/database/commands/upgrade-version-command/2-23/2-23-workspace-command-1784286706000-add-workflow-core-soft-ref-field.command.ts:134

          workspaceId,
          applicationUniversalIdentifier:
            twentyStandardFlatApplication.universalIdentifier,
          allFlatEntityOperationByMetadataName: {
            fieldMetadata: {
              flatEntityToCreate: [flatFieldMetadataToCreate],
              flatEntityToDelete: [],
              flatEntityToUpdate: [],
            },
          },
        },
      );

    if (result.status === 'fail') {
      this.logger.error(
        `Failed to add coreWorkflowId field:\n${JSON.stringify(result, null, 2)}`,
      );

      throw new Error(
        `Failed to add coreWorkflowId field for workspace ${workspaceId}`,
      );
    }

    this.logger.log(`Added coreWorkflowId field for workspace ${workspaceId}`);
  }
}

View on GitHub (pinned to 1f5dd2bbd2)