UEFN GroupActor silently deletes child actors from `__ExternalActors__` and leaves the level with dead references

Summary

UEFN’s editor-side GroupActor container becomes a silent data destroyer under World Partition + OFPA. Two independent failure modes have been observed, both reproducible across sessions:

  1. Ghost-reference GroupActor — a GroupActor retains serialized references to __ExternalActors__/…/*.uasset files that were deleted from the level. On Check In / Submit, AssetValidator_AssetReferenceRestrictions fires once per dead reference, producing hundreds of errors per submit attempt. In our project a single ghost GroupActor blocked submission with 694 errors, all pointing at long-deleted mesh actor files. The group’s label was empty, its location loaded as (0, 0, 0) via unreal.load_object, and it held zero live children — a fully corrupted container.

  2. Silent child eviction on parent-move — When a user moves a GroupActor’s parent-like anchor actor (a companion Actor the user considers the “root” of the group), the group’s Device_CharacterSpawner_C children are silently removed from the level between sessions. Placement → move parent → Save All → reopen → children gone. No warning, no error, no entry in the editor log. The corresponding __ExternalActors__ files are also removed. This has now happened twice on the same set of 4 NPC spawners inside the same FortUndergroundVolume, always following a move of the parent anchor.

Please select what you are reporting on:

Unreal Editor for Fortnite

What Type of Bug are you experiencing?

Unreal Revision Control

Steps to Reproduce

Failure Mode 1 (ghost references / 694 errors)

  1. World Partition island, OFPA enabled.
  2. Group several Device_CharacterSpawner_C and mesh actors via Ctrl+G into a GroupActor.
  3. Delete some of the individual grouped meshes over multiple sessions (typical cleanup).
  4. Attempt Revision Control → Check In Changes → Submit to main.
  5. Expected: Submit succeeds; the GroupActor updates its member list to drop deleted children.
  6. Actual: File(s) validation failed! with AssetValidator_AssetReferenceRestrictions errors, one per deleted child. Every error points at a __ExternalActors__/MyProject/<hash>/<hash>/<hash>.uasset path that no longer exists on disk. No option to auto-add / ignore / clean these references from the Submit UI.

Workaround (destructive): identify the corrupt GroupActor by iterating the level via Python (get_all_level_actors(), filter class_name == "GroupActor", look for label == "" and location == (0,0,0)), select it, delete it. Submit then succeeds.

Failure Mode 2 (silent child eviction on move)

  1. Same setup: World Partition + OFPA.
  2. Place 4 Device_CharacterSpawner_C inside a FortUndergroundVolume.
  3. Group each spawner with a nearby “parent” Actor via Ctrl+G.
  4. Move the parent Actor in the viewport by any distance.
  5. Save All → Submit → reopen the project.
  6. Expected: All 4 spawners follow the parent (or at least remain in the level).
  7. Actual: All 4 Device_CharacterSpawner_C are gone from the level. Their __ExternalActors__ files are gone from disk. The GroupActor container still exists but is empty. Re-placement succeeds, but the same eviction reoccurs on the next parent-move cycle.

Expected Result

Basic functions to ever work correctly even after years of reports, or the UI to ever be designed with the slightest semblance of common sense. My stuff to not be deleted without instruction or permission either by the clown car being reported here or the clown car that is your completely and insanely broken sync system. 3-digit IQ priorities by management, putting enough people on these issues and giving them enough time, a 3-digit IQ priority set which would not fail to include any of these, would include a lot more than these (if only you had 20% more staff): weapons&damage/jetpacks/ziplines(in uefn)/water/physics/ground collision/snapping/navmesh’s on SW prefabs/sync working correctly, ALSO tooltips/documentation/editor self-flagging/the UI/X done correctly/at all. Hard to take this question seriously with how funny it is to imagine myself ever being able to say, “I expect Unreal, more than 50% of even it’s literal most basic features, to work correctly/smartly like they were designed by somebody who’s ever used them/at all” LOL, and with how much work I have to do because of others absolute garbage work or work just completely not done due to abject clown car priorities (that’s a note for management about management’s priorities, which are the real bug, unless none of y’all can do those literal-most-basics right even given enough time and devs). I expect your “remember device” login function to work but that never does either (unironically).

Observed Result

(Copied from summary:) 1. Ghost-reference GroupActor — a GroupActor retains serialized references to __ExternalActors__/…/*.uasset files that were deleted from the level. On Check In / Submit, AssetValidator_AssetReferenceRestrictions fires once per dead reference, producing hundreds of errors per submit attempt. In our project a single ghost GroupActor blocked submission with 694 errors, all pointing at long-deleted mesh actor files. The group’s label was empty, its location loaded as (0, 0, 0) via unreal.load_object, and it held zero live children — a fully corrupted container.

  1. Silent child eviction on parent-move — When a user moves a GroupActor’s parent-like anchor actor (a companion Actor the user considers the “root” of the group), the group’s Device_CharacterSpawner_C children are silently removed from the level between sessions. Placement → move parent → Save All → reopen → children gone. No warning, no error, no entry in the editor log. The corresponding __ExternalActors__ files are also removed. This has now happened twice on the same set of 4 NPC spawners inside the same FortUndergroundVolume, always following a move of the parent anchor.

Platform(s)

Platform: PC
OS: Windows 11 Pro
UEFN version: 41.10 (per .uefnproject CompatibilityVersion)
Lore rev at time of report: 4158
Project scale: ~22,000 placed actors, ~500 Device_CharacterSpawner_C, ~200+ GroupActor instances, ~50 .verse scripts, World Partition + One File Per Actor (OFPA) enabled
Severity: High — recurring data loss on production maps; requires manual re-placement each occurrence; leaves persistent validation failures that block Check In / Submit

Additional Notes

Project scale: ~22,000 placed actors, ~500 Device_CharacterSpawner_C, ~200+ GroupActor instances, ~50 .verse scripts, World Partition + One File Per Actor (OFPA) enabled

Severity: High — recurring data loss on production maps; requires manual re-placement each occurrence; leaves persistent validation failures that block Check In / Submit

Contributing evidence collected from the repro project

  • lore status reports the tree as clean at latest revision immediately before the Submit dialog throws 694 reference errors. Lore CLI and UEFN’s editor-side submit tool disagree about pending state.
  • lore stage . reports No changes staged when disk is truly clean — cannot force-add referenced-but-unmodified files to the current changelist.
  • lore lock acquire <path> succeeds but does not cause the file to be included in the pending Submit changelist. Lock ≠ check-out.
  • The Content Browser in UEFN does not expose a “Not in Depot” / “Untracked” source-control filter (as standard UE does), so there is no discoverable UI to add missing __ExternalActors__ references to the Submit.
  • The Submit dialog has no “Add referenced files” / “Include dependencies” / “Reconcile” action.
  • The only UI-visible fix is to delete the corrupted GroupActor. Users lose whatever grouping they were relying on for organization.

Impact

  • Data loss. Users lose placed actors that they consider grouped for organization. In our case, 4 NPC spawners tied to a story set piece have been silently deleted twice in a row on the same map.
  • Submit blockage. Any project that has ever used GroupActor on World Partition levels eventually accumulates ghost references. Once accumulated, no in-editor UI path exists to clear them without deleting the group entirely. Users burn hours diagnosing “694 missing external actor” errors that have no discoverable fix.
  • Silent failure. Neither the editor log, the compile output, nor Lore status flags the eviction or the ghost references before Submit-time. The user only discovers the loss after (a) reopening the project and finding actors gone, or (b) attempting to submit and being blocked by validator errors.
  • Compounding trust erosion. Users learn to distrust Ctrl+G and stop using organizational grouping entirely, which is a regression on a fundamental editor feature.
  • No self-repair. UEFN does not offer a “GroupActor → cleanup dead references” or “GroupActor → repair” action. The Details panel exposes no serialized member list for inspection or manual pruning.

Suggested root cause (informed guess, using “informed” VERY loosely given the barely-started state of your documentation)

GroupActor was originally designed for pre-OFPA levels where every actor lived inside the .umap file and could be safely referenced by name. Under OFPA, each child actor lives in its own .uasset under __ExternalActors__/<hash>/…. When a child is deleted, the child’s file is removed from disk, but the parent GroupActor’s serialized member array is not synchronously updated in the same commit — leaving the group holding a dead pointer.

Move-based eviction (Failure Mode 2) appears to be a save-serialization bug: when the parent anchor actor’s transform delta triggers re-serialization of the group, the OFPA writeback for children fails silently (possibly because their external .uasset paths are hashed from actor state that changed during the move). No fallback re-hash occurs; the children are simply written out of existence.

Requested fixes (ordered by impact-to-effort)

  1. Emit a warning at group-modification time if any grouped child’s __ExternalActors__ file is missing or fails to serialize. Do not silently succeed.
  2. Add a “Reconcile references” / “Clean dead members” action to GroupActor in the right-click context menu. One click drops dead pointers without dissolving the group.
  3. Auto-heal ghost references in the Submit validator. If AssetValidator_AssetReferenceRestrictions finds a group member whose .uasset doesn’t exist, auto-remove the reference and offer a one-click “Repair and submit” button.
  4. Fix OFPA writeback for grouped children on parent-transform changes. Ensure children always persist across parent moves.
  5. Expose an “Untracked / Not in Depot” filter in the Content Browser so users can see external actors that aren’t in Lore’s index. This is the standard UE workflow that UEFN silently removes.

Reproducibility

Both failure modes reproduce reliably in the reporter’s project. Willing to share the affected .umap + __ExternalActors__/ snapshot at any Lore revision on request.

References

  • Similar or adjacent/related issue threads (unresolved): forums.unrealengine.com [community-tracked, various entries, usually no Epic response]

  • Related: AssetValidator_AssetReferenceRestrictions validator was extended to catch OFPA reference gaps but was not paired with a repair UI.

  • AssetValidator_AssetReferenceRestrictions validator surfaces the ghost-reference symptoms but is not paired with a repair UI, leaving users with detected-but-unfixable dead references.

Epic official docs on the affected area (not a comprehensive list):