Skip to content

v0.14.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Aug 05:06
· 5 commits to main since this release

Fixes & Changes

  • [Rider] Bumped the target platform to Rider 2026.2 (was 2025.3). The HTTP/MCP server could fail to bind on newer Rider builds because engine-path detection falls back to regex-scraping an internal JetBrains type's debug string when the expected Path property isn't found; a shape change in that string on a new platform version could hand back a malformed path (e.g. a bare drive root) instead of failing cleanly. UeProjectService now validates any path recovered this way and discards it if implausible, rather than passing it downstream.
  • [Rider] Bumped the Kotlin Gradle plugin to 2.4.10 (was 2.1.20); Rider 2026.2's platform jars are compiled with newer Kotlin metadata that the old compiler couldn't read. Also declared an explicit bundledModule("intellij.rider.rdclient.dotnet") dependency (plus the matching <module> entry in plugin.xml): 2026.2 split this module out of the previously-implicit com.intellij.modules.rider classpath, and it owns the Project.solution/protocol-scheduler access the Kotlin frontend code (FathomHost, FathomSettings, FathomStatusBarWidget) depends on.
  • [UE5] Fixed the startup audit deadlocking against the editor's own asset compilation on large projects. The bulk re-audit ran every asset in one synchronous loop inside a progress dialog, and a slow task pumps Slate but does not run the engine tick, so FAssetCompilingManager::ProcessAsyncTasks never executed for the duration: compilation queued up but was never finalized. The audit's periodic garbage collection then tripped FSkinnedAssetCompilingManager's pre-GC hook, which blocks the game thread until all queued skinned assets finish, and assets waiting on dependencies cannot be started from inside that wait. The result was a modal frozen part-way through, with the editor's own compile progress bar frozen behind it, both resuming only on cancel. The synchronous path is gone; there is now a single tick-driven path that returns to the engine loop between assets so compilation keeps draining.
  • [UE5] The bulk re-audit no longer blocks the editor. Progress appears as a status-bar notification alongside the editor's own compilation progress instead of a modal dialog, and the editor stays usable throughout. The audit backs off when the engine's compile backlog gets large and resumes once it drains, so it stays out of the way of a startup compile storm without waiting on the small amount of compilation each audited asset triggers. Run Fathom.CancelAudit to defer the remainder to the next launch; anything already written is kept, since staleness is tracked per asset.
  • [UE5] Audit-driven garbage collection is now time-gated as well as count-gated, and drains pending compilation first. Collecting every 50 assets was harmless while the bulk loop held the game thread, but with the tick-driven path it would have meant a full GC every few seconds while the user was working.
  • [UE5] Capped the number of audit file writes in flight. These run on the same thread pool the editor uses for asset compilation, at a higher priority, so an uncapped bulk re-audit was starving the compilation it was waiting on.
  • [UE5] Fixed a fatal editor crash during the startup audit on projects containing a Blueprint saved with GeneratedClass = None. UBlueprint::PostLoad asserts on such an asset (check(nullptr != GeneratedClass)), and because LoadObject dies rather than returning null, no guard inside the auditors could catch it. A new pre-load check reads the GeneratedClass asset registry tag and skips the asset before it is ever loaded. Assets that hard-reference a broken Blueprint are loaded together with it and die the same way, so the whole transitive hard-referencer closure is skipped too. Soft references are not followed: they resolve lazily and never crash a load.
  • [UE5] Added a generic crash quarantine for fatal loads. The audit writes a breadcrumb file naming the package it is about to load and clears it afterwards. A breadcrumb that survives to the next editor launch means the process died on that package, so it is added to a persistent skip list in Saved/Fathom/quarantine.txt and logged by name. Any crash-on-load now costs one crash rather than an infinite crash loop on every launch, whatever the cause. Delete the relevant line from the quarantine file to retry an asset after repairing it.
  • [UE5] All audit asset loads now go through a single choke point, FAuditLoadGuard::TryLoadAuditableAsset, which owns the safety checks and the breadcrumb. The startup stale-check list is filtered centrally after the extension auditors have contributed their entries, so new auditors inherit the protection instead of having to reimplement it.
  • [UE5] Fixed a second fatal editor crash on the same assert, with a different cause: the startup stale check only waited for the asset registry to finish scanning, not for the editor's own startup loading. On a large project the asset registry finished while the startup map was still streaming, and the first audit load landed in that window, forcing FlushAsyncLoading and pulling a Blueprint through PostLoad before its generated class existed. The asset is fine on disk, so no registry check can predict this. Every audit load now gates on the editor being idle (no PIE session, no async loading, not loading a package, not collecting garbage) held continuously for five seconds, so we do not start in a brief gap between two of the engine's own loads. The gate gives up after two minutes and proceeds anyway rather than never auditing, and waits out a PIE session with no time limit. It is re-evaluated before every asset, so an editor that stops being idle part-way through pauses and resumes rather than pushing through.
  • [UE5] The crash breadcrumb now covers the whole per-asset audit rather than just the load call, so a crash in a gather pass quarantines the asset too instead of repeating on every launch.
  • [UE5] Fixed the plugin failing to compile on UE 5.5 at all. Two causes. First, UE_VERSION_NEWER_THAN_OR_EQUAL was only added in 5.6; on 5.5 it silently evaluates to 0, taking the wrong branch, and then trips -WarningsAsErrors. Replaced with the equivalent !UE_VERSION_OLDER_THAN in the StateTree and PCG auditors. Second, the StateTree auditor uses five separate APIs that do not exist in 5.5 (the shared property-binding collection, OnDelegate transitions, state descriptions, task completion, custom tick rates), and because UBT compiles every module in a plugin unconditionally, that broke the build for all 5.5 users rather than only StateTree ones. The StateTree module is now compiled out on 5.5, logging a line explaining why when loaded. The plugin builds against 5.5, 5.6, 5.7, and 5.8; StateTree audits require 5.6 or newer, and every other auditor works on 5.5.
  • [UE5] Skipped assets are now reported instead of silently missing. Saved/Fathom/skipped.md lists every excluded package grouped by reason, audit-manifest.json carries the same list as structured data, and get_audit_status surfaces it. The log names each unloadable seed asset and states how much of the project the referencer closure took out. Blueprints with ParentClass = None are reported as suspect: they still load and audit, but their output is likely incomplete.