Adds the pure filtering primitives the graph pane composes: VaultGraph nodesWithin (depth-bounded BFS over undirected edges = the local graph around a note) and subgraph (retain a node set + the edges between them), plus GraphFilter, which combines depth-from-active with tag include/exclude over a caller-supplied tag map. Flutter-free; runs under dart test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>