UBT rewrites the target receipt on every -skipbuild run, breaking BuildGraph timestamp checks

Visual Studio 2026’s in-box Unreal Engine Tools issues exactly that -skipbuild command in the background, roughly hourly, while a header file is the active document:

dotnet UnrealBuildTool.dll -Target=<Project>Editor Win64 Development -Project=“…” -WaitMutex -FromMsBuild -architecture=x64 -file=“<header>.h” -nooutput -skipbuild

If a BuildGraph job is running at the time, its post-node integrity check sees the receipt as modified between the node that produced it and the node that consumes it, and fails:

ERROR: File date/time mismatch for <Project>/Binaries/Win64/<Project>Editor.target - was 8/13/2026 7:59:46 PM, expected 8/13/2026 5:59:43 PM

This cost us an overnight PS5 cook. Editing the header is not required — simply leaving it open as the active document is enough.

In Visual Studio 2026 Professional 18.8.2 (July 2026 Feature Update, Stable channel), confirm “Enable Automatic Code Analysis with Unreal Header Tool for header files (*.h)” is enabled under Tools > Options > Unreal Engine.

[Image Removed]

This VS update is when we noticed that this option is defaulted on and when our cooks started failing with this issue, or possibly I had a header file open and active in VS.

Either way an unmodified header file open in VS when it executes UBT with -skipbuild should not update the timestamp on &lt;Project&gt;Editor.target which causes this issue.

[Attachment Removed]

Our solution was to Mirror the pattern ModuleManifest and BuildVersion already use: add a TextWriter

Write overload and a WriteIfModified helper to TargetReceipt, then use WriteIfModified

for both the version file and the receipt in WriteMetadataMode.

3 changes:

  1. Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs
  2. Engine/Source/Programs/UnrealBuildTool/System/TargetReceipt.cs
  3. Engine/Source/Programs/UnrealBuildTool/Modes/WriteMetadataMode.cs

BuildMode.cs

[Image Removed]

TargetReceipt.cs

[Image Removed]

WriteMetadataMode.cs

[Image Removed]

[Attachment Removed]

I would recommend disabling that Visual Studio setting, I am unsure what the intent of it was for Microsoft when they added that setting but we have brought it up with them that we don’t think it is useful. I will look into making -SkipBuild not update the target in this manner, but since the UBT dependency system is entirely timestamp based it may have some undesired repercussions. I am unsure if any such changes will make it into a 5.8 hotfix or not.

[Attachment Removed]