What's new
graphify updateis now idempotent — graph.json and GRAPH_REPORT.md only rewritten when content actually changes; topology comparison short-circuits clustering on unchanged graphs (#824)- Stable community IDs across rebuilds — deterministic Leiden/Louvain inputs (sorted + fixed seed); greedy overlap remapper preserves existing IDs so hand-edited labels don't drift (#824)
graphify update --no-cluster— skip reclustering, write raw AST graph only (mirrorsgraphify extract --no-cluster) (#824)- Fix
--no-clusterschema — now writes"links"key consistent with the full clustered path; previously toggled to"edges"on every mode switch - Fix labels file churn —
.graphify_labels.jsonno longer rewritten on no-op rebuilds - Fix shrink-check duplication — unified into a single
_check_shrink()helper across both code paths - Fix node ID format in skill.md — corrected to
{parent_dir}_{filename_stem}_{entity}; the old filename-only format caused ghost-duplicate nodes when AST and semantic extractors disagreed; existing graphs with ghost duplicates can be cleaned withgraphify extract --force - Fix serialization crashes —
default=strin clustering sort keys prevents crashes on non-JSON-serializable edge attributes - Docs — Prerequisites, optional extras table, env vars reference, troubleshooting, and dev setup added to README (#833)
Install / upgrade
pip install -U graphifyy
# or
uv tool install graphifyy