Old references in dirty FWorldPartitionActorDesc causes actor to be placed in wrong streaming cell

We had an issue where an actor’s (Actor A) FWorldPartitionActorDesc was not updated to reflect the current state of the actor, and contained an outdated reference to an actor (Actor B) very far away, across the world axes at origin. This caused Actor B to be grouped with Actor A in streaming cell ~3km away, and so Actor B would not be not loaded even if you stood right next to it.

Note that the reference *did not actually exist anymore* - upon dirtying (by moving the actor slightly) and resaving Actor A, the reference disappeared from the ActorDesc, and streaming behaved as expected. Upon investigation I found many more actors whose ActorDesc.References array held old, invalid data. I haven’t yet figured out why this happens.

I found a commandlet (`WorldPartitionBuilderCommandlet`/`WorldPartitionResaveActorsBuilder`) which has an option to specifically resave dirty ActorDescs, so it seems this may be a known issue? Is the recommended solution just to resave everything?

This is not a known issue. In the case that B was deleted, A still holds a reference to it in the descriptor but it will be ignored when generating streaming.

Resaving all actors will fix it for sure, if you happen to find out a repro please tell us, thanks!

Upon further investigation, I found that the invalid reference is *not* removed on resave in UE 5.4, like it is in 5.5. But in UE 5.4, Actor B is actually loaded when you stand next to it. So most likely there was a bug in 5.4 that allowed removed references to remain in ActorDescs, even when resaved. Then changes to streaming behaviour in 5.5 caused the bug to manifest itself. We updated to 5.5 about 2 months ago, which explains why we only noticed the issue recently.

So, as you say, a resave should be all that’s needed to fix the issue. Thanks!