
Race condition resolved: Mutex lock on Stripe webhook retries
Found the root cause. When Stripe retries after an upstream gateway timeout, concurrent workers processed the same invoice.payment_succeeded event before the database row locked.
I added a distributed Mutex on event_id and wrapped the state transition in an atomic transaction scope. All webhook retry tests now pass.
LGTM! Unit tests and rollback protections attached. Let's trigger staging deployment.
Why traditional AI code review fails
Diffs show what changed. Blame proves what broke.
Raw git diff inspection
Standard AI review bots only check isolated diff snippets, missing cross-file contract breaks.
Fix retry timeout on webhook dispatch #142
Looks clean! Syntax checks pass and the modified diff has no obvious style issues.
Merged, but prod crashed: 3 downstream queue workers broke on the unhandled timeout error.
Whole-codebase context
Blame traces code dependencies across your entire codebase to catch breaking changes before merge.
Fix retry timeout on webhook dispatch #142
Caught breaking contract: jobs/worker.ts:42 called dispatch() without handling the newly thrown TimeoutError.
Patched jobs/worker.ts before merge — prevented prod outage!
How Blame works
across your development cycle.
From repository context to verified fixes, Blame keeps your development cycle moving.

Always-on codebase context




Always-on codebase context

Review every pull request instantly

Verify the fix before merge

Debug in plain English
Review code with complete repository context
When enabled, Blame runs in the background on every pull request, catching subtle logic flaws, enforcing team conventions, and reasoning across your whole codebase before merge.
Ship with confidence
Blame automatically runs deep AST and semantic code reviews in the background on new pull requests.
14 | const payload = decodeToken(tokenString);
15 | - if (payload.exp < Date.now()) {
16 | + const nowSeconds = Math.floor(Date.now() / 1000);
17 | + if (payload.exp < nowSeconds) {
18 | return { valid: true, user: payload.sub };
Fixed unit mismatch: token exp claim is in seconds, whereas Date.now() returns milliseconds.
Review analytics
Live distribution of code risks and findings detected by Blame across your repositories.
Adapts to your standards
Blame improves as you define and iterate on custom rules, automatically discovering project instruction files.
Enforce strict error boundary handling on all client components
All database mutations must use parameterized transactions
Zero 'any' types, strict null checks on all API endpoints
High signal, low noise
Blame optimizes for bugs that get fixed. Over 70% of flags are resolved before merge, without shallow linter spam.

