Skip to content

Code review that stays inside your diff.

Diffwise comments on the lines your pull request adds, ranks every finding by severity, and never approves on its own.

Tighten vendor health check

feature/health-check into main

Changes requested

src/monitoring/vendor-checks.ts

+6 −2

export const vendorCheck = {
name: "address-lookup",
Removed: intervalMs: 300_000,
Added: intervalMs: 60_000,
checkFn: () =>
Removed: timedFetch(`${BASE}/status`),
Added: timedFetch(`${BASE}/v2/verify`, {
Added: method: "POST",
Added: body: JSON.stringify(SAMPLE),
DiffwiseCRITICAL

This health check now POSTs a payload to /v2/verify, a billable endpoint, every 60s. That is 1,440 paid calls a day per environment. Keep the free status check.

Suggested change

timedFetch(`${BASE}/status`),
Added: }),
};
1 critical0 important1 suggestionPR vote: Reject
Illustrative review. Diffwise comments on the exact line it is worried about.

A pipeline step, not another dashboard.

Diffwise runs as a job in the CI you already have. It fires on every pull request and talks back in the review thread.

  1. Read the diff

    When a pull request opens, Diffwise pulls only the changed hunks. Anything shaped like a credential is masked before a model sees it.

    + const apiKey = "sk_live_••••••••"
      redacted before review
  2. Review with your rules

    Your model reads the hunks against the rule packs you switch on. Stable instructions are cached, so every run after the first costs less.

    rules    security, cost-safety, regression
    model    claude | gpt | self-hosted
  3. Comment and vote

    Findings land on the exact line, three per file at most. Critical findings block the merge. Approving stays a human decision.

    critical      reject (-10)
    >3 important  wait for author (-5)
    anything else comment, no vote

Ranked, so the one finding that matters isn't buried.

Critical

Hardcoded secrets, injection, auth bypasses, sensitive data leaking into logs or events, paid APIs called on a timer.

Blocks the PR with a Reject vote.

Important

Race conditions, leaked connections, missing awaits, unhandled I/O failures, event schemas changed under their consumers.

More than three asks the author to wait.

Suggestion

Behavior changes, swallowed errors, risky defaults, performance. One per file, so they never bury the rest.

Left as a comment. No vote.

Rule packs you switch on per repo

Each pack is plain text the model follows. Add your own guidelines the same way.

Cost safety

Catches a misconfigured health check hammering a billable vendor API, polling loops with no stated volume, and two code paths paying for the same call.

volume check

every 60s1,440 calls/day× 3 environments4,320 calls/day× 30 days129,600 paid calls

Fix: point the check at the vendor's free status endpoint and send no payload.

Security

Secrets, injection, auth gaps, sensitive fields sent where they shouldn't go.

DB_PASSWORD=••••••••

Regression safety

Sync calls turned async, renamed storage keys without a fallback read, event schemas that drift from their consumers.

Feature toggles

Flags significant new behavior that ships without a rollout switch, and toggled features whose side effects run either way.

if (!flags.enabled("new_refunds", org))
  return legacyRefund(req);

Bad-merge loss

Spots config keys, routes, migrations, and error handling silently dropped while someone resolved a merge or rebase.

- router.post("/refunds", validate, refund)

- PAYMENTS_TIMEOUT_MS=8000

Safe to put on a protected branch.

Only the lines you changed

Line comments go on lines the pull request adds. Problems that were already there get one mention in the summary, never pinned on the author.

It can block. It cannot approve.

Diffwise votes only to stop a risky merge, and clears its own vote once the fix lands. The approve button belongs to a person.

Secrets stay masked

Credential-shaped strings are redacted before review and in every comment Diffwise posts, so a leaked key never gets quoted twice.

Your model, your network

Use Claude, GPT, or any OpenAI-compatible endpoint, including vLLM, Ollama, or LiteLLM running on your own hardware.

About a cent and a half per review.

The rules and instructions are cached between runs, which cuts token spend by roughly 60 to 70 percent. Most reviews post their comments in 30 to 60 seconds.

typical review

time to comments
30-60 s
prompt cache savings
~60-70%
comments per file
3 max
cost per review
~$0.015

Measured with a mid-tier Claude model. Your model choice sets your price.

Runs where your pull requests already live.

Code hosts

  • Azure DevOpsAvailable now
  • GitHubThrough DevHub
  • GitLabThrough DevHub

Models

  • Anthropic ClaudeNative
  • OpenAI GPTNative
  • Self-hostedvLLM, Ollama, LiteLLM

Also built into DevHub.

DevHub already knows your architecture, owners, tickets, and release history. Inside it, review findings flow into alerts, tickets, and the rest of your delivery picture, on GitHub and GitLab as well as Azure DevOps.

Explore DevHub
Free
The built-in reviewer on a monthly batch of pull requests.
Team and up
Unlimited reviews, wired into alerts and tickets.
Enterprise
Your own AI provider, your own CI job, custom rule packs.

Put a careful reviewer on every pull request.

Tell us about your repos and how your team reviews today, and we'll get Diffwise running on your next pull request.