Site navigation and actions.
From opening a PR to a report with evidence. Here's every step, and a real report at the end.
Install the Hydrofoil GitHub App on your organisation.
Hydrofoil can't change your code.
Pick the repos to review and confirm how Hydrofoil should find each preview. Optionally add a test persona.
It reads the diff, PR description, linked tickets, your repo instructions and what it learned in earlier runs. It works out which pages the PR touches and drafts the acceptance criteria and a test plan.
An isolated browser runs real flows while deterministic checks look at accessibility, console and network behaviour and performance. AI then judges what the facts mean.
An invalid code is accepted silently. No error appears.
Criterion 2 · Fail · High confidenceFindings arrive with evidence, severity and confidence, in GitHub and in the Hydrofoil dashboard.
From pull request to reviewed preview without writing another test.
Every run builds a map of your routes, login steps and flows.
You can add your own instructions, such as "Use the seeded Acme workspace" or "Never click Delete account", and they apply to every later run.
Dismiss a finding with a reason and Hydrofoil stops raising it.
Dismissed · "Intentional, page is being retired"
Won't be raised againA real run on [TBD: demo app name], reviewing [TBD: PR title].
Discount codes apply and can be removed on desktop and mobile. Invalid codes are accepted with no error, and the Apply button fails colour contrast.
Entering BAD-CODE and selecting Apply leaves the total unchanged and shows no message. The API responded 422.
| Page | State | Violations |
|---|---|---|
| /checkout | Default | 0 |
| /checkout | Code applied | 0 |
| /checkout | Invalid code entered | 1 |
| /cart | Default | 0 |
Apply button text is 3.1:1 against its background. It needs 4.5:1.
form.discount > button.applySummary, new and resolved findings, and a scorecard per category.
Reviewed pr-482.preview.acme.dev. 3 findings, 3 of 5 criteria passed, 1 unable to verify.
Invalid codes are accepted with no error message. onApply resolves even when the API returns 422, so setError never runs.
The run stops with "no deployment" and costs nothing.
You're refunded automatically.
The GitHub check shows neutral with a link to billing.
Older runs on that PR are cancelled and the new one starts after a short delay.
Hydrofoil says Unable to verify instead of guessing when a preview can't prove something.
Add a test persona and Hydrofoil signs in the way your users do, then reviews the pages behind the login.
The AI only ever sees a reference such as {{persona.admin.password}}. The real value is swapped in inside the sandbox.
{{persona.admin.password}}Sees the reference only
Swaps in the real value
We recommend previews that use seeded or sandbox data.
Hydrofoil opens each preview in a real browser and posts what it finds to GitHub.