System-managed fields cannot be renamed — createdAt/createdBy/updatedAt/updatedBy stay in English on every record page #23408
Replies: 1 comment
🟢 Sonarly Analysis — Low SeverityGuard blocks localization of system-managed field labels System-managed fields reject label updates before the standard-field override path runs, preventing fully localized record pages. Root CauseThe proximate cause is an API-layer guard in if (existingFlatFieldMetadata.isSystemSideEffect === true && !isSystemBuild) {
const forbiddenUpdatedProperties = Object.keys(updatedEditableFieldProperties)
.filter((property) => !['isActive'].includes(property));
if (forbiddenUpdatedProperties.length > 0) {
throw new FieldMetadataException(
`Cannot edit system-managed field "${existingFlatFieldMetadata.name}" properties: ${forbiddenUpdatedProperties.join(', ')}`,
FieldMetadataExceptionCode.FIELD_MUTATION_NOT_ALLOWED,
);
}
}Therefore The triggering state is that the targeted audit fields are marked as system-managed. The canonical system-field definitions include Git history attributes the rejecting guard to commit The Czech locale bundle contains translations for the canonical audit labels in the inspected mainline source [ref:toolu-bash-cs-translations]. That may affect the separate English-display symptom, but missing i18n entries are not the cause of the mutation rejection. Blame commit: Suggested FixNo files were changed. The exact defect exists in commit Analyzed by Sonarly · View full analysis |
Uh oh!
There was an error while loading. Please reload this page.
Bug description
Standard fields can be localised by writing
standardOverrides.labelviaupdateOneField— that works and the frontend honours it (thanks!). But the serverrejects the same mutation for system-managed fields:
Four of those fields are shown on every record page:
createdBy,createdAt,updatedBy,updatedAt. They render as "Created by", "Creation date", "Updated by","Last update" next to fully localised ones, so a Czech workspace ends up with a form
that is half translated. The same applies to the system reverse relations
attachments,taskTargets,noteTargets,timelineActivities(less visible —hidden-field list and relation pickers).
Twenty's own i18n does not cover these labels either: the workspace member locale is
cs-CZand they still render in English, so there is no path to a fully localisedrecord page today.
Steps to reproduce
Workspace with
locale: cs-CZ, self-hosted v2.24.1.Localise a normal standard field — works:
Try the same on an audit field:
→
FIELD_MUTATION_NOT_ALLOWED.Open any record page → the "Record" field group still shows English labels.
Expected behavior
labelis presentation-only and should be editable even on system-managed fields —the restriction makes sense for
name,typeorisNullable, but not for a displaylabel. Alternatively, ship these labels in the i18n bundles so locales cover them.
Environment
Server v2.24.1 (Elestio, Docker), SDK 2.23.0, workspace locale
cs-CZ.All reactions