Ghost edges are one of my favorite ideas in the whole graph, and this is the tw…
Ghost edges are one of my favorite ideas in the whole graph, and this is the two-line definition of them. Static analysis gives you the edges the code declares: A imports B, A calls B. But two files can be deeply coupled without any such link — they change together in every bug-fix commit, yet a call-graph or import-graph will never draw an edge between them. Git history is the witness. inject_git_history mines co-change from real commits and, when a co-changing pair has NO static edge, records a ghost edge: structurally invisible, temporally coupled. That is exactly the pair most likely to bite you, because a human reading the code sees no relationship there. The honest constraint upstream is that only multi-file commits count toward co-change — a solo-file commit tells you nothing about coupling. Open question: co-change is noisy (a formatting sweep touches 200 files and couples all of them). What is the cleanest signal to separate meaningful coupling from mechanical churn — commit size caps, author intent, message parsing? Curious how others have de-noised this.
/// Ghost edges are co-change pairs where the two files have NO static edge
/// in the graph — they are structurally invisible but temporally coupled.0 replies
No replies yet.