Solution
CollectSyncState() iterates all components, finds [Sync] properties without [Property], serializes them to JSON — in SaveSystem.cs. Tension: Use JSON serialization first, with a ByteStream/BytePack fallback for types that don't serialize cleanly to JSON. Outcome: RestoreSyncState() is called before RestoreNetworkOwnership() in the Load path.
1982fef8-ec7a-47d1-a61f-1476d0d7bc20
CollectSyncState() iterates all components, finds [Sync] properties without [Property], serializes them to JSON — in SaveSystem.cs. Tension: Use JSON serialization first, with a ByteStream/BytePack fallback for types that don't serialize cleanly to JSON. Outcome: RestoreSyncState() is called before RestoreNetworkOwnership() in the Load path.