{"record":{"id":"90d1b91fc9de94ef","repo":"FyroxEngine/Fyrox","slug":"unable-to-find-original-handle-for-node-the-no","errorCode":null,"errorMessage":"Unable to find original handle for node {}. The node will be removed!","messagePattern":"Unable to find original handle for node (.+?)\\. The node will be removed!","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"fyrox-graph/src/lib.rs","lineNumber":1437,"sourceCode":"\n                            let base = node.base().clone();\n                            let mut resource_node_clone = resource_node.clone();\n                            variable::mark_inheritable_properties_non_modified(\n                                &mut resource_node_clone as &mut dyn Reflect,\n                                &ignored_types,\n                            );\n                            resource_node_clone.set_base(base);\n                            *node = resource_node_clone;\n                        }\n\n                        // Then try to inherit properties.\n                        Log::verify(variable::try_inherit_properties(\n                            node,\n                            resource_node,\n                            &ignored_types,\n                        ));\n                    } else {\n                        Log::warn(format!(\n                            \"Unable to find original handle for node {}. The node will be removed!\",\n                            node.name(),\n                        ))\n                    }\n                }\n            }\n        }\n\n        Log::writeln(MessageKind::Information, \"Original handles resolved!\");\n    }\n\n    /// Maps handles in properties of instances after property inheritance. It is needed, because when a\n    /// property contains node handle, the handle cannot be used directly after inheritance. Instead, it\n    /// must be mapped to respective instance first.\n    ///\n    /// To do so, we at first, build node handle mapping (original handle -> instance handle) starting from\n    /// instance root. Then we must find all inheritable properties and try to remap them to instance handles.\n    fn remap_handles(&mut self, instances: &[(Handle<Self::NodeWrapper>, Resource<Self::Prefab>)]) {","sourceCodeStart":1419,"sourceCodeEnd":1455,"githubUrl":"https://github.com/FyroxEngine/Fyrox/blob/76c91aad8eca488ce527b1af707be8b3b24ad72d/fyrox-graph/src/lib.rs#L1419-L1455","documentation":"While restoring original handles and inheriting properties, each instance node must find its counterpart in the parent resource via its original handle. When a node has no such original handle (it was added locally, or the link data was lost), it cannot inherit and is scheduled for removal with this warning.","triggerScenarios":"restore_original_handles_and_inherit_properties iterates instance nodes and finds one whose original_handle_in_resource() is None — e.g. a node added at runtime to an instance then synced, or corruption of instance metadata.","commonSituations":"Runtime-added child nodes on a scene-resource instance when the instance is re-synchronized with its asset; loading a scene saved by an older engine version without original-handle metadata; manually copied nodes between instances.","solutions":["Keep runtime-added nodes separate from resource instances (create them in a non-instance graph or re-instantiate after adding).","Re-add the node intentionally after sync; treat removal as expected for unsourced nodes.","Save the scene so original-handle metadata is generated, or upgrade through the proper editor version.","If the node should be inherited, ensure it exists in the parent prefab."],"exampleFix":"// before\nlet child = instance.graph_mut().add_node(my_node); // added to resource instance at runtime\n// after\n// add runtime-only nodes to a separate free-floating graph, or:\nlet child = scene.content_ref().graph_mut().add_node(my_node);","handlingStrategy":"validation","validationCode":"// find instance nodes lacking an original handle before sync removes them\nfn unlinked(instance: &SceneResourceInstance) -> Vec<Handle<Node>> {\n    instance.nodes()\n        .filter(|n| n.original_handle_in_resource().is_none())\n        .map(|n| n.self_handle())\n        .collect()\n}","typeGuard":"fn has_original(n: &Node) -> bool { n.original_handle_in_resource().is_some() }","tryCatchPattern":"let unlinked = unlinked(&instance);\nif !unlinked.is_empty() {\n    // move runtime-created nodes out or re-create them after sync\n}","preventionTips":["Add runtime nodes to free graphs, not resource instances","Save scenes via the editor so original-handle metadata is written","Don't copy nodes between instances manually; re-instantiate instead","Upgrade scene files through the editor when changing engine versions"],"tags":["graph","prefab","sync","node"],"backgroundTag":"node-missing-in-parent-asset","analyzedSha":"76c91aad8eca488ce527b1af707be8b3b24ad72d","analyzedAt":"2026-09-10T16:04:01.633Z","contentChangedAt":"2026-09-10T16:04:01.633Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}