Skip to main content

Ripple

Semantic commit analysis for Python — catch what Git misses.

Ripple sits at the commit moment and understands what your code change actually means. Not which lines changed — which functions, which dependencies, what breaks.


The Problem

Git tracks text. It has no idea what your code does.

# You delete this function
def generate_token(username):
    return "token_" + username

# Git commits it cleanly.
# Three other functions that call it will crash at runtime.
# Git never warned you.

Ripple catches this before the commit enters your repository.


What Ripple Catches

  • Deleted functions still called elsewhere — blocked before commit
  • Modified signatures where callers pass wrong arguments
  • Cross-file dependencies — catches what Git misses across modules
  • Import aliasesfrom auth import logout as sign_out tracked correctly
  • Class methods — full class context in every report
  • Syntax errors — unparseable files blocked immediately

Install

pip install ripple-git

Then in any Python project:

cd your-project
ripple install

That's it. Every git commit now runs semantic analysis automatically.


Pre-commit Framework Integration

If your project uses the pre-commit framework, add Ripple to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/TheArcDev/ripple-git
    rev: v0.1.0
    hooks:
      - id: ripple

Then install:

pre-commit install

What It Looks Like

Running Ripple semantic analysis...

=======================================================
 RIPPLE - SEMANTIC COMMIT ANALYSIS ENGINE
=======================================================

File: auth.py
----------------------------------------

 [🔴 CRITICAL] [DELETED] generate_token()
   → Had parameters: ['username']

 Real breakage detected:
 'generate_token' was deleted but is still called in 3 location(s)
     → auth.py line 2  (1 passed)
     → auth.py line 18 (1 passed)
     → app.py  line 14 (1 passed)

=======================================================
🔴 COMMIT BLOCKED
 Fix the issues above before committing
 Use --no-verify to override if intentional
=======================================================

Commands

# Analyze staged changes without committing
ripple check

# Analyze working tree including unstaged changes  
ripple check --working

# Analyze only staged changes
ripple check --staged

# Smart commit — analyzes changes and suggests an accurate message
ripple commit

# Install hook into current repository
ripple install

# Remove hook from current repository
ripple uninstall

Smart Commit Messages

Instead of git commit -m "fixed stuff", Ripple reads what actually changed and suggests an accurate message:

Suggested commit message:
----------------------------------------
add check_session(session_id) to auth
----------------------------------------

[U] Use suggested message
[W] Write your own message
[Q] Quit — don't commit

Messages are generated from real semantic data — not AI guessing. Always accurate. Always specific.


How It Works

Ripple uses three layers of analysis at every commit:

1. Semantic layer — AST parsing turns code into structured meaning. Not which lines changed — which functions, parameters, and call relationships changed.

2. Graph layer — dependency graph maps how every function connects to every other function across your entire codebase. When something changes, Ripple knows the full blast radius.

3. Call site layer — verifies whether callers of changed functions are actually broken. Only blocks when real breakage exists — never on clean refactors.


Severity Levels

Level Meaning Action
🔴 CRITICAL Real breakage — will crash at runtime Commit blocked
🟠 WARN Other functions depend on this change Review before pushing
🟢 INFO Isolated change — no dependents affected Commit proceeds

Requirements

  • Python 3.8+
  • Git

Known Limitations

Ripple is a static analysis tool. It cannot detect:

  • Dynamic calls via getattr() or eval()
  • Runtime-only errors unrelated to function signatures
  • Logic errors in function implementations

These are accepted limitations of static analysis. Ripple catches the structural breakage that causes the most common and most painful production failures.


License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ripple_git-0.1.0.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ripple_git-0.1.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file ripple_git-0.1.0.tar.gz.

File metadata

  • Download URL: ripple_git-0.1.0.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for ripple_git-0.1.0.tar.gz
Algorithm Hash digest
SHA256 57b0c59641e4f8fdf8461a014a08c1087adc0f1bb7879432474ab02c7eecfe65
MD5 587950b7f507b1e9a21313d366e3e754
BLAKE2b-256 5866cee6bdc19c07d8431cbdc8d404459991577999b7ad141e3ddb8ce81c086e

See more details on using hashes here.

File details

Details for the file ripple_git-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ripple_git-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for ripple_git-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66b80696082a0107c2a4016641e046d205d80a348f18c181e46d5d2b6045ba88
MD5 dff7c6b0e77539fed146028a8e8fae53
BLAKE2b-256 4efa0e8899ae163652b2853272056524e04d2f47565f2c8636508f87c8cd4901

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page