Find the break. Check the repair.

Your button changed.
Your test didn’t.

See what failed, inspect the page, and check the repair.
Try it with or without an agent.

Recorded offline repair · zero model calls

  1. 01 Looks good
  2. 02 Something breaks
  3. 03 9l finds the gap
  4. 04 A better test

A green test. Ready to ship?

Your shop looks good and its checkout test passes. Let’s break something the customer can see.

studio-supply / checkoutRecorded illustration

Studio Supply

Your bag · 2 items

Field notebook

Sage / dotted

€18

Studio mug

Clay / 300 ml

€24

Order confirmed: 2 items

ON THE PAGE · 1 BUTTON

Profile: waiting to continue

Try the working button. A manual click does not verify the test.

Your checkout test

✓ Test passes
  • Cart shows two itemsChecked by the test
  • Order confirms two itemsChecked by the test
  • Recommendations appearNo check for this yet
Two checks. Both green.

The test checks the cart and the order. What about the rest of the page?

Profile test

✕ Test stopped

The test cannot find the button it was told to click.

A locator is the test’s address for an element.

This one uses the button’s name. That name changed, so the old address finds nothing.

Failure reproduced · 1 test executed

9l inspector · illustration

Select Elements to highlight the missing or observed target. Select Changes to inspect the repair.

Interactive illustration based on a recorded local 9l run. These clicks change the illustration; they don’t execute tests or call an agent. Agent explanations are illustrative.

What else can 9l help with?Same shop. More everyday testing problems.
“A renamed button broke my test.”

9l can propose a supported locator repair, keep the checks intact and run the candidate separately before you accept it.

In this demo: “Continue now” → “Continue to review”. The candidate passed; the original test stayed unchanged.

Experimental healing · 9l heal · offline candidate, no model calls
“Did that bug fix actually work?”

Run the same test on the code before and after a fix. Check that it fails on the bug and passes on the repair.

In this demo: a two-item order incorrectly said “1 item”. The same check failed before the fix and passed after it.

Experimental fix confirmation · 9l confirm
“Did we break anything obvious?”

Scan a page for issues such as broken links, missing form labels and console errors. Compare it with an earlier scan to find new problems.

In this demo: a broken support link and a missing promo-code label were detected. Page inspection also listed usable controls.

Page observations, not test results · 9l scan + 9l inspect
“What was this test meant to cover?”

Compare a test with a separate list of requirements. Save its source and declared author so you can trace what was assessed and executed.

In this demo: assessment flagged the missing recommendation check. Fault testing then demonstrated the gap.

Advisory assessment + source provenance · 9l assess + 9l provenance
“Can an agent fill in the steps?”

Bounded goals can operate observed controls. Your explicit checks still decide whether the result is correct.

In this demo: a scripted goal filled a name and continued. A broken profile still failed the test. A separate purchase goal was blocked before ordering.

Experimental SDK goals · this demo uses a fixed offline script, not a live AI model. Goal completion is unverified.
“Can I keep my tools?”

Keep ordinary Playwright tests, or add named steps with the optional SDK. An agent can call 9l tools through MCP and inspect execution receipts.

In this demo: both test styles ran. Through MCP, a support-link test was generated, reviewed and executed: failure on a broken link, pass after repair.

Playwright + SDK + MCP · receipts record which tests actually ran
For developers: the check, recorded results and how to run it

Locator repair: what actually ran

The recorded 9l heal tests/stale-locator.spec.ts --provider none run reproduced one failing test. Offline Tier 1 changed only the button-name literal from “Continue now” to “Continue to review”. The isolated candidate executed one test and passed the unchanged “Ready for Ada” assertion. The candidate was saved separately; the original was not applied or edited. There were zero provider calls.

“Agent + 9l” illustrates an agent reviewing the same evidence and requesting verification. It is not a recorded model response or a live Tier 2 run. If offline healing cannot find a supported repair, it returns unverified; an explicitly configured provider can propose a bounded candidate, which must still pass verification. An ambiguous target or a broken business outcome must not be hidden by weakening the assertion.

Missing check: fault testing

The second story illustrates experimental 9l prove. It runs the test with controlled network failures, then reports which failures caused assertions to fail. A failure that goes unnoticed is a reason to inspect your checks; it isn’t automatically an application bug.

The added check

The stronger test explicitly requires the pencil set recommendation. This is a human-readable demo requirement; 9l doesn’t add this assertion automatically.

await expect(
  page.getByRole('complementary', {name: 'Recommended'})
).toContainText('Pencil set');

What actually ran

Recorded on 13 October 2026 with local Chromium on macOS/ARM64. Three faults—connection aborted, HTTP 500, and empty JSON—were tried against each of the cart, order and recommendation requests.

Recorded fault testing results
TestHealthy pageCaughtMissed
OriginalPass6 of 93 of 9
With recommendation checkPass9 of 90 of 9

Both runs completed. The runner checked all 20 execution receipts: two healthy baselines and 18 fault runs. All three missed failures affected recommendations. These synthetic results establish detection of these nine faults, not complete application coverage or a production benchmark.

This page is a curated snapshot of the checked run release-lab-rhRQbm, using a local build based on d0c743f67d62 plus the demo files. It does not contain the raw receipts. Regenerate the full report below to inspect evidence from your own run. This offline snapshot does not measure live model quality. Tab 04 adds a separate real Codex recording. Verified replay and native mobile are not demonstrated here.

Run the real example

With Node 24 and Go 1.25.13 or newer, run these commands in a checkout of the 9lives repository. No account or model key is needed. The initial install needs internet access.

npm ci
npm exec playwright install chromium
npm run demo:lab

On Linux, install the browser with npm exec playwright install --with-deps chromium. The walkthrough takes a few minutes and prints the path to an HTML report with commands, results and receipts for all eight experiments.

To share this illustration, send this single HTML file or host it as a static page. It works offline, has no external assets and sends no requests until you follow an external link.