clang-tidy Compliance

Warnings Resolved v0.1.1
0 Compile Errors
0 Compile Warnings
30 UE5 Gotchas Documented
8 Engineering Rules
v0.1.1 Development Preview
Validated on UE 5.7.4

8 Engineering Rules (S0–S7)

Every line of code, every commit, every system must comply. No exceptions.

S0 UE5 C++ Core Discipline

▼

11 non-negotiable rules for every line of C++ code. UPROPERTY for all UObject members, IsValid() checks, proper initialization, TObjectPtr usage, and TEXT() macro for all string literals.

S1 Delegate Lifecycle Guard

▼

Every Bind must have a symmetric Unbind. Pattern by subsystem type ensures zero dangling delegate pointers. This is the #1 crasher in UE projects — PGX enforces symmetric lifecycle in every subsystem.

S2 Contract Truth Sync

▼

Internal documentation and public docs must always reflect actual code. Both updated on every system change. If the docs don't match the code, the docs are wrong.

S3 Build.cs Integrity

▼

Correct and minimal dependencies. Star topology enforced in Build.cs. Every #include implies a Build.cs dependency. L2 plugins never depend on other L2 plugins.

S4 Single Source of Truth

▼

Metadata lives in ONE canonical location. Registry is the source, everything derives from it. If data appears in 2+ places, consolidate to one and derive the rest.

S5 Tooling Honesty

▼

Every UI element must be functional. No placeholder buttons, no TODO in user-facing strings. Inspector panels show real data, not hardcoded test values.

S6 Audit-Ready Definition of Done

▼

A system is not done when it works. It's done when it's clean, documented, and wired. 0 errors, 0 warnings, all deliverables completed, all docs updated, editor wiring checklist passed.

S7 Logging Hygiene

▼

Never LogTemp in production code. Every system has its own LogPGX{System} category. Appropriate verbosity levels: Log for normal ops, Warning for recoverable issues, Error for failures.

Top 10 Documented Gotchas

Each one cost hours of debugging. Documented so you don't have to.

#1 UPROPERTY + WITH_EDITOR

▼

UPROPERTY members CANNOT be inside #if WITH_EDITOR — UHT rejects it. Use #if WITH_EDITORONLY_DATA for UPROPERTY members instead.

#6 UButton::OnClicked is Dynamic

▼

UButton::OnClicked is a dynamic delegate and does NOT support AddLambda. Must use AddDynamic(this, &ThisClass::MyUFunction) with a proper UFUNCTION method.

#10 SHorizontalBox FixedWidth Removed

▼

SHorizontalBox::Slot().FixedWidth() was removed in UE 5.6. Use .AutoWidth() combined with SNew(SBox).WidthOverride(N) instead.

#11 FSlateFontInfo Constructor Deprecated

▼

The FSlateFontInfo constructor is deprecated in UE 5.6. Use FCoreStyle::GetDefaultFontStyle("Regular", Size) for all font creation.

#14 IAssetTypeActions::GetCategories()

▼

The override signature is virtual uint32 GetCategories() = 0 — NO const qualifier. Adding const will silently create a new function instead of overriding.

#19 GameplayTag Standard Pattern

▼

Use UE_DECLARE_GAMEPLAY_TAG_EXTERN in .h and UE_DEFINE_GAMEPLAY_TAG in .cpp. Never use UE_DEFINE_GAMEPLAY_TAG_STATIC in headers — it triggers static_assert under adaptive non-unity builds in UE 5.6.

#21 UHT Duplicate Header Names

▼

UHT does not allow two headers with the same filename across the entire project, even in different plugins. If two plugins both have Types.h, one must be renamed.

#24 UDeveloperSettings Module

▼

UDeveloperSettings lives in the DeveloperSettings module, NOT in Engine. Add "DeveloperSettings" to your Build.cs dependencies or compilation will fail with a missing symbol.

#27 Cross-DLL C Function Symbols

▼

C functions are NOT exported by default across DLL boundaries. Create an exported C++ wrapper function with the MODULE_API macro to make them accessible.

#29 EAutomationTestFlags Enum Class

▼

Since UE 5.5, EAutomationTestFlags changed from a namespace to an enum class. Use the underscore form: EAutomationTestFlags_ApplicationContextMask.

v0.1.1 Validation Gates

UE 5.7.4, Windows Development targets. Not verified: packaged targets, other platforms, other engine versions, arbitrary plugin subsets.

0
Editor Build Actions
0
Game Build Actions
0
Editor Automation Tests
0
Game Automation Tests
0
PGXDemo Tests
0
Sanitizer & Secret Findings

Zero dependency cycles. The PGXDemo sample exercises Message, GameFlow, Save and InputBuffer; the other 22 plugins are covered by dependency and linkage.

Get Started with PGX → ← Editor Tooling