mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-16 20:37:08 +00:00
0080d8ac43
`graphify update` preserved old edges keyed only on endpoint-node membership, so a removed import's edge survived forever whenever both endpoint nodes still existed (e.g. a.py no longer imports b, but both a and b are still present). The stale edge drove phantom circular-dependency findings; `--force` didn't help (it only gates the node-count shrink guard), only a clean rebuild did. _rebuild_code (watch.py) now also drops preserved edges whose source_file was re-extracted this run — an edge is owned by the file it was extracted from, and the fresh extraction re-emits whichever ones still exist. Scoped to source_file ownership (and the full-rebuild case, where evict_sources lists only deleted files), so edges with no source_file or owned by a non-re-extracted file are kept — cross-file edges that merely point at a re-extracted file (#1402 sourceless stubs/rewire) are not over-pruned. Reported by @UltronOfSpace (#1521). Regression test: a removed import's edge is gone after update; verified no over-prune (still-present imports survive) and no regression to deleted-file pruning. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>