StoryProof

Proof that
what's asked
is what's built

Every behavior. Every gap. Every risk.

Independent verification for AI-assisted code changes. Shows what your change proved, what it didn't, and what's likely to break if shipped.

$ curl -fsSL https://storyproof.pages.dev/install.sh | sh

Works with Claude Code

01 — Findings

What it catches

Real findings from a Spring PetClinic PR. Every one of these was invisible to existing evidence.

Real bug · found before merge

Your AI wrote the code. Nobody checked what happens when it fails.

Spec “Add owner deletion with cascade”
AI wrote Delete endpoint using @ModelAttribute for owner lookup
StoryProof
found
Non-existent owner ID → HTTP 500 stack trace leaked to user. Spring’s @ModelAttribute throws before the handler even runs.
4 minutes. One sentence spec → 16 derived behaviors → caught a crash the AI never considered. This ships to production without StoryProof.
False confidence · green CI, zero proof

The test that gives you confidence it shouldn’t.

Test shouldPreserveVisitHistory()
What it
claims
“After pet transfer, vet visits stay with the pet”
What it
actually does
Asserts the pet moved to the new owner. Never queries visits. Never checks a single visit record. The test name is a lie.
Your CI is green. Your team trusts the test name. In production, visit history silently disappears. StoryProof reads assertions, not names.
Blind spot · zero evidence at every layer

The most important user journey has no test at any level.

Journey Click “Delete” → confirm modal → owner removed → redirect to list
Unit No test
Integration No test
Browser No test
Your users will be the first to try this flow. StoryProof wrote and ran the E2E test. It caught a JavaScript error in the modal.
02 — Pipeline

Three steps. Full verdict.

01
storyproof check

Derives behavioral criteria from your spec. Scans existing evidence. Shows what's proved, what's unproven, and what's likely to break.

~$0.50 · 4 min
02
storyproof prove

Writes and runs targeted checks for unproven behaviors. Produces runtime evidence. Tests stay in your repo.

~$1.00 · 8 min
03
fix → prove → ship

Fix the blocker. Re-run prove. Tests catch regressions. Ship with confidence.

03 — Output

This is the verdict.

Not a mock-up. This is terminal output from a real storyproof check run.

StoryProof Check — DO NOT SHIP
## Likely defects — code analysis suggests these will break
[AC003] @ModelAttribute throws exception → HTTP 500, not 404
Expected: API returns 404 when source owner does not exist
Prove will: Run integration test and confirm failure
[AC008] parseInt without error handling → HTTP 500, not 400
Expected: API returns 400 for non-numeric input
## Needs proof — no evidence covers these behaviors
[AC012] UI transfer success — the primary user journey is unverified
[AC009] Visit history preservation — test name claims coverage but assertions don't prove it
## Already covered by existing evidence
10 behaviors verified
Next: storyproof prove — settle all 5 unproven behaviors
04 — Install

Verify your next change

$ curl -fsSL https://storyproof.pages.dev/install.sh | sh
Then: cd your-repo
Run: storyproof check --spec "your spec"

Requires Claude Code CLI. Runs locally. ~$0.50 per verdict.