An LLM proposes what to test; a deterministic, external gate decides whether each concern is real by reproducing it against the actual code. No LLM sits in the accept/reject path.
The point is not "an AI reviews your PR" — everything does that now. The point is that a proposed finding only becomes a finding if a real test, run against the real code, actually fails. A model that writes a bad test cannot manufacture a bug.
Pointed at a live pull request in the Supabase MCP server, agentboard's pipeline proposed test cases and the gate turned two of them red by reproducing them:
- Composite foreign keys returned as a cartesian product. A multi-column FK was
reported as every source-column paired with every target-column (N² rows instead
of N), fabricating relationships that don't exist. Traced to a
pg-metaSQL cross-join, reproduced onmain, fixed, and submitted upstream. - Trigger-returning functions misclassified as standalone functions when triggers weren't requested — the classification was coupled to an unrelated request flag.
Both were confirmed by hand and reported. The gate is what separates these from the proposals that were just opinions.
- propose — an LLM reads the intent (issue) and the PR diff, and proposes the behaviors it thinks should hold, each as a test.
- gate — each test is run against the real code in a clean checkout. A finding
is
confirmed_gaponly if its test compiles, runs, and fails. Deterministic, external, no LLM. - classify — handled / confirmed_gap / broken_test, projected to a board.
- The gate works and is the reliable part.
- Coverage is a sampling problem: on the composite-FK case, the proposer reached the bug-triggering shape in 3 of 5 runs. It reaches the topic reliably but samples which edge case. This is measured, not estimated.
- The advisory precision layer (an auditor) under-commits and is not yet trustworthy.
- A fix stage (propose a fix, verify red→green→no-regression) is built and unit-tested but not yet wired end to end.
See ROADMAP.md for the full state and next steps.
pip install -e .
# review a PR (needs OPENAI_API_KEY and a local clone of the target repo):
CLONE=/path/to/repo PR_HEAD=HEAD PR_BASE=main python examples/run_review.pyThe verifier logic is unit-testable without any API key:
PYTHONPATH=src python -m pytest tests/ -q- The verifier is deterministic and external. No LLM in the accept/reject path.
- Correctness comes from the code, checked fresh — not from memory, not from a second model agreeing, not from a test the proposing model also authored without a real red→green transition.
- A second model may flag disagreement; it never votes on correctness. Conflicts are surfaced for a human, never averaged away.
- Every proposal is verified against a clean tree.