Skip to main content
  ██████╗ ███████╗██████╗  ██████╗ ██████╗ ██╗   ██╗██╗     ███████╗███████╗
  ██╔══██╗██╔════╝██╔══██╗██╔═══██╗██╔══██╗██║   ██║██║     ██╔════╝██╔════╝
  ██████╔╝█████╗  ██████╔╝██║   ██║██████╔╝██║   ██║██║     ███████╗█████╗  
  ██╔══██╗██╔══╝  ██╔═══╝ ██║   ██║██╔═══╝ ██║   ██║██║     ╚════██║██╔══╝  
  ██║  ██║███████╗██║     ╚██████╔╝██║     ╚██████╔╝███████╗███████║███████╗
  ╚═╝  ╚═╝╚══════╝╚═╝      ╚═════╝ ╚═╝      ╚═════╝ ╚══════╝╚══════╝╚══════╝
  ───────────╱╲╱╲─── Git Forensic Audit & Codebase Health ───╱╲╱╲───────────

The Clinical Codebase Health Card & Architectural Forensic Engine

A zero-dependency CLI & GitHub Action that mines Git commit history in <20ms to diagnose single-author knowledge silos (bus factor), identify architectural bug hotspots, uncover temporal coupling, and compute an objective 0–100 codebase health score.

CI GitHub Marketplace Version Python Version Zero Dependencies Tests Code style: ruff License: MIT


⚡ Instant Audit • 📋 The Forensic Health Dossier • 🔬 Static Linters vs. Forensic Git Analysis • 🚨 The 3 Pillars of Forensic Health • 🤖 GitHub Marketplace Action • ⚙️ CLI Command Reference • ⚡ Performance Benchmarks • 🤝 Contributing


📋 The Forensic Health Dossier

Static code linters only tell you how your code is formatted today. They cannot tell you who wrote it, how fast it changes, or which modules are silently tangled together.

When you run repopulse audit, it parses your repository's native Git commit history and generates an instant, clinical forensic audit report:

╔══════════════════════════════════════════════════════════════════════════════════════╗
║  🩺 REPOPULSE CODEBASE HEALTH DOSSIER                                GRADE: A (92)   ║
╠══════════════════════════════════════════════════════════════════════════════════════╣
║  Target: my-team/core-api                      Window: Last 365 Days                 ║
║  Commits Analyzed: 1,420                       Active Contributors: 14               ║
║  Health Score: 92 / 100 [██████████████████░░] (STATUS: HEALTHY / CI GATE PASS)      ║
╠══════════════════════════════════════════════════════════════════════════════════════╣
║  🚨 1. KNOWLEDGE SILO & BUS FACTOR ALERTS                                            ║
║  ├─ [HIGH RISK] auth/oauth_provider.py ──── 94.2% written by @alice (1,240 net LOC)  ║
║  │  └─ Forensic Finding: If @alice leaves the company, core auth is unmaintainable.  ║
║  ├─ [WARNING]   billing/webhook_worker.py ── 78.5% written by @bob                   ║
║  └─ [HEALTHY]   db/models/ ──────────────── Multi-author collective ownership (6)    ║
╠══════════════════════════════════════════════════════════════════════════════════════╣
║  🔥 2. ARCHITECTURAL HOTSPOTS (Statistical Bug Incubators)                           ║
║  ├─ [CRITICAL] services/checkout.py ─────── Churn: 84 revisions | Net LOC: 920      ║
║  │  └─ Forensic Finding: High revision churn × large file size = 80% bug incubator. ║
║  └─ [MODERATE] api/handlers/users.py ────── Churn: 22 revisions | Net LOC: 310      ║
╠══════════════════════════════════════════════════════════════════════════════════════╣
║  🔗 3. TEMPORAL CO-CHANGE COUPLING (Hidden Architectural Leaks)                      ║
║  └─ [LEAK DETECTED] billing/stripe.py <─── 81.2% co-change ───> queue/dispatcher.py  ║
║     └─ Forensic Finding: 0 shared imports, but they commit together 4 out of 5 times.║
╠══════════════════════════════════════════════════════════════════════════════════════╣
║  💡 PRESCRIPTION & REMEDIATION PLAN:                                                 ║
║  1. Pair-program on auth/oauth_provider.py to distribute domain knowledge.           ║
║  2. Refactor services/checkout.py into smaller single-responsibility submodules.     ║
║  3. Decouple billing/stripe.py and queue/dispatcher.py via explicit domain events.   ║
╚══════════════════════════════════════════════════════════════════════════════════════╝

🔬 Static Linters vs. Forensic Git Analysis

Why do teams need RepoPulse if they already use SonarQube, ESLint, or Ruff?

Diagnostic Capability Traditional Linters (Ruff, ESLint) SonarQube / CodeClimate RepoPulse 🩺
Analyzes Current Syntax / Formatting ✅ Yes ✅ Yes ❌ (Out of scope)
Detects Single-Author Bus Factor Risk ❌ No ❌ No ✅ Yes (Identifies team silos $\ge 75%$)
Predicts Bug Density via Churn Velocity ❌ No ⚠️ Complexity only ✅ Yes ($\text{Churn} \times \sqrt{\text{LOC}}$)
Reveals Hidden Temporal Co-Change Coupling ❌ No ❌ No ✅ Yes (Disjoint files changing together)
Zero External Dependencies / No Java ⚠️ Language dependent ❌ Heavy JVM / Cloud ✅ Yes (<20ms cold start, pure stdlib)
Offline Git Mining in Airgapped Envs ✅ Local ❌ Requires server ✅ Yes (Runs directly on local Git log)
Automated PR Health Score Gate (--fail-under) ⚠️ Lint only ⚠️ Quality gate cloud ✅ Yes (Native exit codes in CI)
Export Formats Plaintext Web Dashboard ANSI Dashboard, JSON, Markdown, SARIF

🚨 The 3 Pillars of Forensic Health

RepoPulse is built upon empirical software engineering research:

1. The Bus Factor & Knowledge Silo Diagnostic

"What happens to the codebase if your senior engineer gets hit by a bus (or gets an offer from another company)?"

git blame is dangerously misleading: a line written 3 years ago might have been formatted yesterday by an auto-linter. RepoPulse analyzes active revision ownership over time, mapping which percentage of real architectural modifications belong to a single contributor.

  • Risk Level: Any core file with $\ge 75%$ contribution concentrated in a single author is automatically flagged as an active knowledge silo.

2. The Architectural Hotspot Law

Empirical research (Adam Tornhill, "Your Code as a Crime Scene") demonstrates that bugs do not distribute evenly across codebases: 80% of production defects cluster in fewer than 10% of files.

A 2,000-line legacy file that never changes is stable and safe. A 50-line utility changed every 3 months is harmless. But a file with both high change frequency (churn) AND substantial code size is an active bug incubator: $$\text{Hotspot Score} = \log(1 + \text{churn}) \times \sqrt{\text{LOC}}$$ RepoPulse surfaces these ticking time bombs so tech leads know exactly where refactoring budgets should be spent.

3. Temporal Co-Change Coupling

"Two modules with zero shared dependencies that always commit together indicate a leaky abstraction."

If auth/jwt.py and database/tenant_model.py are modified in the exact same commit across 80% of revisions, your architecture has an undocumented dependency. Modifying one without touching the other will cause a silent runtime failure. RepoPulse identifies these hidden relationships automatically.


⚡ Instant Audit (Zero-Installation)

Run RepoPulse directly without installing anything via uvx or pipx:

# Run a full forensic health audit on the current repository
uvx repopulse audit

# Audit only the last 300 commits
uvx repopulse audit -n 300

# Audit changes over the past 90 days
uvx repopulse audit --since "90.days.ago"

# Inspect specific forensic sub-analyses
uvx repopulse busfactor    # Knowledge silos only
uvx repopulse hotspots      # High-churn risk files only
uvx repopulse coupling      # Hidden co-change pairs only

Or install via pip:

pip install repopulse

🤖 GitHub Marketplace Action (CI/CD Quality Gate)

Enforce architectural health on every Pull Request. Drop RepoPulse into your .github/workflows/code-health.yml:

name: Repository Health Audit

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code with full Git history
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Required for historical Git mining

      - name: Run RepoPulse Git Forensic Audit
        uses: umutgungorr/repopulse@v1
        with:
          fail-under: 80 # Fails the PR if health score drops below 80
          summary: 'true' # Automatically appends the Health Card to PR Summary

GitHub Actions Step Outputs

Output Description
health-score Numerical health score (0–100)
health-grade Letter grade (A, B, C, D, F)
bus-factor-alerts Count of single-point-of-failure files detected
hotspot-count Count of critical architectural hotspots

⚙️ CLI Command Reference

repopulse [OPTIONS] COMMAND [PATH]

COMMANDS:
  audit       Execute complete forensic audit (Health Score, Bus Factor, Hotspots, Coupling)
  busfactor   Analyze authorship concentration and knowledge silos
  hotspots    Identify high-churn files correlated with high defect rates
  coupling    Discover temporal co-change relationships between files
  summary     Output a high-level executive summary of repository vitals

OPTIONS:
  -n, --max-commits INT     Maximum historical commits to analyze (default: 500)
  --since STRING            Git date filter (e.g. "90.days.ago", "2026-01-01")
  --fail-under INT          Exit code 1 if health score is below threshold (CI gate)
  --json                    Emit machine-readable JSON for custom reporting
  --export PATH             Export formatted report to Markdown file
  --summary                 Append Markdown card to $GITHUB_STEP_SUMMARY
  --ascii                   Render using pure ASCII characters (no Unicode borders)
  --no-color                Disable ANSI color styling (honors NO_COLOR=1)
  -v, --version             Show version and exit

⚡ Performance Benchmarks

RepoPulse streams Git logs in linear $O(\text{commits})$ time, completely avoiding memory-heavy in-memory object models:

Metric RepoPulse git-fame code-forensics
Cold Start Overhead < 18 ms ~350 ms ~4,200 ms (Java VM)
Throughput (Commits/sec) > 18,000 commits/s ~2,500 commits/s ~1,200 commits/s
RAM Footprint (50k commits) < 28 MB ~240 MB ~1.2 GB
External Dependencies 0 (Pure Stdlib) 6 packages Node + Java + R

⚡ Part of the Developer Diagnostics Suite

RepoPulse is part of the zero-dependency Developer Diagnostics Suite by @umutgungorr:

  • 🌲 PortTree: Dev socket tree scanner, Docker proxy unmasker, and process-tree killer.
  • ⚡ LogShrink: Zero-config CLI stream filter that collapses noisy polling logs and auto-boxes stack traces.
  • 🩺 RepoPulse: Git forensic health, architectural hotspot churn, and bus-factor risk engine.

🤝 Contributing & Community

Contributions are welcome! Please see CONTRIBUTING.md for development workflows and CODE_OF_CONDUCT.md.

Metadata

Release files for git-repopulse 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-repopulse 1.0.0
File Size Uploaded
git_repopulse-1.0.0.tar.gz 73.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for git-repopulse 1.0.0
File Interpreter ABI Platform
git_repopulse-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 102.0 kB

Release files / git_repopulse-1.0.0.tar.gz

Download URL git_repopulse-1.0.0.tar.gz
Size 73.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e9e060ab53acf1005961c8c7603a694dce5f9e314f2aee5f1f678cc25ae0b888
BLAKE2b-256 checksum
How to use checksums
e92879b8cc96949e3e844e4ffa9a4195f183fa8980f6c7cde283449c1394f3b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / git_repopulse-1.0.0-py3-none-any.whl

Download URL git_repopulse-1.0.0-py3-none-any.whl
Size 28.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91c763f8b87c6c819be15ff13041c06233b96f1d8315860dafa8c005a8670bec
BLAKE2b-256 checksum
How to use checksums
482e4082a6153be6374924e92beee219b0d54de7311a2d4e7c60fcf59507e729
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page