The migration report
Every run writes two files:
<Project>/Saved/UEAPM/MigrationReport.md human-readable
<Project>/Saved/UEAPM/MigrationReport.json machine-readable (same content)
Use Open report in the panel to open the Markdown version.
Header and summary table
The report starts with the project name, date, mode (apply or dry run), engine version and the number of
open items (errors plus manual items). Then one row per step:
# Migration report: MyGame
- Date: 2026-09-25 01:01:12
- Mode: apply
- Engine: 5.8.3
- Open items (errors + manual): 1
| Step | Status | Changes | Left (error/manual) | Warnings | Time (s) |
|---|---|---|---|---|---|
| Project and config (`project`) | ran | 3 | 0 | 0 | 0.0 |
| Assets resave (`assets`) | ran | 873 | 0 | 0 | 14.1 |
| Enhanced Input (opt-in) (`input`) | not selected | 0 | 0 | 0 | 0.0 |
| ... | | | | | |
Status is ran, not selected, or the reason a step was skipped (for example after a restart-required step).
One section per step
Each step that ran has its own section with up to three tables.
Changes made
What was changed, one row per change:
| Category | Location | Message |
|---|---|---|
| Engine association | MyGame.uproject | EngineAssociation "4.27" -> "5.8" |
| Convert | /Game/FX/P_Fire.P_Fire | converted to /Game/FX/P_Fire_Converted.P_Fire_Converted |
Left to do
What you still have to do, with the fix:
| Severity | Category | Location | Message | Fix |
|---|---|---|---|---|
| Error | Compile error | /Game/.../GA_Example.GA_Example | CooldownGameplayEffectClass 'GE Example' grants no tags. ... | Either set CooldownGameplayEffectClass to None or give that effect a 'Grant Tags to Target Actor' component with a Cooldown.* tag. |
The Location is as precise as possible: a file with line (Source/.../File.cpp:181), an asset path, an asset
path plus graph and node (BP_Weapon: EventGraph > SpawnEmitterAttached), or an animation notify with its time.
Notes
Informational lines: build command, version census, number of materials checked, number of Blueprints compiled.
Severities
| Severity | Meaning | Counted as open item |
|---|---|---|
| Info | information only (Notes) | no |
| Fixed | a change UEAPM made (Changes made) | no |
| Warning | works, but should be reviewed (for example a reference still pointing at Cascade) | no |
| Error | does not work until fixed (load or compile error) | yes |
| Manual | UEAPM cannot do it; the fix tells you what to do | yes |
History
Every run is also copied to:
<Project>/Saved/UEAPM/History/MigrationReport_<yyyyMMdd_HHmmss>.md
<Project>/Saved/UEAPM/History/MigrationReport_<yyyyMMdd_HHmmss>.json
MigrationReport.md always holds the last run; the History folder keeps every earlier one (for example the
file-steps pass of a C++ project and the later full pass).
JSON fields
Top level:
| Field | Type | Content |
|---|---|---|
project | string | project name |
date | string | run date |
dryRun | bool | true for a dry run |
engine | string | engine version |
openItems | int | errors plus manual items |
steps | array | one entry per step |
findings | array | every finding of every step |
Each entry of steps: id, name, ran, skipped, skipReason, seconds.
Each entry of findings:
{
"step": "project",
"phase": "Analyze",
"severity": "Fixed",
"category": "Config packaging-inikeyblacklist-rename",
"location": "Config/DefaultGame.ini",
"line": 0,
"message": "move [/Script/UnrealEd.ProjectPackagingSettings] IniKeyBlacklist to ... IniKeyDenylist",
"fix": ""
}
phase is Analyze, Apply or Verify; line is 0 when the location has no line.