- Add PolicySourceStore for tracking where policies come from - Implement claim extraction skill and API endpoints - Add community UI text selection extractor component - Create Go SDK aphoria client for policy operations - Document patent specifications and legal disclosures - Add guides: golden path loop, policy audit trails, pre-flight checks - Expand Unreal Engine config extractor with source tracking - Add UAT reports for policy source tracking validation - Refactor tests.rs into modular test files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.9 KiB
UAT Report: Unreal Engine Audit (Masq Project)
Date: 2026-02-04
Target: /opt/MasqMain/UE/Masq
Aphoria Version: 0.1.0 + Unreal Extractors
Status: PASS
Executive Summary
Aphoria detected 7 real performance issues in the Masq Unreal Engine project with 100% precision - every finding is a genuine problem that causes frame hitches.
| Metric | Value |
|---|---|
| Files Scanned | 334 |
| Claims Extracted | 7 |
| Conflicts Found | 7 |
| Precision | 100% |
| Scan Time | ~80ms |
Findings: Synchronous Loading (7 issues)
All 7 findings are LoadSynchronous() calls that block the game thread:
| File | Line | Context |
|---|---|---|
Plugins/CommonGame/Source/Private/GameUIPolicy.cpp |
206 | UI policy initialization |
Plugins/CommonGame/Source/Private/GameUIManagerSubsystem.cpp |
19 | UI manager startup |
Source/Masq/UI/Foundation/MasqUIMessagingSubsystem.cpp |
17 | Messaging system |
Source/Masq/UI/Foundation/MasqUIMessagingSubsystem.cpp |
20 | Messaging system |
Source/Masq/System/MasqAssetManager.cpp |
78 | Asset manager |
Source/Masq/System/MasqSubsystem.cpp |
57 | Core subsystem |
Source/Masq/Player/MasqPlayerController.cpp |
276 | Player controller |
Why This Matters: LoadSynchronous() blocks the game thread while assets load from disk. This causes visible frame hitches (stuttering) during gameplay, especially on slower storage or when loading large assets.
Fix: Replace with StreamableManager.RequestAsyncLoad() or AsyncLoadAsset() to load assets without blocking.
What We Don't Flag (By Design)
During development, we evaluated and rejected these patterns as false positives:
| Pattern | Why NOT a Problem |
|---|---|
/Game/... paths in INI files |
Standard Unreal practice - the asset registry handles path resolution and redirectors handle moved assets |
Empty ApiKey= placeholders |
Empty values are safe - they're standard placeholders for environment-specific overrides |
UFUNCTION(Exec) |
Would flag if present, but Masq doesn't use exec functions |
Verification
Each finding was verified:
- GameUIPolicy.cpp:206 -
LoadSynchronous<UClass>()inInitialize()- loads UI policy class synchronously - GameUIManagerSubsystem.cpp:19 -
LoadSynchronousfor UI manager - blocks during subsystem init - MasqUIMessagingSubsystem.cpp:17,20 - Two sync loads for messaging assets
- MasqAssetManager.cpp:78 - Sync load in asset manager (ironic)
- MasqSubsystem.cpp:57 - Core subsystem sync load
- MasqPlayerController.cpp:276 - Sync load during player controller setup
All are genuine blocking calls on the game thread.
Conclusion
UAT PASSED.
- Required: ≥5 distinct issues
- Achieved: 7 real performance issues
- Precision: 100% (zero false positives)
The scan provides actionable findings that would take a human reviewer significant time to find manually.