GIT INTELLIGENCE GUIDE

Git Intelligence: Hotspots, Bus Factor & Hidden Coupling, Explained

How repowise reads your git history to surface hotspots, bus factor, and hidden co-change coupling — four behavioral signals static analysis can't see, computed deterministically with zero LLM.

Top 25%
Of both churn and complexity — the joint filter that defines a hotspot, not either axis alone
>80%
Single-author ownership flags a bus-factor-of-one key-person risk, derived from git blame
500
Commits of history mined per repo, configurable up to 5,000 via --commit-limit
0
LLM calls — every signal is deterministic, the same history always produces the same result
By Raghav ChamadiyaUpdated June 2026 · 11 min
TL;DR

repowise reads your git history — not a snapshot of the code — to surface four behavioral signals static analysis can't see: hotspots (top 25% of both churn and complexity), bus factor (files owned over 80% by one author), hidden change coupling (files that change together with no import edge), and code heritage. Every signal is deterministic and zero-LLM, computed straight from git log and git blame, so the same history always produces the same result. It is self-hostable under AGPL-3.0 and reachable in the dashboard, on PRs, and over MCP via get_risk and get_context.

DEFINITION

Git intelligence is the set of behavioral signals repowise mines from your version-control history rather than a static snapshot: hotspots (files in the top 25% of both churn and complexity), bus factor (files owned over 80% by one author), hidden change coupling, and code heritage. Every signal is deterministic, computed straight from git log and git blame with zero LLM.

repowise git hotspot analysis dashboard ranking the riskiest files by churn and complexity with red, amber, and green risk bars
Hotspots rank the top 25% of files on both churn and complexity — where defects concentrate.

Why does git intelligence matter?

Your code tells you what it does. Only your history tells you how it behaves: where bugs keep landing, who is the only person who understands a module, and which files quietly change together.

The riskiest files are where churn meets complexity — and the knowledge often lives in one head. A linter sees neither.

  • A file that is complex but never changes is rarely worth refactoring; a file that is complex and changes constantly is where defects cluster.
  • When one author owns over 80% of a file, their departure is an outage you did not schedule.
  • Two files that always change together — with no code link between them — are a coupling no dependency graph will warn you about.

How does git intelligence work?

repowise reads your last 500 commits (configurable up to 5,000) plus git blame, parses the repo into a dependency graph, and derives every signal deterministically — no LLM in the path, the same history always producing the same result.

1. Read history. git log and git blame are parsed and the repo is built into a dependency graph. No code leaves your infrastructure.

2. Derive signals. Churn, complexity, co-change pairs, and per-file ownership are computed deterministically — empirically the signals stabilize around 300–500 commits.

3. Rank risk. Hotspots and bus-factor files are ranked and rolled up per module, then surfaced in the dashboard, on PRs, and over MCP.

SignalWhat only git history revealsThreshold
HotspotFiles where churn meets complexity, ranked firstTop 25% of both churn and complexity
Bus factorKey-person risk: one author carries a file's historyOne author owns >80% (bus_factor: 1)
Change couplingFiles that move together with no code linkCo-change in the same commits, no import edge
Code heritageHow old a file is and how it has evolvedFirst appearance + 90-day change trend

How does git intelligence help you?

The four signals are not a dashboard you admire. repowise turns each into an action you take the same day.

Hotspots — target refactoring where it pays

A hotspot is a file in the top 25% of both churn and complexity — not either alone. That joint filter is what keeps you from drowning in every complex file you never touch.

Guardrail: a hotspot is a ranking signal, not an auto-refactor — repowise ranks and explains, it never rewrites your code.

  • Churn comes from git history, complexity from the parsed code; the composite risk score blends them.
  • The riskiest files surface first, recomputed on every commit, deterministically.
  • The same churn × complexity view powers the dashboard, the Repowise PR Bot, and get_risk over MCP.

Bus factor — de-risk offboarding before it is a fire

bus_factor: 1 means a single author owns over 80% of a file's history. repowise attributes lines to contributors from git blame, names the primary owner, and flags key-person risk.

Guardrail: this reads commits, it does not watch people — no IDE plugins, no instrumentation, no surveillance.

  • Primary owner, recent owner, and contributor count per file.
  • The bus-factor warning surfaces in the ownership view and in CLAUDE.md.
  • Works retroactively on the history you already have — nothing to instrument going forward.

Change coupling — find the dependencies your graph never sees

Hidden coupling is a pair of files that repeatedly change together in the same commits without an import edge between them. AST analysis cannot detect it; git history reveals it.

  • Co-change partners are mined from commit history, per file.
  • They surface in get_context alongside direct dependencies.
  • get_risk flags a missing historical partner on the PR blast radius, so the omission is caught in review.
change coupling view in repowise listing files that change together without an import link, flagged with co-change counts
Co-change partners with no code link — the most expensive coupling, because nothing else warns you.

Heritage — read a file's age and evolution

Code heritage shows how old each file is and how it has evolved — first appearance, change magnitude over the last 90 days, and a churn trend (increasing / decreasing / stable from the 30-day versus 60-day rate).

  • The change pattern is classified: feature-active, fix-heavy, primarily refactored, dependency-churn, or mixed-activity.
  • Change magnitude tracks lines added/deleted and average commit size over the last 90 days.
  • The last meaningful commit messages per file inform why it is shaped the way it is.

Walkthrough: three views in five minutes

Step 1 — Open hotspots. The riskiest files sit at the top. Each row shows churn percentile, complexity, and the composite risk score that blends them.

repowise hotspots table ranking files by churn percentile and complexity, sorted by composite risk score
Start at the top — the files repowise ranks first are where defects concentrate.

Step 2 — Open ownership. Filter to bus_factor: 1 to find the files most exposed if one person leaves. The owners view rolls the same git-blame data up per contributor — who carries which part of the codebase.

Step 3 — Open change coupling. Each pair shows how many commits the two files moved together in. High counts with no import edge are the ones to investigate before your next change.

repowise blast radius showing downstream dependents and a missing co-change partner flagged on a pull request
Before merge: who this change touches, and the file that usually changes with it but didn't.

Proof: deterministic signals, straight from your history

Each stat stands alone and is reproducible on your own repo — every signal is open source under AGPL-3.0.

SignalDefinition
HotspotA file in the top 25% of both churn and complexity — not either axis alone
Bus factorFiles owned >80% by a single author are flagged bus_factor: 1 key-person risk
Ownership sourceDerived from git blame only — primary owner, recent owner, contributor count
Change couplingCo-change partners that change together without an import edge — invisible to static analysis
History windowThe last 500 commits (configurable up to 5,000 via --commit-limit); signals stabilize around 300–500
DeterminismEvery signal is zero-LLM — the same history always produces the same result, no cloud calls, no drift

The engineering case for why these process metrics outpredict structural metrics alone lives in process metrics beat structural metrics.

Try it on your repo

See where the risk and knowledge concentrate in your repo — deterministic, self-hosted, straight from your history.

pip install repowise
repowise init                          # reads 500 commits + git blame
repowise init --commit-limit 5000      # deepen the history window

The same numbers are reachable by AI agents via the get_risk and get_context MCP tools.

FOR YOUR ROLE

How each role uses this feature

FREQUENTLY ASKED

Questions, answered

What is a hotspot?

A hotspot is a file in the top 25% of both churn and complexity — not either axis alone. Churn comes from your git history; complexity from the parsed code. Files that change a lot and are hard to reason about are where defects concentrate, so repowise ranks them first. The signal is fully deterministic, computed straight from history with no LLM.

How is bus factor calculated?

Bus factor flags files owned more than 80% by a single author. Ownership is derived from git blame: repowise attributes lines to contributors per file, identifies the primary owner, and marks any file where one person holds over 80% of the code as bus_factor: 1 — key-person risk. It is the part of your codebase most exposed if that person leaves.

What is change coupling?

Change coupling (co-change) is a pair of files that repeatedly change together in the same commits without an import edge between them. Your dependency graph never sees this relationship because there is no code link, but git history reveals it. repowise surfaces these co-change partners so you know which files you probably need to touch together.

Does this need my CI, or just git?

Just git. repowise reads your existing git log and git blame — no CI integration, no IDE plugins, no instrumentation, and no developer surveillance. It reads commits; it does not watch people. Point it at a repo and the history is already there, so every signal works retroactively on the history you have.

How is this different from static analysis?

Static analysis sees a snapshot of the code as it is right now. repowise sees how the code evolves over time, which is where risk and knowledge concentration really live. A linter cannot tell you that two unrelated files always change together, who is the only person who understands a module, or which files defects keep landing in. History can.

Does git intelligence use an LLM?

No. Hotspots, co-change coupling, ownership, bus factor, heritage, and reviewer suggestions are all computed deterministically from your git history and dependency graph. The same history always produces the same result — no cloud calls, no drift — and the same numbers are reachable by AI agents via the get_risk and get_context MCP tools.

Last reviewed: June 2026

See where risk and knowledge concentrate in your repo