How it works

How Hydrofoil reviews a pull request

From opening a PR to a report with evidence. Here's every step, and a real report at the end.

#482Add discount codes to checkoutReport with evidence
  1. Step 1: Connect GitHub
  2. Step 2: Choose repos
  3. Step 3: Understand the change
  4. Step 4: Review the preview
  5. Step 5: Results in your PR
Five steps

From install to evidence on every pull request

  1. 01

    Connect GitHub.

    Install the Hydrofoil GitHub App on your organisation.

    github.com · Install Hydrofoil
    Install HydrofoilGitHub App by hydrofoil-dev
    acme-inc
    Repository access
    All repositoriesOnly select repositories
    PermissionsSummary
    Read access to
    • Code
    • Metadata
    • Issues
    • Deployments
    • Commit statuses
    Read and write access to
    • Checks
    • Pull requests

    Hydrofoil can't change your code.

    CancelInstall Installed
  2. 02

    Choose repositories and tell us where previews live.

    Pick the repos to review and confirm how Hydrofoil should find each preview. Optionally add a test persona.

    Hydrofoil · Repositories
    Choose repositories
    • acme/storefrontVercel
    • acme/docsNetlify
      • Vercel
      • Netlify
      • Cloudflare Pages
      • URL pattern
    • acme/adminpr-{n}.admin.acme.dev
    • acme/apiNot reviewed
    Test persona · optionalqa-admin@acme.test · ••••••••
    Encrypted
  3. 03

    Hydrofoil understands the change.

    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.

    Hydrofoil · Understanding PR #482
    • Diff
    • PR description
    • SHOP-142
    • Repo instructions
    • Earlier runs
    src/checkout/Checkout.tsx
    export function Checkout() {- return <Summary />;+ const [code, setCode] = useState("");+ const apply = useApplyDiscount();+ return (+ <Summary>+ <DiscountField+ value={code}+ onApply={apply} />+ </Summary>+ ); }
    Impacted routes
    /checkout/cart
    Acceptance criteriaDraft
    1. A valid code reduces the order total
    2. An invalid code shows an error
    3. A code can be removed again
    4. Totals update on mobile
    Test plan · 6 steps
  4. 04

    Hydrofoil reviews the preview.

    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.

    Hydrofoil · Session on pr-482.preview.acme.dev
    Isolated browserChromium · 1440 × 900Recording
    1. Open cart
    2. Checkout
    3. Apply SAVE10
    4. Apply BAD-CODE
    5. Remove code
    Deterministic checks
    • Accessibility2 violations
    • Console1 error
    • NetworkAll requests OK
    • PerformanceLCP 1.9 s
    AI judgement

    An invalid code is accepted silently. No error appears.

    Criterion 2 · Fail · High confidence
  5. 05

    Results return to your PR.

    Findings arrive with evidence, severity and confidence, in GitHub and in the Hydrofoil dashboard.

    github.com · acme/storefront · Pull request #482
    Add discount codes to checkout#482 Open
    hydrofoilbotcommented
    Reviewed pr-482.preview.acme.dev · 3 findings
    1 major2 minor3 of 5 criteria passed
    src/checkout/Checkout.tsx
    + onApply={apply} />
    MajorHigh confidenceInvalid codes are accepted with no error message. Screenshot · step 4
    Hydrofoil / reviewIn progress…1 major finding · see detailsDashboard

From pull request to reviewed preview without writing another test.

What Hydrofoil learns about your app

It gets better at your app over time.

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.

App mapLearned over 14 runs
  1. /
  2. /login
  3. /cart
  4. /checkout
  5. /account
23 routes Login steps saved 4 flows
Repo instructionsacme/storefront
1Use the seeded Acme workspace
2Never click Delete account
Applies to every later runSave
MinorPromo banner overlaps the header on /legacy

Dismissed · "Intentional, page is being retired"

Won't be raised again
See a real report

Here's what a report looks like

A real run on [TBD: demo app name], reviewing [TBD: PR title].

app.hydrofoil.dev/acme/storefront/pulls/482
acme/storefront#482 Add discount codes to checkout
Run 3 Completed · 6m 12s
Summary

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.

New2
Resolved2
Still open1
MajorInvalid codes are accepted with no error messageNew
MinorApply button text contrast is 3.1:1New
Minor“Promo code” and “discount code” are used for the same thingStill open
Scorecard
  • Requirements3 of 5
  • Functional1 major
  • Content1 minor
  • Visual & designPass
  • Accessibility1 minor
  • PerformancePass

Summary, new and resolved findings, and a scorecard per category.

The same run in GitHub
Check summary
Hydrofoil / reviewCompleted in 6m 12s · 1 major finding

Reviewed pr-482.preview.acme.dev. 3 findings, 3 of 5 criteria passed, 1 unable to verify.

  • MajorInvalid codes are accepted with no error message
  • MinorApply button text contrast is 3.1:1
  • Minor“Promo code” and “discount code” are used for the same thing
View the full report
Inline comment
src/checkout/DiscountField.tsx
14+ const submit = async () => {
15+ await onApply(code);
hydrofoilbotMajorHigh confidence

Invalid codes are accepted with no error message. onApply resolves even when the API returns 422, so setError never runs.

Screenshot and video from step 4
What it connects to

Works with the tools you already use

  • GitHubPRs, checks, comments and reviews
  • VercelReviews your preview deployments.[TBD: protected previews supported via bypass header]
  • NetlifyReviews your deploy previews
  • Cloudflare PagesReviews your preview deployments
  • Custom preview URLAny per-PR URL pattern, or any CI that creates GitHub Deployments
  • Jira CloudTurns tickets into acceptance criteria and verifies them
  • GitHub IssuesReads linked issues
  • Coming later[TBD: Linear · Slack · Figma · Jira Data Center]
What isn't supported
  • GitLab
  • Bitbucket
  • GitHub Enterprise Server
  • Native mobile apps
  • Backend or API-only testing
[TBD: confirm at launch]
When something goes wrong

What happens when things aren't perfect

  • No preview appears

    The run stops with "no deployment" and costs nothing.

  • Our infrastructure fails

    You're refunded automatically.

  • You're out of credits

    The GitHub check shows neutral with a link to billing.

  • You push again

    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.

Logged-in apps

Works behind your login

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.

Keeping your test environment safe

Built not to break things

  • Only browses the domains you allow
  • Blocks requests you list
  • Avoids actions you forbid

We recommend previews that use seeded or sandbox data.

Read about security

Frequently asked questions

See it on your next pull request

Hydrofoil opens each preview in a real browser and posts what it finds to GitHub.