GraphiteEditor/Graphite · error
Failed to create combine paths node
Error message
Failed to create combine paths node
What it means
The same merge flow then inserts a Combine Paths node by resolving graphene_std::vector::combine_paths::IDENTIFIER through resolve_proto_node_type(...).expect("Failed to create combine paths node"). This is a DOCUMENT_NODE_TYPES lookup keyed by ProtoNodeIdentifier; None means the proto node identifier is not registered in this build. Because the identifier comes from the defining crate it is normally stable, so a panic here indicates the registry population and the vector module drifted (renamed identifier, feature-gated module).
Source
Thrown at editor/src/messages/tool/common_functionality/graph_modification_utils.rs:106
is_layer: false,
});
responses.add(NodeGraphMessage::MoveNodeToChainStart {
node_id: merge_node_id,
parent: first_layer,
});
responses.add(NodeGraphMessage::ConnectUpstreamOutputToInput {
downstream_input: InputConnector::layer_secondary_input(second_layer.to_node()),
input_connector: InputConnector::layer_secondary_input(merge_node_id),
});
responses.add(NodeGraphMessage::DeleteNodes {
node_ids: vec![second_layer.to_node()],
delete_children: false,
});
// Add a Combine Paths node after the merge
let combine_paths_node_id = NodeId::new();
let combine_paths_node = document_node_definitions::resolve_proto_node_type(graphene_std::vector::combine_paths::IDENTIFIER)
.expect("Failed to create combine paths node")
.default_node_template();
responses.add(NodeGraphMessage::InsertNode {
node_id: combine_paths_node_id,
node_template: Box::new(combine_paths_node),
});
responses.add(NodeGraphMessage::MoveNodeToChainStart {
node_id: combine_paths_node_id,
parent: first_layer,
});
// Add a path node after the combine paths node
let path_node_id = NodeId::new();
let path_node = document_node_definitions::resolve_network_node_type("Path")
.expect("Failed to create path node")
.default_node_template();
responses.add(NodeGraphMessage::InsertNode {
node_id: path_node_id,
node_template: Box::new(path_node),View on GitHub (pinned to c507b35645)
Solutions
- Verify combine_paths::IDENTIFIER matches the registered identifier in document_node_definitions after any rename
- Downgrade the expect to a logged early-return that cancels the merge cleanly
- Add a registry-coverage test for all identifiers referenced from tooling code paths
Example fix
// before
let combine_paths_node = document_node_definitions::resolve_proto_node_type(graphene_std::vector::combine_paths::IDENTIFIER)
.expect("Failed to create combine paths node")
.default_node_template();
// after
let Some(def) = document_node_definitions::resolve_proto_node_type(graphene_std::vector::combine_paths::IDENTIFIER) else {
log::error!("Combine Paths node definition missing from registry");
return;
};
let combine_paths_node = def.default_node_template(); Defensive patterns
Strategy: validation
Validate before calling
let Some(combine_def) = document_node_definitions::resolve_proto_node_type(graphene_std::vector::combine_paths::IDENTIFIER) else {
log::error!("Combine Paths node missing from registry");
return;
}; Type guard
fn proto_node_registered(identifier: graphene_std::ProtoNodeIdentifier) -> bool {
document_node_definitions::resolve_proto_node_type(identifier).is_some()
} Prevention
- Reference identifiers via their crate constants (IDENTIFIER) instead of retyped strings so renames propagate
- Check all node resolutions for a flow up front, then apply the queued messages atomically
- Unit-test the merge flow end-to-end so a registry drift fails in CI
When it happens
Trigger: Running the two-layer merge (both layers with vector data) when combine_paths::IDENTIFIER is absent from DOCUMENT_NODE_TYPES - renamed constant, changed crate structure, or a build with the vector module compiled out.
Common situations: Refactors of graphene_std node identifiers; feature flags excluding vector nodes from the registry; version skew between editor and graphene_std crates.
Related errors
- Failed to create merge node
- Failed to create path node
- Solidify Stroke node should exist
- Merge node
- Node
AI-assisted analysis of GraphiteEditor/Graphite@c507b35645 (2026-08-16).
Data as JSON: /api/errors/ad50e06a15ec1333.
Report an issue: GitHub.