Version
com.wallstop-studios.data-visualizer 0.0.37 (0bb4527fb29ff9d69c8d3c262180f742b4b004ac).
Problem
BaseDataObject._assetGuid is serialized and receives [ReadOnly] only when ODIN_INSPECTOR is defined. In a standard Unity inspector/DataVisualizer InspectorElement, the backing field is editable. TrySetAssetPath() repairs only an empty GUID, so replacing a valid GUID with another non-empty string persists the corruption. Id then stops matching AssetDatabase.AssetPathToGUID(path).
That breaks consumers that treat BaseDataObject.Id as stable asset identity. Qora now defensively repairs its derived asset id, but every non-Odin consumer inherits the same surface.
Reproduction
- Create any concrete
BaseDataObject asset without ODIN_INSPECTOR.
- Open it in DataVisualizer or Unity's standard inspector.
- Edit Asset Guid to a different non-empty string.
- Save/reload.
- Observe
asset.Id != AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset)).
Expected
The GUID is not authorable and remains equal to the asset path GUID after ordinary inspector edits, clone/create lifecycle operations, and reload.
Suggested fix
- Apply the package's non-Odin read-only property attribute/drawer to
_assetGuid, or hide it from ordinary editing while retaining serialization.
- Make validation repair any mismatch, not only an empty value.
- Add an Editor test that corrupts
_assetGuid through SerializedObject, invokes the validation lifecycle, reloads the asset, and asserts the canonical GUID was restored.
No migration should be needed: the canonical value is derivable from the asset path.
Version
com.wallstop-studios.data-visualizer0.0.37 (0bb4527fb29ff9d69c8d3c262180f742b4b004ac).Problem
BaseDataObject._assetGuidis serialized and receives[ReadOnly]only whenODIN_INSPECTORis defined. In a standard Unity inspector/DataVisualizerInspectorElement, the backing field is editable.TrySetAssetPath()repairs only an empty GUID, so replacing a valid GUID with another non-empty string persists the corruption.Idthen stops matchingAssetDatabase.AssetPathToGUID(path).That breaks consumers that treat
BaseDataObject.Idas stable asset identity. Qora now defensively repairs its derived asset id, but every non-Odin consumer inherits the same surface.Reproduction
BaseDataObjectasset withoutODIN_INSPECTOR.asset.Id != AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset)).Expected
The GUID is not authorable and remains equal to the asset path GUID after ordinary inspector edits, clone/create lifecycle operations, and reload.
Suggested fix
_assetGuid, or hide it from ordinary editing while retaining serialization._assetGuidthroughSerializedObject, invokes the validation lifecycle, reloads the asset, and asserts the canonical GUID was restored.No migration should be needed: the canonical value is derivable from the asset path.