Custom sys_ui_message Translation Reverts to Default After System UpgradeIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } After applying a system upgrade, a customized sys_ui_message record — typically a translated UI string — reverts to its out-of-box (OOB) default value. The update set that delivered the customization was applied successfully before the upgrade and the custom value was confirmed on the instance at that time. After the upgrade completes, the value is silently overwritten with no warning, no skipped-update notification, and no error in the upgrade log. Inspecting the record's update history shows a "System upgrade" entry as the actor at the time of the revert. Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } All Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } The platform tracks customizations by writing an entry in the sys_update_xml table. Each entry has a name field that identifies which record the customization covers. For sys_ui_message, the name takes the form sys_ui_message_<sys_id> — where the sys_id embedded in that name is the sys_id of the record on the instance where the update set was captured (the source instance). sys_ui_message uses a composite coalesce strategy: when an update set is applied to a target instance, the platform matches the incoming record to an existing row by the tuple {key, language, code} — not by sys_id. This means the update set applies correctly and the custom value appears on the target. However, the sys_update_xml tracking entry is still named using the source instance's sys_id, not the target instance's sys_id for that same record. When an upgrade runs, the upgrade engine delivers OOB content for sys_ui_message records identified by the target instance's native sys_id. The upgrade collision detector checks sys_update_xml for an entry matching that OOB delivery name. Because the customization is filed under the source instance's sys_id — a different value — the collision detector finds no match and concludes the record is uncustomized. It overwrites the custom value with the OOB content. The customization entry in sys_update_xml still exists after the upgrade, but its name references a sys_id that no longer corresponds to any live sys_ui_message row on the instance. The entry is effectively orphaned. Which field in sys_update_xml to check A common diagnostic mistake is to inspect the payload field inside the sys_update_xml row. The payload XML contains a sys_id reference, but during update set apply, the sys_id embedded in the payload XML is reconciled to the target instance's coalesce-matched record sys_id. This is expected platform behavior and is therefore not a reliable indicator of whether sys_ids were aligned at capture time. Use the name field, which retains the capturing instance's sys_id, for diagnostic purposes. Diagnostic Procedure Use the following steps to confirm whether the issue described here is the cause of the revert on a given instance. On the target instance, navigate to the affected sys_ui_message record and note its sys_id. Call this sys_id_target.Query the sys_update_xml table on the target instance for rows where the name field starts with sys_ui_message_ and the record corresponds to the affected key and language.You can do this from the URL bar: https://<instance>.service-now.com/sys_update_xml_list.do?sysparm_query=nameLIKESYS_UI_MESSAGE Filter further by the message key or language as needed.Evaluate what you find: If a row exists named sys_ui_message_<sys_id_target> — the name and the live record's sys_id match. This is a different issue from the issue noted in this article. Investigate elsewhere.If a row exists named sys_ui_message_<sys_id_other> where sys_id_other does not equal sys_id_target, check whether any sys_ui_message record with sys_id sys_id_other exists on this instance. If no such record exists, the name is orphaned — this is the characteristic fingerprint of this issue. The mismatch is confirmed. Verify upgrade history: on the affected sys_ui_message record, open the update history. An entry attributed to "System upgrade" at the time the custom value disappeared confirms the upgrade engine performed the overwrite. Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } The goal of the workaround is to ensure the sys_update_xml entry on the target instance is named with the sys_id that the OOB upgrade will deliver — so the collision detector recognizes the customization and skips the overwrite. For new customizations (preventing the problem before it occurs): On the target instance, locate the OOB sys_ui_message record for the key and language you intend to customize. Note its sys_id.Export that record from the target instance as XML (right-click the record, select Export > XML).Import the exported XML on the source instance (the development instance where you build update sets). This creates a row on the source instance that carries the same sys_id as the target's OOB row.Edit that imported row on the source instance to apply your customization.Capture the change into an update set. The resulting sys_update_xml entry will be named sys_ui_message_<sys_id_target> — matching the live row on the target.Retrieve and apply the update set on the target instance normally. Future upgrades will find the customization under the correct name and leave it untouched. For existing mismatched customizations (remediation after the problem has occurred): Re-apply the customization using the alignment procedure above: export the target's current OOB row, import to source, re-customize, re-capture to update set.On the target instance, apply the new update set. This replaces the orphaned sys_update_xml entry with one named correctly.Verify after the next upgrade that the custom value is preserved and no "System upgrade" overwrite entry appears in the record's update history.