A synthetic social graph is generated with genuine community ground-truth: several dense friend groups plus a sparse scattering of cross-group edges, without ever telling the algorithm which group is which. Run Phase 1 step executes one full sweep in which every node considers moving to whichever neighbouring community yields the largest real modularity gain, computed from ΔQ = ki,in/m − γ·Σtot·ki/(2m²). Aggregate → next level collapses the discovered communities into super-nodes (internal edges become self-loops, cross-community edges become weighted links) so the next phase can find higher-level structure. Run full algorithm automates both phases to convergence. The modularity score shown is always recomputed directly from the original graph's edges and the current community assignment of every original node — never a placeholder value.