fix: persist cluster-only analysis sidecar

This commit is contained in:
sanmaxdev
2026-07-02 22:29:29 +01:00
committed by safishamsi
parent d89ec68af9
commit 62f49bad73
2 changed files with 41 additions and 0 deletions
+11
View File
@@ -3655,6 +3655,17 @@ def main() -> None:
stages.mark("report")
from graphify.export import backup_if_protected as _backup
_backup(out)
analysis = {
"communities": {str(k): v for k, v in communities.items()},
"cohesion": {str(k): v for k, v in cohesion.items()},
"gods": gods,
"surprises": surprises,
"questions": questions,
}
(out / ".graphify_analysis.json").write_text(
json.dumps(analysis, indent=2, ensure_ascii=False),
encoding="utf-8",
)
to_json(G, communities, str(out / "graph.json"), community_labels=labels)
labels_path.write_text(json.dumps({str(k): v for k, v in labels.items()}, ensure_ascii=False), encoding="utf-8")
# Membership signatures beside the labels so a later cluster-only can detect
+30
View File
@@ -323,6 +323,36 @@ def test_cluster_only_creates_output_dir_when_missing(tmp_path):
# Regression test for #1027 - cluster-only must remap labels via node overlap
def test_cluster_only_persists_analysis_sidecar(tmp_path):
"""cluster-only must refresh .graphify_analysis.json alongside graph.json.
Downstream export commands use the sidecar for community membership and
should not see stale or missing community analysis after a recluster.
"""
out = _make_graph(tmp_path)
analysis_path = out / ".graphify_analysis.json"
analysis_path.unlink()
r = _run(["cluster-only", ".", "--no-viz"], tmp_path)
assert r.returncode == 0, r.stderr
assert analysis_path.exists()
analysis = json.loads(analysis_path.read_text(encoding="utf-8"))
assert analysis["communities"]
assert analysis["cohesion"]
assert "gods" in analysis
assert "surprises" in analysis
assert "questions" in analysis
graph = json.loads((out / "graph.json").read_text(encoding="utf-8"))
graph_cids = {
str(node["community"])
for node in graph.get("nodes", [])
if node.get("community") is not None
}
assert graph_cids == set(analysis["communities"])
def test_cluster_only_remaps_labels_to_previous_cids(tmp_path):
"""cluster-only must invoke remap_communities_to_previous so the existing
.graphify_labels.json keeps tracking the same conceptual communities after