fix: reject file edge labels that have more than one source node - #597
Merged
pradeeban merged 1 commit intoOct 5, 2026
Merged
Conversation
An edge label in mkconcore is a single volume with one writer. edges_dict keeps the source of the first edge with a given label and silently ignores the source of any later edge with the same label, so the second source node never gets an out mount and everything it writes on that edge is lost. The target also ends up mounting the same volume twice (in1 and in2). mkconcore now stops with an error when a file edge label has more than one source node, and concore validate reports the same case so it gets caught before building.
Sahil-u07
force-pushed
the
fix/shared-edge-label
branch
from
October 2, 2026 23:30
a8992a8 to
9810006
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #596
When two file edges share a label but come from different source nodes, mkconcore keeps the first source and drops the rest. The second source never gets an out mount, so its writes on that edge go nowhere, and the target mounts the same volume twice. Nothing reported it, and
concore validatepassed the workflow.An edge label maps to one volume with a single writer (
edges_dictislabel -> [source, [targets]]), and none of the graphml files in the repo use the same label from two sources, so I made this an error instead of trying to support it.Changes:
edge_label_multiple_sourceserror_type for--format jsonFan-out (one source, several targets on the same label) still works the same as before.
Verified with:
pytest tests/test_cli.py tests/test_graph.py(both new tests fail on dev without the fix)built demo/sample.graphml and demo/generalcontrol.graphml with posix to make sure normal workflows are unaffected
ruff format --check .andruff check .passBefore
On dev the workflow passes validation, and the generated run script has no out mount for B while C mounts
sharedtwice:After
With this PR both validate and build report the problem: