DACIP
Deterministic PR gate · Python + TypeScript

AI reviewers have opinions.
DACIP has proof.

When a backend change breaks a frontend call site, DACIP names the exact file and line it orphans — derived from source on both sides of your PR — and attaches a repro that fails until the break is fixed.

No LLM in the pipeline. No spec to keep honest. Same refs in, byte-identical verdict out — every run. Built for teams shipping large codebases with coding agents.

Free for public repos + one private repo. Installs in one click; first verdict in about a minute.

Real output — validation run on getredash/redash, synthetic breaking commit.
9major OSS codebases tested cold — sentry, zulip, posthog…
0false positives, every asserted defect hand-verified
3real bugs found in famous repos on first contact
100%of asserted findings ship with a runnable repro
<2 minfrom push to verdict — 36s cold on the largest repo
The signature move

Every claim comes with the command that proves it.

An LLM reviewer says "this might break something." DACIP hands your reviewer a test that fails because it's broken — and passes the moment it's fixed. Nobody argues with a red test.

Fails before. The defect is real, not plausible.
Passes after. The fix is proven, not asserted.
Deterministic. Re-run it in CI, in review, in six months — same answer.
Capabilities

Built for the failure mode agents actually have.

Agents don't write bad syntax — they break contracts. The route renamed while three call sites keep calling it. Tests green, CI green, production 404.

▸ Blast radius per change

Diffs the contract graph between your PR's two refs: routes removed, methods changed, auth markers dropped, required fields added — each with every affected caller at file:line.

BREAKING_ROUTE_REMOVED → mention-autocomplete.tsx:46

▸ Source is the spec

Flask, Flask-RESTX/RESTful, Django/DRF (nested routers, monorepo roots, re_path), Express, Next.js handlers — matched against real fetch/axios call sites. No OpenAPI required; wrong specs can't lie to it.

▸ Agent guardrail

Inside Claude Code, a resident gate judges each edit's contract impact before it hits disk — and denies unauthorized breaks naming the orphaned callers. A human override always wins.

deny: removes GET /api/users/mentionable — 1 caller…

▸ The proven-fix loop

Findings become work orders; agent patches pass a four-layer acceptance gate (scope, contract, tests + repro flip, size); merges ship with a before/after evidence bundle a reviewer can replay.

▸ Native to GitHub

One idempotent PR comment (edited in place — never a comment stack), a contract-gate check run, and SARIF into code scanning. Silent on clean PRs.

▸ Honest coverage, always

Dynamic paths, unresolved prefixes, unsupported frameworks: counted and labelled in every verdict. When DACIP can't see, it says so — it never pads the report with guesses.

Against the field

They review. DACIP proves.

LLM reviewers are useful — keep yours. DACIP is a different instrument: a deterministic gate for the one class of bug that survives green CI. Here's the honest matrix.

DACIPCodeRabbitGreptileQodo MergeCursor BugBotCopilot Review
EngineDeterministic static analysis — no LLMLLMLLM + code graphMulti-agent LLM8-pass LLM votingLLM
Same input → same outputAlways — byte-identicalNoNoNoMajority voteNo
Cross-boundary contract breaks
frontend call sites × backend routes, from source
Core capability — file:line blast radius
Runnable proof per findingEvery asserted finding
False-positive discipline0 across 9 audited OSS repos; demotes to labelled observations when unsure2 FPs in published benchmark; noisy on small PRs11 FPs same benchmarksurface-level
Blocks agent edits pre-writeYes — in-session guardrailIDE fix button
Comment behaviorOne comment, edited in place; silent when clean"too many comments"
Your code + LLMsNever leaves the runner; no model sees it; fingerprints onlySent to LLMIndexed + LLMSent to LLMSent to LLMSent to LLM
Review breadth (style, logic, security opinions)Deliberately narrow — contracts, imports, routes, dead schedulesBroadBroadBroadBroadBroad-ish
LanguagesPython + TypeScript stacks (the niche, done deeply)ManyManyManyManyMany
Pricing$15/dev · free tier — no per-token costs underneath$24–30/seat$30/seat + usage$0–19/seat$40/seat + Cursorbundled $19+

Competitor rows compiled from vendor pages and third-party comparisons (Jan 2026); corrections welcome. The last two rows are where the field beats us — on purpose. DACIP does one class of failure exhaustively rather than every class shallowly, and it complements whichever reviewer you already run.

Receipts

Nine famous codebases. Zero wolf-cries. Three real bugs.

Before asking anyone to trust the zero-false-positive claim, we ran DACIP cold on nine large open-source repos and hand-audited every asserted defect against source.

RepositoryRoutes extractedAsserted defectsHand-audit verdict
getsentry/sentry15100 FP largest repo — 36s cold
zulip/zulip44500 FP
posthog/posthog8500 FP weak coverage declared, not guessed
Flagsmith/flagsmith54900 FP
netbox-community/netbox23500 FP
mathesar-foundation/mathesar2400 FP unsupported frontend: says so, loudly
getredash/redash1231real bug verified below
apache/superset1real bug verified below
HumanSignal/label-studio1851real bug verified below
getredash/redash

GET api/dashboards/recent — the frontend still ships this call; the backend endpoint no longer exists. Zero hits across the entire server tree.

apache/superset

A TYPE_CHECKING import references tests.common.example_data… — a path that stopped existing after a refactor. Every type-check of that file has been broken since.

HumanSignal/label-studio

io_storages/filesystem.py imports .base, which doesn't exist — a dead module that crashes on first import. No importers left; pure debt.

Full methodology, per-repo write-ups, and the 19 extractor gap classes we fixed to get here ship with the beta. Bugs were disclosed upstream before publication.

The fine print, up front

What DACIP will not do.

  • It won't guess. Whatever static analysis can't resolve is counted and labelled in every verdict — never silently filled in. That discipline is why the false-positive count is zero.
  • It won't opine on style, naming, or architecture. Bounded checks with provable answers. Run it under your LLM reviewer; they don't overlap.
  • It won't feed your code to a model. No LLM anywhere in the pipeline. Clones are wiped when the job ends; we persist finding fingerprints, never source.
  • It won't spam. Clean PR → silent green check. One comment per PR, edited in place, flipped to "resolved" when you fix it.
Pricing

Cheaper than the reviewers it out-proves.

There's no per-token inference bill underneath a deterministic engine — the pricing passes that through.

Free

$0
  • All public repos
  • 1 private repo
  • PR gate, comment, check run
  • SARIF → code scanning

Team

$15 / dev / month
  • Unlimited private repos
  • Org-wide baselines & triage
  • Finding history across merges
  • Repro verification in CI
  • Claude Code guardrail + fix loop

Enterprise

Let's talk
  • Self-hosted / on-prem CLI
  • SSO
  • Support SLA
Early access

Merge with proof.

Private beta opens with the GitHub App. If your stack is Django/Flask + React/Next and your team ships with agents, you're exactly who this was built for.