Quick answer: Godot 4 resource references silently dropped when saving a tree with circular refs? Save format doesn't handle cycles - use weak references (NodePath strings) for back-pointers.
Parent has Child resource; Child references Parent. Save the parent; load it; Child's parent ref is null.
Use NodePath strings
Back-references as path strings. Resolved at load via get_node. Breaks the cycle in serialization.
Or use ResourceUID strings
For Resource-to-Resource refs. UIDs are stable across loads; cycle becomes a data structure rather than serialization risk.
Restructure to tree
Trees serialize cleanly. Cycles need flat storage with explicit lookup.
“Cycles are a data structure choice. Serializers prefer trees.”
If you find yourself fighting cycle bugs, the data model is the issue. Restructure; the cycle bugs disappear.