Ripple – semantic commit analysis for Python that blocks broken commits

TheArcDev1 pts0 comments

GitHub - TheArcDev/ripple-git: Semantic commit analysis for Python - catch what Git misses · GitHub

/" data-turbo-transient="true" />

Skip to content

Search/

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

TheArcDev

ripple-git

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Latest commit

History<br>5 Commits<br>5 Commits

Folders and files<br>NameNameLast commit message<br>Last commit date<br>.github/workflows

.github/workflows

ripple

ripple

tests

tests

.gitignore

.gitignore

.pre-commit-hooks.yaml

.pre-commit-hooks.yaml

README.md

README.md

pyproject.toml

pyproject.toml

View all files

Repository files navigation

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<br>def generate_token(username):<br>return "token_" + username

# Git commits it cleanly.<br># Three other functions that call it will crash at runtime.<br># 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_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<br>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,<br>add Ripple to your .pre-commit-config.yaml:

repos:<br>- repo: https://github.com/TheArcDev/ripple-git<br>rev: v0.1.0<br>hooks:<br>- 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()<br>→ Had parameters: ['username']

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

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

Commands

# Analyze staged changes without committing<br>ripple check

# Analyze working tree including unstaged changes<br>ripple check --working

# Analyze only staged changes<br>ripple check --staged

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

# Install hook into current repository<br>ripple install

# Remove hook from current repository<br>ripple uninstall

Smart Commit Messages

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

Suggested commit message:<br>add check_session(session_id) to auth

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

Messages are generated from real semantic data — not AI guessing.<br>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.<br>Not which lines changed — which functions, parameters, and call<br>relationships changed.

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

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

Severity Levels

Level<br>Meaning<br>Action

🔴 CRITICAL<br>Real breakage — will crash at runtime<br>Commit blocked

🟠 WARN<br>Other functions depend on this change<br>Review before pushing

🟢 INFO<br>Isolated change — no dependents affected<br>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<br>the structural breakage that causes the most common and most painful<br>production failures.

License

MIT

About<br>Semantic commit analysis for Python - catch what Git misses<br>Resources<br>Readme<br>Activity<br>Stars<br>0 stars<br>Watchers<br>0 watching<br>Forks<br>0 forks<br>Report repository

Releases

Packages

Contributors

Languages

You can’t perform...

commit ripple analysis semantic message install

Related Articles