OnAssert

Ship every pull request with a QA verdict someone signed.

OnAssert checks each change against its ticket in a real browser and records the evidence. A QA engineer approves every verdict, and the tests are delivered to your repository.

acme/storefront#482

Checkout: show the delivery estimate on phones

Sample run for illustration

  1. Pass

    Delivery estimate appears under the shipping options

    2 screenshots

  2. Pass

    The estimate updates when the postcode changes

    3 screenshots

  3. Fail

    On a 390 px phone the estimate does not cover the Pay button

    1 screenshot, measured

  4. Not tested

    A paid order completes

    Needs a test card

Evidence for the failure

  1. Open /checkout at 390 × 844
  2. Enter postcode 2000
  3. The estimate box covers the top 14 px of the Pay button

Approved by a QA engineer
Published to the team after review

Tests delivered as acme/storefront#483
2 Playwright tests for the passed requirements

AI can click through an app. The hard part is trusting what it says. OnAssert treats every verdict as a claim that needs evidence, and a person checks the evidence before your team relies on it.

From pull request to a signed verdict

  1. Step 1

    Reads the ticket

    OnAssert reads the pull request, its description and the diff, and writes down the behaviour the change promises, one requirement per line.

  2. Step 2

    Uses the preview

    An agent opens your preview build in a real browser, at desktop and phone widths when layout matters. It clicks, scrolls and measures, and takes a screenshot of every result.

  3. Step 3

    A QA engineer signs off

    Every verdict waits as a draft. A QA engineer checks it against the evidence, corrects anything unsupported, then publishes it to your team.

  4. Step 4

    Tests land in your repo

    Requirements that passed become plain Playwright tests, opened as a pull request in your repository, ready for your CI.

What your team receives on every run

Three things, each one you can check yourself.

A verdict for each requirement

Pass, fail, partial or not tested, each with the screenshots and measurements behind it. Failures come with steps to reproduce, written for the developer who has to fix them.

A reviewer's sign-off

A QA engineer has read the evidence. If a verdict was not supported, it was corrected, and the run shows what changed and why.

Tests you own

Standard Playwright for the requirements that passed, sent only when a reviewer chooses to deliver them. They arrive as a pull request, so your team reviews them like any other code.

tests/e2e/checkout-estimate.spec.ts Sample
// acme/storefront#482: delivery estimate at checkout
import { test, expect } from '@playwright/test';

test('estimate shows under shipping options', async ({ page }) => {
  await page.goto('/checkout');
  await page.getByLabel('Postcode').fill('2000');
  await expect(page.getByText('Arrives Thu 16 Oct')).toBeVisible();
});

Safe to point at your code

OnAssert gets the least access it needs to check a change, and every limit below is enforced by the system, not by a promise.

Only the repositories you choose
You install the GitHub app on chosen repositories. It reads code and opens test pull requests there. It cannot see your settings, Actions secrets or other repositories.
Locked to your preview
The browser can only open your preview address. Links and redirects to any other site are blocked, and runs against your production address are refused.
A fresh browser for every run
Runs use a new, isolated browser session on Cloudflare. Nothing is installed on your machines or your servers.
A record nobody can edit
Drafts stay hidden from your team until a reviewer publishes them. Every review, correction and publish is written to a log that cannot be changed.

Coming next: a security pass on every pull request

Checks for missing security headers, unsafe cookies, keys left in page code, and pages the change opened up without a login. It only looks. It never attacks your site.

Start with a pilot on your own pull requests

We connect one repository and run OnAssert on the pull requests your team is already shipping, with a QA engineer reviewing every verdict. You judge it on your own code, and you keep every test it writes.

Questions