Cyclic Hub

Tier 2
cyclic_hub

Part of a dependency cycle. Hard to test in isolation; changes cascade in ways that are difficult to predict. Break cycles by introducing an abstraction or inverting a dependency.

Repos Detected 7
Avg Top Risk 35.1
Tier Relational / Temporal
mudler/LocalAI
go ×4

LocalAI's static asset layer carries the highest activity risk

When I ran Hotspots against mudler/LocalAI, the highest activity-weighted risk scores didn't surface in the Go inference engine or the model-loading pipeline — they surfaced in two bundled JavaScript files served as static assets. Three of the five hotspots I found live in a single file, core/http/static/assets/htmx.js, which means any team member touching that module is navigating a dense web of structurally complex, interacting functions all at once.

risk 42.3 Read →
redis/redis
c ×4

redis/redis's module and networking layer carries the highest structural debt — 5 functions to address first

The riskiest function in redis/redis hasn't been touched in 51 days, but when it is next changed, whoever opens it will face a nesting depth of 13 and a long if-else chain dispatching across more than a dozen distinct server events. That structural weight is sitting silently in five critical-band functions spread across the module system, client lifecycle, cluster slot migration, and blocked-client machinery — none of them are burning right now, but all of them are overdue for refactoring before the next development push.

risk 38.6 Read →
appsmithorg/appsmith
typescript ×4

appsmith's bundled ECharts tops activity risk — 5 functions to address first

Four of appsmith's five top-ranked hotspots live inside a single bundled third-party file. The fifth — evaluateTree, in the data evaluation worker — is genuine application logic that will move to rank one after the ECharts bundle is excluded. For the four bundle entries, the action isn't a refactoring sprint; it's an exclusion rule and a package-manager migration.

risk 24.4 Read →
eslint/eslint
javascript ×2

eslint's rule engine carries the highest activity risk — 2 functions to address first

The eslint rule most developers rely on to catch dead code also has 114 independent execution paths — and it's still being actively changed. That combination is a live regression risk, not a cleanup b

Read →
usebruno/bruno
javascript ×5

bruno's OpenAPI sync and CLI runner carry the highest activity risk — 3 functions to address first

Two anonymous god-functions in openapi-sync.js (CC 135, CC 100) and a CLI runner function (CC 169) are both structurally extreme and actively changing, making them live regression risks in bruno's request execution layer.

Read →
CodePhiliaX/Chat2DB
java ×4

Chat2DB's SQL processing layer carries the highest activity risk — 3 functions to address first

Chat2DB has 385 critical functions across 6,984 analyzed — and its SQL split processor alone carries a cyclomatic complexity of 58 with 38 distinct callees. Here's what to fix first.

Read →
FuelLabs/fuels-rs
rust

fuels-rs's docs theme carries the highest activity risk — 5 vendored functions to address first

Every one of fuels-rs's top 5 hotspots lives inside a single vendored file. The real Rust codebase deserves a closer look once that noise is filtered out.

Read →

Other Patterns