From test-engineering
Build LowLevelTest executables using UnrealBuildTool or BuildGraph.
npx claudepluginhub issacchaos/local-marketplace --plugin test-engineeringThis skill uses the workspace's default tool permissions.
Build LowLevelTest executables using UnrealBuildTool or BuildGraph.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Build LowLevelTest executables using UnrealBuildTool or BuildGraph.
The llt-build skill compiles test executables for the Unreal Engine LowLevelTests (LLT) framework. It supports two build methods: direct UBT invocation (RunUBT -Mode=Test) and BuildGraph (RunUAT BuildGraph). The skill validates target names, platform SDKs, and project structure, then parses build logs to return structured results including executable paths, error counts, and failure diagnostics.
Supported platforms: Win64, Mac, Linux, PS5, PS4, Xbox, Switch, Android, iOS.
IMPORTANT: These conventions were validated through end-to-end testing of the SecurePackageReaderTests module:
Target Naming: Build target name must match the .Target.cs filename WITHOUT the .Target.cs extension
Build.sh SecurePackageReaderTests ...Build.sh SecurePackageReaderTestsTarget ....Target.cs includes "Target" suffix, but the build command does NOTBinary Location: For plugin tests, binaries are located at:
<repo_root>/FortniteGame/Binaries/<Platform>/<TestName>/ (NOT Engine/Binaries/)FortniteGame/Binaries/Mac/SecurePackageReaderTests/SecurePackageReaderTestsBuild Command: Always use Build.sh (not RunUBT.sh) with -Project flag:
./Engine/Build/BatchFiles/Mac/Build.sh <TestName> Mac Development -Project="<repo>/FortniteGame/FortniteGame.uproject"
Project Regeneration: After adding new tests to Default.uprojectdirs, run:
./GenerateProjectFiles.sh -project="<repo>/FortniteGame/FortniteGame.uproject"
See build-integration/ue-build-system.md for complete documentation.
Follow these steps to compile an LLT test target:
Before generating any build command, validate all inputs:
Engine/ subdirectory (or is itself within an Engine tree).llt-common validation to ensure the target name is a valid LLT test target.llt-common validation to confirm the platform string is recognized (Win64, Mac, Linux, PS5, PS4, Xbox, Switch, Android, iOS).llt-common to verify the platform SDK is installed. If missing, retrieve the SDK install hint and report the error.If any validation fails, return an error response using the standard LLT JSON envelope with code COMMAND_GENERATION_FAILED.
Find the Engine root directory from the project root:
<project_root>/Engine/ exists. If so, project_root is the engine root.Engine/.project_root as the engine root.Choose between direct UBT or BuildGraph based on the user's request:
RunUBT script.RunUAT BuildGraph with an XML script.Construct the command as follows:
<engine_root>/Engine/Build/BatchFiles/RunUBT.sh -Mode=Test -Target=<target_name> -Platform=<platform> -Configuration=<configuration>
RunUBT.bat on Windows, RunUBT.sh on Mac/Linux.-Project=<path_to.uproject> if:
.uproject file exists in the project root ANDEngine/Source/Programs/LowLevelTests/<target_name>/Engine/Source/Programs/LowLevelTests/) do NOT need -Project.-Clean flag if a clean build is requested.Construct the command as follows:
<engine_root>/Engine/Build/BatchFiles/RunUAT.sh BuildGraph -Script=<buildgraph_xml> -Target=<node_name> -set:BuildPlatforms=<platform>
RunUAT.bat on Windows, RunUAT.sh on Mac/Linux.<project_root>/Build/LowLevelTests.xml<engine_root>/Engine/Build/LowLevelTests.xml"Build <target_name> <platform>" if not explicitly specified.Run the generated command using the Bash tool. Capture the full stdout/stderr output as the build log.
After execution, parse the build log output to extract structured results (see Build Log Parsing section below).
| Platform | UBT Script | UAT Script |
|---|---|---|
| Windows | Engine/Build/BatchFiles/RunUBT.bat | Engine/Build/BatchFiles/RunUAT.bat |
| Mac/Linux | Engine/Build/BatchFiles/RunUBT.sh | Engine/Build/BatchFiles/RunUAT.sh |
Valid configurations: Debug, Development (default), Shipping, Test.
The -Project=<path> parameter is needed for game-project tests but NOT for Engine-only tests:
.uproject file in the project root (glob *.uproject, take the first match)..uproject found, this is an Engine-only project -- no -Project parameter needed.<engine_root>/Engine/Source/Programs/LowLevelTests/<target_name>/. If it does, this is an explicit Engine test -- no -Project needed.-Project=<uproject_path>.Parse the raw UBT/BuildGraph output to extract the following information:
Search for a line matching: Writing output file: <path>
Writing output file:\s+["']?([^\r\n"']+)["']? (case-insensitive)Search from the END of the log (reversed line scan) for summary lines:
Compilation Failed/Complete: N error(s), N warning(s)
(?:Compilation\s+)?(?:Failed|Complete)[d]?[:\.]?\s*(\d+)\s+error[s]?,\s*(\d+)\s+warning[s]?N error(s), N warning(s)
(\d+)\s+error[s]?,\s*(\d+)\s+warning[s]?Apply this logic in order:
Build failedCompilation failedERROR: (with trailing space)Build succeededCompilation completeTotal build time: N.N secondsCollect specific error messages (up to 10, deduplicated) by scanning each line for:
ERROR: (.+) -- general UBT errorsFatal Error: (.+) -- fatal errorserror [A-Z]\d+: (.+) -- compiler errors (e.g., error C2065: ...)error LNK\d+: (.+) -- linker errorsAll patterns are case-insensitive. Extract the captured group as the error message; if no capture group, use the full line. Stop after collecting 10 unique messages.
Check the full log text for platform SDK errors:
PS5 SDK not (found|installed|detected)PS4 SDK not (found|installed|detected)Xbox(One|SeriesX)? SDK not (found|installed|detected)Switch SDK not (found|installed|detected)Android (SDK|NDK) not (found|installed|detected)iOS SDK not (found|installed|detected)If a missing SDK is detected, include the platform name and SDK install hint (from llt-common) in the error response.
Search for: Total build time: N.N seconds or Cumulative action seconds: N.N seconds
(?:Total\s+build\s+time|Cumulative\s+action\s+seconds):\s+([\d.]+)\s+secondsAll responses use the standard LLT JSON envelope (see llt-common/SKILL.md).
The data field contains:
| Field | Type | Description |
|---|---|---|
action | string | Always "execute_command" |
command | string | Full build command to execute |
build_method | string | "direct_ubt" or "buildgraph" |
target | string | Target name |
platform | string | Platform name |
configuration | string | Build configuration (direct UBT only) |
instructions | string | Agent execution guidance |
The data field contains:
| Field | Type | Description |
|---|---|---|
target | string | Target name |
platform | string | Platform name |
build_success | bool | Whether build succeeded |
executable_path | string/null | Path to built executable |
build_time_seconds | float | Build duration (0.0 if unknown) |
warnings | int | Warning count |
errors | int | Error count |
If warnings > 0, a warning entry is added to the envelope warnings array.
The envelope errors array contains:
{
"severity": "error",
"message": "Build failed with 5 error(s)",
"code": "BUILD_FAILED",
"context": {
"target": "OnlineServicesMcpTests",
"platform": "Win64",
"error_count": 5,
"warning_count": 3,
"error_messages": ["error C2065: 'undeclared_identifier': undeclared identifier"],
"missing_sdk": "PS5",
"sdk_install_hint": "Install PS5 SDK from..."
}
}
| Code | Description | Resolution |
|---|---|---|
COMMAND_GENERATION_FAILED | Failed to generate build command | Check target name, platform SDK, project structure |
BUILD_FAILED | Compilation failed with errors | Review error messages, fix source code issues |
INVALID_PROJECT_ROOT | Project root directory invalid | Verify path points to UE project with Engine/ directory |
LOG_FILE_NOT_FOUND | Build log file not found | Ensure build was executed and log file path is correct |
| Platform | Script | SDK Check | Executable Output |
|---|---|---|---|
| Win64 | RunUBT.bat | Visual Studio | Engine/Binaries/Win64/<Target>.exe |
| Mac | RunUBT.sh | Xcode | Engine/Binaries/Mac/<Target> |
| Linux | RunUBT.sh | GCC/Clang | Engine/Binaries/Linux/<Target> |
| Consoles | BuildGraph | Platform SDK required | Platform-specific paths |