Call cycle (deadlock) detection.
Finds module-level synchronous dependency cycles: module A sync-calls B and B sync-calls A, either directly or transitively through the call graph. A cycle between two GenServer modules means each can block waiting for the other, producing a deadlock.
Requires the OTP extractor for sync_call and implements_behaviour facts.
Output relations
call_cycle(mod_a, mod_b)— pair of modules with mutual synchronous dependency.call_cycle_path(from_mod, to_mod)— transitive sync dependency edges within cycle participants.
Finding severities
call_cycle—:error. A mutual synchronous dependency deadlocks the moment both directions are in flight; timeouts only convert the deadlock into cascading crashes.call_cycle_path—:info. Supporting evidence: the individual edges behind acall_cyclefinding.