The generated post-commit and post-checkout hooks export PYTHONHASHSEED=0 with a comment explaining that Louvain community assignments churn per process otherwise. The update subcommand does not, so a bare graphify update . (which the claude install CLAUDE.md template tells agents to run after every code change) re-clusters differently on each run. In our repo one such run flipped 24% of node-community assignments and changed about 100k lines in graphify-out with no code change, which also triggers the GitHub diff timeout in #3413.
Related: #2817 (still open). Proposal: set the seed inside the CLI for update, extract and cluster-only when the caller has not set it, so hook and CLI output agree. Until then the template's graphify update . advice produces exactly the churn the hooks were written to avoid.
The generated post-commit and post-checkout hooks export
PYTHONHASHSEED=0with a comment explaining that Louvain community assignments churn per process otherwise. Theupdatesubcommand does not, so a baregraphify update .(which theclaude installCLAUDE.md template tells agents to run after every code change) re-clusters differently on each run. In our repo one such run flipped 24% of node-community assignments and changed about 100k lines in graphify-out with no code change, which also triggers the GitHub diff timeout in #3413.Related: #2817 (still open). Proposal: set the seed inside the CLI for
update,extractandcluster-onlywhen the caller has not set it, so hook and CLI output agree. Until then the template'sgraphify update .advice produces exactly the churn the hooks were written to avoid.