unevidenced-pass
A pass with nothing behind it.
No duration, no completed artifact, no step that ran. Raw output alone isn't evidence. The project halts.
Evalix binds every test result to the requirement it covers and the evidence it left behind, then gates your project on what actually ran. A pass with no evidence doesn't count. It halts the gate.
A green build is a claim. Tests get skipped, renamed or quietly loosened. A known bug gets fixed by accident and nobody notices. A runner reports "passed" for a test that never really executed. And when AI agents write both the code and the tests, the claim gets easier to make and harder to check.
Evalix treats every pass as something to prove, not something to believe.
A test that "passed" with no duration, no artifact and no step that ran.
Requirements marked covered by tests that no longer exist or no longer run.
A known failure that starts passing, and nobody asked why.
Requirements, test requirements and test cases live as YAML files in your repo, next to the code. Every change to them is a reviewable diff.
Push results from any CI with the evalix CLI, or let Evalix run the suite itself: it clones your repo at a ref, runs the suite in isolated containers, and collects the evidence.
Each result is matched to its test case. Results that match nothing are stored and flagged, never dropped.
The reconciler compares what the lifecycle says against what actually ran, and answers pass, fail or halted, with a coverage report that says why.
$ evalix ingest --project checkout --format playwright --env staging --gate reports/playwright.json run run-20261028-091512-4c2e: 312 results (0 unmatched), 41 artifacts url: https://evalix.example/p/checkout/runs/run-20261028-091512-4c2e # Coverage — run-20261028-091512-4c2e (staging) **Verdict: halted** **Halted:** unevidenced-pass: TC-208 | `unevidenced-pass` | fail | `TC-208` | "refund to original card" passed in run run-20261028-091512-4c2e with no duration, no completed artifact and no step that ran |
The reconciler looks for divergences between your lifecycle and your results. You choose which ones fail the build. Two of them stop everything.
A pass with nothing behind it.
No duration, no completed artifact, no step that ran. Raw output alone isn't evidence. The project halts.
A known bug that fixed itself.
A case expected to fail just passed. Maybe it's fixed; maybe the test stopped testing. The project halts.
A halted project stays halted until a person clears it, with a reason, and that decision is recorded.
| Divergence | What it catches |
|---|---|
| dead-reference | An approved test case points at automation that no longer exists |
| unmatched-results | Results that don't belong to any test case |
| failing-approved | A requirement's approved case failed |
| not-executed | An approved automated case didn't run |
| stale | An approved manual case has no recent result |
| claim-out-of-date | A retired case is still producing results |
Evalix ships a freeze check for your CI. It reads the structure of your test files and lifecycle, not just the text, and blocks changes that weaken the oracle: a removed assertion, an added .skip or .only, an edited expected value on an approved case, a status flipped to approved. Overrides are possible, and every one is logged with a reason.
Built for teams where AI agents write code. An agent can't approve its own tests.
Traces, screenshots, videos and logs are uploaded to your own S3-compatible storage, checksummed, and linked to the result they prove.
Requirement → test requirement → test case → run → result → evidence. Coverage is a measurement, not a spreadsheet.
Halts, clears, imports and keys are recorded with who and why.
Bring JUnit XML, Allure results or Playwright JSON from any CI. No rewrite, no lock-in to a runner.
Evalix ships as one Docker Compose bundle: the API and web app, Postgres, the execution engine, and backups. Evidence goes to the S3-compatible storage you choose. The core is Apache-2.0. Your test data never has to leave your infrastructure.
Evalix is in early access. Tell us about your team and we'll get in touch to help you set it up.
Thanks. You're on the list. We'll be in touch.