Module Boundaries
Module Boundaries (Modularity)
Section titled “Module Boundaries (Modularity)”Overview
Section titled “Overview”modularity detects communities in the dependency graph and measures how well module boundaries are separated.
Outputs are emitted under modularity.*.
Quick Start
Section titled “Quick Start”arxo analyze --metric modularityWhat It Measures
Section titled “What It Measures”| Metric | What it tells you | Direction |
|---|---|---|
modularity.module.best_q | Best partition quality found across configured gamma values | Higher is better |
modularity.module.singleton_community_ratio | How fragmented the partition is (many singleton communities) | Lower is better |
modularity.module.boundary_edge_ratio | Share of edges crossing communities | Lower is better |
modularity.module.bridge_node_ratio | Share of modules acting as cross-community bridges | Lower is usually better |
Interpretation Bands
Section titled “Interpretation Bands”| Metric | Healthy | Watch | High risk |
|---|---|---|---|
modularity.module.best_q | >= 0.30 | 0.20 - 0.30 | < 0.20 |
modularity.module.singleton_community_ratio | <= 0.30 | 0.30 - 0.40 | > 0.40 |
modularity.module.boundary_edge_ratio | <= 0.55 | 0.55 - 0.70 | > 0.70 |
Use trend tracking with a baseline for large legacy codebases: improving direction matters as much as absolute thresholds.
Default Behavior
Section titled “Default Behavior”- Algorithm:
leiden(louvainoptional) - Directed objective: enabled
- Weighted edges: enabled
- Deterministic seed:
42 - Gamma sweep:
[0.5, 1.0, 1.5, 2.0]
Configuration
Section titled “Configuration”Use metric config under metrics[].config.modularity:
metrics: - id: modularity enabled: true config: modularity: algorithm: leiden directed: true weighted: true gamma_values: [0.5, 1.0, 1.5, 2.0] seed: 42 max_levels: 10 max_iterations: 100 stability_runs: 0 emit_findings: true findings_top_k: 10 include_call_graph: trueValidation behavior:
gamma_values: keeps finite positive values, sorted and de-duplicated.max_levels: clamped to1..50.max_iterations: clamped to1..1000.stability_runs: clamped to0..50.findings_top_k: clamped to1..100.
Output Contract
Section titled “Output Contract”Always-emitted numeric keys
Section titled “Always-emitted numeric keys”modularity.module.best_qmodularity.module.best_gammamodularity.module.community_countmodularity.module.avg_community_sizemodularity.module.max_community_sizemodularity.module.min_community_sizemodularity.module.singleton_community_ratiomodularity.module.boundary_edge_ratiomodularity.module.partition_ginimodularity.module.partition_entropymodularity.module.bridge_node_ratiomodularity.phase.compute_msmodularity.phase.ui_ms
Always-emitted structured keys
Section titled “Always-emitted structured keys”modularity.module.gamma_sweep_tablemodularity.module.communities_tablemodularity.module.nodes_table
Conditionally-emitted keys
Section titled “Conditionally-emitted keys”modularity.module.boundary_edges_topkwhen boundary edges existmodularity.module.bridge_nodes_topkwhen bridge nodes existmodularity.function.*wheninclude_call_graph: trueand call graph data is availablemodularity.cross.module_function_nmiwhen module/function overlap exists
Optional stability keys
Section titled “Optional stability keys”When stability_runs > 0:
modularity.module.stability.vi_meanmodularity.module.stability.vi_stdmodularity.module.stability.consensus_score
Findings
Section titled “Findings”The metric emits deterministic findings sorted by rule_id, then path, then line:
arxo/modularity/low-q(best_q < 0.20)arxo/modularity/high-fragmentation(singleton_community_ratio > 0.30)arxo/modularity/bridge-node-hotspot(participation_coeff >= 0.62anddegree >= 5)arxo/modularity/high-boundary-coupling(boundary score at or above p95)
Policy Examples
Section titled “Policy Examples”Strict Gate
Section titled “Strict Gate”policy: invariants: - metric: modularity.module.best_q op: ">=" value: 0.30 - metric: modularity.module.boundary_edge_ratio op: "<=" value: 0.55 - metric: modularity.module.singleton_community_ratio op: "<=" value: 0.30Pragmatic Legacy Gate
Section titled “Pragmatic Legacy Gate”policy: invariants: - metric: modularity.module.best_q op: ">=" value: 0.20 - metric: modularity.module.boundary_edge_ratio op: "<=" value: 0.70Related Metrics
Section titled “Related Metrics”- Circular Dependencies — cycles blur community boundaries
- Layer Structure — layering quality and modular boundaries reinforce each other
- Change Impact — boundary leakage increases ripple effects
- Critical Modules — hubs often act as bridge nodes across communities