# Serious Issues Remaining in UEWingman Handlers ## Breaking API Changes Several handlers switched from GUID-based node matching to `WingUtils::Identifies()`. Since the only caller is our own MCP bridge (which uses `FormatName` output from dump commands), this is actually fine — but it's a one-way door. - **ChangeStructNodeType, SetMaterialExpressionPosition, DeleteMaterialExpression, DisconnectMaterialExpressionPin** — node param now expects FormatName identifiers, not GUIDs - **RemoveStructField, AddStructField** — switched from MCPAssets (accepts bare names) to WingFetcher (requires full paths) - **SetPinDefaultValues** — entry struct changed from `{Blueprint, Node, PinName, Value}` to `{Pin, Value}` where Pin is a full fetcher path - **SpawnNodesInGraph** — changed from `Blueprint` + `Graph` params to single `Graph` path ## Potential Crashes - **SearchAssets** — `Data.GetClass()` can return null with `.Info()` (asset class not loaded). Would crash on `FormatName`. - **SpawnNodesInGraph** — assumes `GetOuter()` of a graph is always a `UBlueprint`. Fails for level blueprints. ## Silent Error Handling Gaps - **AddAnimStateToMachine, SetAnimStateAnimation, SetAnimTransitionRule** — `FindStateMachineGraph` and `FindStateByName` lack MCPErrorCallback. If the state machine or state isn't found, error reporting is ad-hoc/incomplete. ## Behavioral Changes - **SetBlendSpaceSamplePoints** — now aborts on animation lookup failure instead of silently inserting a blank sample. Probably better behavior, but different. ## Minor Concerns - **SetNodePositions** — node search across all graphs could match wrong node if names collide across graphs - **ReplaceFunctionCallsInBlueprint** — connection survival uses pointer comparison; could be unsafe if pins are recreated during the replacement - **DumpMaterialInstanceParameters** — parent chain lost class type info (Material vs MaterialInstance) ## Design changes - Saving assets is being done at somewhat unpredictable points. It's not entirely clear that we *should* be saving things every time an edit is made. It might be better to have an explicit "Save" MCP command.