pub fn build(root: &Path, files: &[SourceFile]) -> GraphExpand description
Build the fs graph fragment from walked source entries. Each entry becomes
a bare-path node carrying its type (file, symlink, or directory);
each symlink also contributes an edge to its resolved target within the graph
root. Directory nodes carry no edge — containment is implicit in path
structure.