From 97b669b4802c86ee09719120591523b54bde0950 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Thu, 19 Feb 2026 19:48:51 +0530 Subject: [PATCH 1/2] fix: error on duplicate node labels in mkconcore and validate --- concore_cli/commands/validate.py | 9 ++++++++- mkconcore.py | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/concore_cli/commands/validate.py b/concore_cli/commands/validate.py index 7cacab9..6adf5fc 100644 --- a/concore_cli/commands/validate.py +++ b/concore_cli/commands/validate.py @@ -117,7 +117,14 @@ def finalize(): warnings.append(f"Node {node_id} has no label") except Exception as e: warnings.append(f"Error parsing node: {str(e)}") - + + # duplicate labels cause silent corruption in mkconcore.py (#384) + seen = set() + for label in node_labels: + if label in seen: + errors.append(f"Duplicate node label: '{label}'") + seen.add(label) + node_ids = {node.get('id') for node in nodes if node.get('id')} for edge in edges: source = edge.get('source') diff --git a/mkconcore.py b/mkconcore.py index 0a11948..da935f8 100644 --- a/mkconcore.py +++ b/mkconcore.py @@ -307,6 +307,12 @@ def cleanup_script_files(): except (IndexError, AttributeError): logging.debug('A node with no valid properties encountered and ignored') +label_values = list(nodes_dict.values()) +duplicates = {label for label in label_values if label_values.count(label) > 1} +if duplicates: + logging.error(f"Duplicate node labels found: {sorted(duplicates)}") + quit() + for edge in edges_text: try: data = edge.find('data', recursive=False) From 4ebae6cde5ab4e86cd0cfb83c0a598dad04fc20d Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Fri, 20 Feb 2026 11:47:06 +0530 Subject: [PATCH 2/2] remove issue ref from inline comment --- concore_cli/commands/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/concore_cli/commands/validate.py b/concore_cli/commands/validate.py index 6adf5fc..d9a39dd 100644 --- a/concore_cli/commands/validate.py +++ b/concore_cli/commands/validate.py @@ -118,7 +118,7 @@ def finalize(): except Exception as e: warnings.append(f"Error parsing node: {str(e)}") - # duplicate labels cause silent corruption in mkconcore.py (#384) + # duplicate labels cause silent corruption in mkconcore.py seen = set() for label in node_labels: if label in seen: