Files
jbashrc/claude/integration-memory/MEMORY.md
2026-05-26 16:59:10 -04:00

6.0 KiB

User Preferences

  • Use build.py c++ for lightweight C++ rebuilds, build.py all for full rebuilds.
  • Does a lot of refactoring in early development stages. Be ready for frequent renames, restructuring, and changes of mind without pushback.
  • VS Code is the IDE. Use code --goto <filename>:<line> to open files/locations in the IDE instead of showing code snippets at the prompt.
  • When asked to "show me" code, open it in VS Code rather than pasting it in the terminal.
  • The Unreal Engine source for this project lives at /home/jyelon/integration.UE (sibling to the project dir), not ~/UnrealEngine. Always use this copy when working on the integration project.
  • Many of Unreal's basic data types (FString, TArray, TSet, TMap, etc.) are in integration.UE/Engine/Source/Runtime/Core/Public/Containers/.
  • Editor log files are at integration/User/jyelon/Saved/Logs/.

Critical: Minimize Diff Noise

  • The user reviews all changes via git diff in VS Code. Every unnecessary diff line costs review time.
  • Preserve all existing comments. Comments describe the logic, not the syntax — they survive refactors. Only remove a comment if the code it described was genuinely deleted.
  • Don't rename variables, reorder code, or reformat lines unless directly required by the task. If a variable name works, leave it. If a comment is in the right place, don't move it.
  • Don't make gratuitous changes. If it doesn't need to change, don't touch it.

Coding Style Preferences

  • No FREE-FLOATING (file-scope) static functions in Unreal code. Use class methods (incl. static member functions) or namespace-scoped functions instead. A static member function inside a class is fine — e.g. a Blueprint-callable factory. The rule is only against file-local static free functions. (Corrected 2026-05-26 after I misread this as banning all static.)
  • Prefer in-class member initializers (int x_ = 0; in the header) over explicit initialization in constructor bodies. When touching constructors, migrate toward this style.
  • Inline empty constructors/destructors in the header when possible.
  • Avoid ternary operator unless very concise (e.g., x ? 1 : 0). For longer expressions, use early-return if instead.
  • When asked for a small change, do exactly that. If it turns out to require broader refactoring, STOP and explain the situation instead of silently rewriting the module.

Tools

  • tools/clangd-query.py — Query clangd for C++ symbols. Uses a background daemon for fast responses after first invocation (~10s cold, milliseconds warm). Commands:
    • python3 tools/clangd-query.py symbol <name> — Find symbols by name across the whole project.
    • python3 tools/clangd-query.py definition <file> <line> <col> — Go to definition (1-based line/col).
    • python3 tools/clangd-query.py references <file> <line> <col> — Find all references (1-based line/col).
    • python3 tools/clangd-query.py diagnostics <file> — Get errors/warnings for a file.
    • python3 tools/clangd-query.py stop — Stop the daemon.
    • Prefer this over grep when looking for C++ class/function definitions or references.

Asset Naming Conventions

Folder Class Prefix Example
/Game/StaticMeshes UStaticMesh SM_ SM_Rock
/Game/SkeletalMeshes USkeletalMesh SKM_ SKM_Character
/Game/AnimSequences UAnimSequence SEQ_ SEQ_Walk
/Game/Tangibles UBlueprint (Actor) TAN_ TAN_Tree
/Game/Widgets UWidgetBlueprint WB_ WB_Hotkeys
  • Blueprints in /Game/Luprex/ use the lx prefix (e.g., lxPlayerController) and are loaded directly, not through the asset lookup system.
  • See Source/Integration/AssetLookup.cpp for the indexing logic.

UE Wingman

  • UE Wingman is a command-line tool (no longer an MCP server). Plugin lives in Plugins/UEWingman/; CLI is ue-wingman (on PATH at /home/jyelon/bin/ue-wingman).
  • Invoke directly via Bash. Subcommands are CamelCase, e.g. ue-wingman Graph_Dump <path> True.
  • Start by reading the manual: ue-wingman Documentation_Manual. Also useful: Documentation_Commands (concise list), Documentation_Command <Name> (detailed help for one command).
  • Common commands: Blueprint_Dump, Graph_Dump, Details_Dump, Details_Set, GraphNode_ShowMenu, GraphNode_ChooseMenu, Variables_Add/Modify/Remove, TypeName_Search.
  • Fetcher path syntax: /Game/<Asset>,graph:<GraphName>,node:<NodeId>,pin:<PinName> (also widget:, component:, levelblueprint:, structprop:). FNames in paths use periods for spaces (e.g. graph:Handle.Invalid.Lua.Command, not HandleInvalidLuaCommand). Other marks \"'(),.:;<=>& use HTML entity escapes like &#32;.
  • ue-wingman is much faster than the LLM — batch multiple commands with ; instead of running one at a time.

Project

Feedback