Documentation

Zerocheck

Zerocheck interacts with your app to discover critical flows, turns them into plain-English tests, runs approved generated and human-authored tests before you merge, and keeps monitoring critical flows after release.

Key concepts

Suite, Flows, Test cases
Tests are organized as Flows (Checkout, Signup, Billing) with one or more Test cases each. The dashboard leads with uncovered critical flows, not a percentage.
Visual interaction
Tests find UI elements by their label and role via the browser's accessibility tree, not by CSS selectors or XPath.
PR-diff awareness
Zerocheck reads your PR diff to suggest tests for uncovered flows. The PR check runs the active approved suite.
Evidence artifacts
Every run produces timestamped, commit-bound records with the screen recording, screenshots, and step trace.

Next: Get your first test running

Get your first test running

1. Connect your repo

Paste your staging URL and connect your GitHub repository. Project settings live in Zerocheck, and local .yaml files can be used as editable test-case working copies for the CLI.

Setup
Staging URL:  https://staging.yourapp.com
Repository:   github.com/yourorg/app
Status:       Connected ✓

2. Review your generated tests

Zerocheck scans your app and proposes tests built from critical flows. Review suggested tests on the Suite page, edit anything that needs adjusting, and approve the ones you want to run. PR-diff tests are also saved as suggestions until reviewed.

Suggested test case
version: zerocheck/v1
name: "Checkout page loads"
flow: "Checkout"
critical: true
blocks_merge: true
steps:
  - Navigate to /checkout
  - Verify the checkout page is visible
  - Verify the order summary is visible
Tip
The steps are plain English. Edit them like you'd write a task for a teammate — no selectors, no code, no framework knowledge needed. The form view on the dashboard hides the YAML entirely.

3. Run on a pull request

Push a PR. Zerocheck runs the active approved suite against staging, analyzes the diff for coverage gaps, and posts results as a PR comment. Any tests generated from the diff are saved as suggestions for review.

PR #847: Refactor checkout components
zerocheck  bot  ·  2 min ago

  Approved suite
  ✓ Complete purchase flow          1m 52s
  ✓ Subscription renewal flow       0m 38s
  ✓ User signup and onboarding      1m 03s

  3 passed · 0 failed · 3m 33s

  Suggested tests
  • Failed-payment retry            saved for review

  Suggested tests were not run on this PR and do not affect
  the status check until approved.

4. Review evidence artifacts

Executed browser runs produce timestamped JSON evidence bound to the commit SHA, with per-test recordings, screenshots, and a step trace.

Next: Write tests in plain English

Write tests in plain English

Test spec format

Each test case is a small YAML document. The header carries a name, the flow it belongs to, whether it is critical, and whether it should block merge when approved. The steps list is plain English — each step describes what a user would do, not how to locate an element.

Test case: billing page smoke
version: zerocheck/v1
name: "Billing page shows current plan"
flow: "Billing"
critical: true
blocks_merge: true
monitor:
  every: 30m
steps:
  - Navigate to the billing page
  - Verify the current plan is visible
  - Verify the billing history is visible

You can edit this in a form view on the dashboard — the fields (name, flow, critical, merge blocking, monitor interval, steps) map one-to-one to the YAML. Toggle to the YAML tab for full control, or import YAML files from disk.

Visual interaction

Zerocheck uses the browser's accessibility tree to find UI elements by their visible label and ARIA role, the same way a real user would. You don't add data-testid attributes or maintain CSS selectors.

When your UI changes (button moves, class name changes, component gets wrapped in a new div), tests usually still pass because the element is still identifiable by its label. You maintain tests when the visible intent of the UI changes, not when the implementation does.

Selector-based (breaks on UI change)
page.locator('#btn-checkout').click()
page.locator('div.cart > span.price')
page.locator('[data-testid="iframe"]')
Zerocheck (visual interaction)
Click the "Checkout" button
Verify the cart total is correct
Verify the confirmation page appears

Usually survives CSS refactors, component renames, and redesigns when element labels stay consistent.

PR-diff awareness

When a PR modifies CheckoutForm.tsx and CartSummary.tsx, Zerocheck analyzes the diff to identify affected flows and possible coverage gaps. The PR check still runs the active approved suite against staging; diff-generated tests are saved as suggestions for review.

Example: PR #892 modifies checkout components
Files changed:
  src/checkout/CheckoutForm.tsx   +42  -18
  src/checkout/CartSummary.tsx    +15  -7
  src/lib/billing.ts              +3   -1

Zerocheck analyzed diff → 2 affected flows:
  → Checkout         covered by approved test
  → Billing          suggested test saved for review

Approved suite: 47 passed · 0 failed
Suggested tests: 1 awaiting review

When a flow is uncovered

If your change touches a flow that has no approved test, Zerocheck saves a suggested test for review. Suggested tests are non-blocking, are not run on the current PR, and do not count toward coverage or merge gating until a user approves them. You can edit, approve, or delete them from the dashboard.

Approval and merge gating

Approved tests can set blocks_merge: true when a failure should fail the PR status. Approved non-blocking tests are reported without failing the check. Suggested tests never block merge until a user reviews and approves them. Tests fail closed: when a step can't confidently identify an element, the test fails instead of silently passing.

Payment and sensitive flows

Zerocheck can run approved customer-authored browser tests against safe staging or test environments. Generated and discovery tests avoid payment fields, final purchase actions, file uploads, and destructive account actions until a user explicitly authors and approves the flow.

Checkout smoke test
version: zerocheck/v1
name: "Checkout page loads"
flow: "Checkout"
critical: true
blocks_merge: true
steps:
  - Navigate to /checkout
  - Verify the checkout page is visible
  - Verify the order summary is visible

Next: Run tests on every PR

Run tests on every PR

How results appear

Zerocheck posts a comment on every pull request, led by a coverage summary and followed by a per-test results table, step trace, screenshots, and a link to each run recording.

PR comment format
zerocheck  bot

  ┌──────────────────────────────────────────────────────────┐
  │  Coverage for this change                                │
  │    ✓ Checkout     covered by "Complete purchase flow"    │
  │    ✓ Billing      covered by "Subscription renewal"      │
  │    ✓ Signup       covered by "User signup and onboarding"│
  ├──────────────────────────────────────────────────────────┤
  │  3 passed · 0 failed · 8m 12s                            │
  ├──────────────────────────────────────────────────────────┤
  │  ✓  Complete purchase flow      ▶ Recording    2m 14s   │
  │  ✓  Subscription renewal        ▶ Recording    0m 38s   │
  │  ✓  User signup and onboarding  ▶ Recording    1m 03s   │
  ├──────────────────────────────────────────────────────────┤
  │  View screenshots · View step traces          [JSON]    │
  │  Commit a3f7c2e                                          │
  └──────────────────────────────────────────────────────────┘

When every affected critical flow is covered, the coverage block is celebratory. When one or more are uncovered, the comment leads with the list of uncovered flow names — never a percentage. You know immediately what needs attention.

Merge gating

Zerocheck can be set as a required status check on your repository. The check fails only when an approved test with blocks_merge: true fails. Non-blocking approved failures are reported without failing the check. Suggested tests from a PR diff do not run or block until approved.

Failure details in the PR comment

When a test fails, the PR comment expands a "Failure details" section with the failing step, the error message, and a screenshot of the failure state. Everything you need to reproduce the failure is in the PR thread — no separate bug tracker integration needed.

Continue running after merge

After a production URL is configured, approved critical tests can keep running against production. Non-critical approved tests monitor only when they set monitor.every. You can detect deployment regressions and third-party outages at the flow level instead of waiting for a user report.

Per-test monitor interval in YAML
version: zerocheck/v1
name: "Admin dashboard loads under 3s"
flow: "Admin"
critical: true
blocks_merge: false
monitor:
  every: 5m
steps:
  - Navigate to the admin dashboard
  - Verify the metrics panel is visible

A single failure triggers an immediate re-run. Alerts fire through Slack after the configured consecutive-failure threshold.

What connects to Zerocheck

Source control
GitHub
Alerts
Slack
Built-in
GitHub PR checks
Suggested test review
Accessibility-first interaction

Don't see your tool? Suggest an integration.

Next: Evidence & audit trail

Evidence & audit trail

Run recordings and screenshots (proof of execution)

Every test run captures a full recording of the browser session as proof of what happened. Each test gets its own recording, plus per-step screenshots (before and after each action). Failed steps include a highlighted screenshot of the failure state. Recordings and screenshots are linked in PR comments, evidence artifacts, and the dashboard.

Evidence artifacts

Every executed run writes a structured JSON artifact bound to the commit SHA and timestamped at run start. The artifact lists each test that ran, its outcome, duration, recording URL, screenshot count, and step trace. The current export is JSON run evidence; compliance teams can map that raw proof to audit needs outside Zerocheck.

evidence-artifact.json
{
  "artifact_id": "c4f7a2e-8b1d-4a3e-9f2c-5d8e7a1b4c6d",
  "commit": "a3f7c2e",
  "timestamp": "2026-04-20T00:14:32Z",
  "repository": "acme/web-app",
  "confidence_score": 0.94,
  "tests": [
    {
      "name": "Checkout page loads",
      "result": "pass",
      "duration_ms": 34210,
      "recording_url": "/artifacts/run-123/videos/checkout.webm",
      "screenshot_count": 6,
      "step_trace": [
        { "step": 1, "action": "Navigate to /checkout", "result": "pass" },
        { "step": 2, "action": "Verify the checkout page is visible", "result": "pass" }
      ]
    }
  ]
}
Tip
Run detail JSON is available from the run record/API. Artifact links point to the recordings, screenshots, and step trace captured during the run.

Next: Reference

Reference

Test case YAML fields

FieldDescriptionExample
versionSchema version — always zerocheck/v1version: zerocheck/v1
nameHuman-readable test case namename: "User can sign up"
flowFlow this test belongs toflow: "Signup"
criticalSurface in coverage as a must-cover flowcritical: true
blocks_mergeWhether an approved failure should fail the PR statusblocks_merge: true
monitor.everyRe-run interval for production monitoringmonitor: { every: 30m }
stepsOrdered list of plain-English stepssteps: [ ... ]

Step keywords

KeywordDescriptionExample
Navigate toGo to a page or URLNavigate to the settings page
ClickClick an element by visible labelClick "Submit order"
EnterType into an inputEnter "test@example.com" in the email field
SelectChoose from a dropdownSelect "Monthly" from the plan dropdown
Hover overHover without clickingHover over the "Profile" menu
Scroll toScroll an element into viewScroll to the pricing table
VerifyAssert visible contentVerify the dashboard shows 3 items
Wait forPause for a condition or durationWait for 3 seconds
(any other line)AI-interpreted free-form browser stepOpen the settings menu
(free-form action)AI-interpreted free-form browser stepOpen the settings menu

Evidence export

FormatUse caseContents
JSON manifestAuditor review + programmatic accessArtifact ID, commit SHA, timestamp, repository, confidence score, per-test result, recording URL, screenshot count, and step trace

Local YAML working copies

Most project configuration lives in Zerocheck. The CLI can still validate and run local .yaml test-case files while you edit, generate, or import tests.

tests/billing-page-smoke.yaml
version: zerocheck/v1
name: "Billing page smoke"
flow: "Billing"
critical: true
blocks_merge: true
monitor:
  every: 30m
steps:
  - Navigate to the billing page
  - Verify the current plan is visible
  - Verify the billing history is visible
Note
Keep secrets such as API tokens and passwords in environment variables or Zerocheck-hosted settings. Do not commit credentials in local test files.

Want to see it on your code?

See Zerocheck run on a real PR from your repo.

Get a demo