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 aliases —
from auth import logout as sign_outtracked 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()oreval() - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57b0c59641e4f8fdf8461a014a08c1087adc0f1bb7879432474ab02c7eecfe65
|
|
| MD5 |
587950b7f507b1e9a21313d366e3e754
|
|
| BLAKE2b-256 |
5866cee6bdc19c07d8431cbdc8d404459991577999b7ad141e3ddb8ce81c086e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66b80696082a0107c2a4016641e046d205d80a348f18c181e46d5d2b6045ba88
|
|
| MD5 |
dff7c6b0e77539fed146028a8e8fae53
|
|
| BLAKE2b-256 |
4efa0e8899ae163652b2853272056524e04d2f47565f2c8636508f87c8cd4901
|