[BUG] 8.1.0 Changing UDT parent removes tags but they're still in json export with blank 'name' key value

I have this UDT definition below. Its changed from

Below is the json of that very UDT definition (right click, copy Json). The tag name key values have all been set to blank…

{
  "typeColor": -10233614,
  "name": "Valve-ValveFB_2c",
  "typeId": "Devices/_BaseUDTStructure",
  "parameters": {
    "Alarm_ParentDevice": {
      "dataType": "String"
    },
    "Alarm_Area": {
      "dataType": "String"
    },
    "PLCName": {
      "dataType": "String"
    },
    "Description": {
      "dataType": "String"
    },
    "DeviceName": {
      "dataType": "String"
    },
    "Global.": {
      "dataType": "String"
    }
  },
  "tagType": "UdtType",
  "tags": [
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Sts"
      },
      "valueSource": "opc",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "documentation": "DISABLED: VALVE HAS 2 INTERLOCK TAGS",
      "enabled": false,
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.ResetPB"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.IL_Opn"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Open Interlocked",
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Sim"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.FOI"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.OpenPB"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.ClosePB"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "name": "Info",
      "tagType": "UdtInstance",
      "tags": [
        {
          "expression": "{DeviceName}",
          "name": "Equip ID",
          "tagType": "AtomicTag"
        },
        {
          "name": "Description",
          "tagType": "AtomicTag"
        }
      ]
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.IL_Cls"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "name": "Close Interlocked",
      "tagType": "AtomicTag",
      "opcServer": "Ignition OPC-UA Server"
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Avail"
      },
      "valueSource": "opc",
      "dataType": "Boolean",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "valueSource": "expr",
      "expression": "case({[.]Status},\r\n\t1, \u0027Opening\u0027,\r\n\t2, \u0027Opened\u0027,\r\n\t3, \u0027Closing\u0027,\r\n\t4, \u0027Closed\u0027,\r\n\t5, \u0027USL\u0027,\r\n\t6, \u0027LSL\u0027,\r\n\t7, \u0027Faulted\u0027,\r\n\t\u0027Unknown\u0027\r\n)",
      "dataType": "String",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "name": "Alarms",
      "tagType": "Folder",
      "tags": [
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.AnyAlarm"
          },
          "name": "_AnyActive",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Opn_FLT"
          },
          "valueSource": "opc",
          "readOnly": false,
          "dataType": "Boolean",
          "writePermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "alarms": [
            {
              "setpointA": 1.0,
              "name": "Failed to Open",
              "label": {
                "bindType": "Expression",
                "value": "{InstanceName}"
              },
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Alarm_Area} +\r\nif({Alarm_ParentDevice}!\u003d\u0027\u0027,\u0027 \u0027 + {Alarm_ParentDevice},\u0027\u0027)"
              },
              "ackMode": "Auto"
            }
          ],
          "readPermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "tagGroup": "Default",
          "enabled": true,
          "opcServer": "Ignition OPC-UA Server",
          "name": "",
          "tagType": "AtomicTag"
        },
        {
          "name": "",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.MaintActive"
          },
          "valueSource": "opc",
          "readOnly": false,
          "dataType": "Boolean",
          "writePermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "alarms": [
            {
              "setpointA": 1.0,
              "name": "Maintenance Mode Active",
              "label": "{InstanceName} + \u0027 \u0027 + {TagName}",
              "priority": "Low",
              "displayPath": {
                "bindType": "Expression",
                "value": "replace(replace(replace(\r\n\t {itemPath}\r\n\t \r\n\t,{System/Site Name} + \u0027/\u0027, \u0027\u0027)\r\n\t,\u0027/Alarms/\u0027, \u0027/\u0027)\r\n\t,\u0027/\u0027,\u0027 \u0027)"
              }
            }
          ],
          "readPermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "tagGroup": "Default",
          "enabled": true,
          "opcServer": "Ignition OPC-UA Server",
          "name": "",
          "tagType": "AtomicTag"
        },
        {
          "name": "EXAMPLE",
          "tagType": "AtomicTag"
        },
        {
          "opcItemPath": {
            "bindType": "parameter",
            "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.FB_FLT"
          },
          "valueSource": "opc",
          "readOnly": false,
          "dataType": "Boolean",
          "writePermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "alarms": [
            {
              "setpointA": 1.0,
              "name": "Feedback Fault",
              "label": {
                "bindType": "Expression",
                "value": "{InstanceName}"
              },
              "priority": "High",
              "displayPath": {
                "bindType": "Expression",
                "value": "{Alarm_Area} +\r\nif({Alarm_ParentDevice}!\u003d\u0027\u0027,\u0027 \u0027 + {Alarm_ParentDevice},\u0027\u0027)"
              },
              "ackMode": "Auto"
            }
          ],
          "readPermissions": {
            "type": "AllOf",
            "securityLevels": []
          },
          "tagGroup": "Default",
          "enabled": true,
          "opcServer": "Ignition OPC-UA Server",
          "name": "",
          "tagType": "AtomicTag"
        }
      ]
    },
    {
      "opcItemPath": {
        "bindType": "parameter",
        "binding": "ns\u003d1;s\u003d[{PLCName}]{Global.}{DeviceName}.Mode"
      },
      "valueSource": "opc",
      "opcServer": "Ignition OPC-UA Server",
      "name": "",
      "tagType": "AtomicTag"
    },
    {
      "valueSource": "expr",
      "expression": "case({[.]Mode},\r\n\t0, \u0027Auto\u0027,\r\n\t1, \u0027Manual\u0027,\r\n\t2, \u0027Maintenance\u0027,\r\n\t\u0027Unknown\u0027\r\n)",
      "dataType": "String",
      "name": "",
      "tagType": "AtomicTag"
    }
  ]
}

What I did to get to here was:

  1. create UDT based on UDT Devices/_BaseUDTStructure and add tags to it
  2. I realised that the tags I created were already mostly part of another UDT with some minor changes, so I changed the template parent UDT from _base… to Devices/Valves/.... (which itself is based on the _BaseUDTStructure)
  3. I noticed that all previous tags that I had created that were also part of the new parent UDT had most of its properties overridden (not useful but I should have expected this and this should be the intended outcome), so I changed the parent type back to the _Base… and saved. This is the stage the above json and screenshot are at.
  4. the last step is then to change the UDT parent back to the new UDT type, but when I do this, the tag properties are still overridden (this actually makes sense and is what I hoped would happen - properties shouldn’t be lost regardless if the tag is there or not)

Edit: the more I think about it, the more uncertain I am of how I would expect this to work… I think the main odd part is the ‘name’ being set to “”