CRUX

Stop guessing who broke it.

CRUX finds the exact commit behind a behavior change and trims your 2000 line diff down to the 7 lines that did the work.

no llm in the verdict  //  every finding replays

crux who
$ crux who mypkg.Batch.encode --since v1.2.0 Behavior mypkg.Batch.encode (output regression) Range v1.2.0..HEAD (412 commits) Flipped at 7f31ac "rework feeder pipeline" Minimizing causal diff +88self.fields = order[:] -88self.fields = reversed(order)
CRUX report VERIFIED
Commit7f31ac R. Developer Diff+21 -9 trimmed to 7 lines Causefield order flipped Filesrc/feeder.py:88-91 Conf97% six reproductions Reprocrux replay 7f31ac+1024

Your code stayed the same.
The behavior changed.

Bisect marks a midpoint. Blame points at a line. Neither one sees behavior. Neither one sees dependencies. Neither one sees two commits working as a pair. That gap is where CRUX lives.

Law 01
The diff is a lie

A 2000 line diff buries a 7 line cause. CRUX keeps the 7 and dumps the other 1993.

Law 02
Tests go quiet

Your suite passes. The behavior dies anyway. Tests go silent right on the commit you need.

Law 03
Blame is a dead end

Blame names a line. Never the commit. Never the dependency. Never the combination.

Law 04
Proof beats pity

No model writes the verdict. Every finding replays. Same seed. Same sandbox. Same result.

01

Where the cause actually hides

Upstream
Your code never changed. The library two layers down did. CRUX follows the vendored trail and blames the real commit.
Together
Two commits pass alone. Merged they break the build. CRUX names the pair.
In the noise
A 2000 line diff buries a 7 line cause. CRUX cuts to the 7 and drops the rest.
02

Three moves. Zero guesswork.

01
Point

Give CRUX a command or a test. That is the behavior it hunts.

02
Hunt

CRUX walks every commit in the range. Each candidate runs in a sealed sandbox.

03
Read

You get the commit and the cause. The report names the exact lines.

03

What the answer looks like

One report. One fingerprint. A command that recreates the whole finding.

CRUX report REPLAYABLE
Commit7f31ac "rework feeder pipeline" AuthorR. Developer 3 days ago Diff+21 -9 trimmed to 7 lines Filesrc/feeder.py:88-91 104-107 Causeorder of field assembly flipped Envpython 3.12 input batch 1024 seed 42 Conf97% six independent reproductions Reprocrux replay 7f31ac+batch1024+seed42
04

The verdict is not a vibe

Every finding links to a real run. You replay it bit for bit. Same seed. Same sandbox. Same result.

$ crux replay 7f31ac+batch1024+seed42  reproduced

An LLM never authors a verdict. Reports stay deterministic. A model may summarize them later. It never writes the blame.

Skip the guess. Get the build.

The CLI ships free forever. Hosted watch mode comes later. Join the list and the first build lands in your inbox.

One email per update. No lists sold. Unsubscribe anytime.

Check your inbox Confirm the link and you are on the list.