Skip to content
Arxo Arxo

Propagation Cost

propagation_cost is the canonical change-propagation metric with three channels:

  • Structural (import graph reachability)
  • Temporal (git co-change reachability)
  • Hybrid (weighted structural + temporal)

The canonical system key is:

  • propagation_cost.system.ratio
  • propagation_cost.system.ratio
  • propagation_cost.system.structural_weight_effective
  • propagation_cost.system.temporal_weight_effective
  • propagation_cost.structural.module.ratio
  • propagation_cost.structural.module.reachable_pairs
  • propagation_cost.structural.module.total_pairs
  • propagation_cost.structural.module.k1_ratio
  • propagation_cost.structural.module.k2_ratio
  • propagation_cost.structural.module.k3_ratio
  • propagation_cost.structural.module.distance_decayed_ratio
  • propagation_cost.structural.module.out_reach_p50
  • propagation_cost.structural.module.out_reach_p90
  • propagation_cost.structural.module.in_reach_p50
  • propagation_cost.structural.module.in_reach_p90
  • propagation_cost.structural.module.top_out_hubs
  • propagation_cost.structural.module.top_out_hubs_table
  • propagation_cost.structural.module.top_in_hubs
  • propagation_cost.structural.module.top_in_hubs_table
  • propagation_cost.temporal.module.available
  • propagation_cost.temporal.module.commit_count
  • propagation_cost.temporal.module.cochange_threshold
  • propagation_cost.temporal.module.ratio
  • propagation_cost.temporal.module.reachable_pairs
  • propagation_cost.temporal.module.total_pairs
  • propagation_cost.hybrid.module.ratio
  • propagation_cost.hybrid.module.structural_weight
  • propagation_cost.hybrid.module.temporal_weight
  • propagation_cost.hybrid.module.divergence_abs

propagation_cost.system.ratio is the canonical system key and currently equals propagation_cost.hybrid.module.ratio.

  • propagation_cost.structural.function.ratio
  • propagation_cost.structural.function.reachable_pairs
  • propagation_cost.structural.function.total_pairs
  • propagation_cost.structural.function.callgraph_precision
  • propagation_cost.structural.function.confidence
  • propagation_cost.structural.function.ratio_low
  • propagation_cost.structural.function.ratio_high
  • propagation_cost.structural.function.betweenness_max
  • propagation_cost.structural.function.betweenness_avg
  • propagation_cost.structural.function.betweenness_skipped
  • propagation_cost.structural.function.top_betweenness
  • propagation_cost.structural.function.top_betweenness_table
  • propagation_cost.traffic.function.ratio
  • propagation_cost.traffic.function.reachable_weight
  • propagation_cost.traffic.function.total_weight
  • propagation_cost.traffic.function.telemetry_coverage
metrics:
- id: propagation_cost
enabled: true
config:
cochange_threshold: 2
hybrid_weights:
structural: 0.6
temporal: 0.4
k_hops: [1, 2, 3]
distance_decay_alpha: 0.5
betweenness:
max_nodes: 2000
finding_thresholds:
system_high: 0.5
system_critical: 0.7
temporal_high: 0.5
divergence_abs: 0.2
function_confidence_low: 0.5
  • hybrid_weights are normalized to sum to 1.0 (fallback to 0.6/0.4 if both are 0).
  • k_hops is sanitized to unique sorted integers in [1, 10] (default [1, 2, 3]).
  • distance_decay_alpha is clamped to (0, 1].
  • If git history is unavailable (temporal.module.commit_count == 0), temporal values stay 0, effective hybrid weights become structural=1.0 and temporal=0.0, and propagation_cost.system.ratio falls back to propagation_cost.structural.module.ratio.

The metric emits deterministic findings with rule_id:

  • arxo/propagation-cost/high-system
  • arxo/propagation-cost/high-temporal
  • arxo/propagation-cost/structural-temporal-divergence
  • arxo/propagation-cost/low-callgraph-confidence
  • pc.system -> propagation_cost.system.ratio
  • propagation_cost.module.ratio ->
    • propagation_cost.system.ratio for risk/budget consumers
    • propagation_cost.structural.module.ratio for structural-only consumers
  • propagation_cost.function.ratio -> propagation_cost.structural.function.ratio
  • propagation_cost.function.precision_ratio -> propagation_cost.structural.function.callgraph_precision
  • propagation_cost.function.traffic_weighted_ratio -> propagation_cost.traffic.function.ratio