See what your code does to your users.
Unfault brings user and system-level context to your code as you write it, the same way a linter flags a typo, but for the things that actually affect people.
Python, Go, Rust, TypeScript. Runs locally. MIT licensed.
The gap between your code and its effect on users is usually invisible.
A missing timeout. A retry with no backoff. An error handler that swallows the exception. None of these look wrong in a diff. Unfault reads your code the way your users experience it and tells you where the two don't match.
Named.
Located.
Explained.
Every finding has a name ("The Retry Storm"), a file and line, and the tradeoff spelled out: what you gain by leaving it as-is, and what your users risk if you do.
preventing the downstream service from ever recovering.
See who
else uses
what you're
changing.
unfault graph impact <file> walks the actual dependency graph, direct and transitive. Before you change something central, you know what else is leaning on it.
Pipes well.
Exits clean.
Exit 0 means clean. Exit 5 means findings. SARIF for GitHub Code Scanning. JSON for agents. Wire it wherever you like.
I've shipped code that took down production because of a missing timeout. The kind of thing that's obvious in hindsight and invisible on the day. I built Unfault so that particular class of obvious mistake stops making it through review. It won't catch everything. It catches the things that have a name.
Local.
Auditable.
MIT.
Parsing, analysis, graph traversal: all on your machine. Source code never leaves. The rules are in the repo. You can read exactly what it checks and why.
Read docs