20 explainable QA analysis rules

Every failure is put through this catalogue before the AI is asked anything. Each rule states what it detected, why it matched, how confident it is, and what to check next — the same answer, every time, with no model involved.

20 deterministic rules establish what happened.
AI interprets what it means.

The rules below produce the evidence. The AI never sees the raw test output — only what these rules established, and it must cite that evidence for every claim it makes. That ordering is what keeps the verdict grounded.

Rules in catalogue
20

8 categories

Fired on this suite
20/20

Across 78 analysed failures

Remediation checks
100

Five concrete checks per rule

Escalated to human
18

2 rules refuse to guess

Some rules deliberately decline to answer

Refusing to guess is a designed outcome, not a gap.

Could not confidently determine a specific root cause — this failure needs a manual look

This test failed with an error that doesn't match any known Playwright pattern. Manual investigation with traces and screenshots is the best next step.

Fired 9 times here — each one routed to a person rather than given a confident cause.

Test is consistently broken — not flaky, genuinely failing

This test fails in almost every run. It is not flaky — it has a real, consistent bug or the test itself is broken.

Fired 6 times here — each one routed to a person rather than given a confident cause.

The catalogue

UnknownMedium severityEscalates to human

Could not confidently determine a specific root cause — this failure needs a manual look

This test failed with an error that doesn't match any known Playwright pattern. Manual investigation with traces and screenshots is the best next step.

9
tests matched
Suite confidence 27% · base 20%chromium, firefox, webkitRule ID: RC-007
NetworkMedium severity

A network request failed — API unreachable, timeout, or DNS failure

A network call failed during the test. This could be a transient infrastructure issue, rate limiting, or the target service being unavailable.

6
tests matched
Suite confidence 78% · base 75%chromium, firefox, webkitRule ID: RC-004
StabilityCritical severityEscalates to human

Test is consistently broken — not flaky, genuinely failing

This test fails in almost every run. It is not flaky — it has a real, consistent bug or the test itself is broken.

6
tests matched
Suite confidence 99% · base 95%chromium, firefox, webkitRule ID: RC-005
NetworkHigh severity

Network request failed at the protocol level — unreachable host, DNS failure, or TLS error

net::ERR_ errors indicate the browser could not establish or complete a network connection. This is typically an infrastructure issue rather than an application bug.

6
tests matched
Suite confidence 98% · base 85%chromium, firefox, webkitRule ID: RC-014
AuthenticationHigh severity

Authentication required — the request was not authenticated

The server rejected the request as unauthenticated. The test's authentication state (tokens, cookies, storageState) may have expired or not been set up correctly.

6
tests matched
Suite confidence 86% · base 85%chromium, firefox, webkitRule ID: RC-015
TimeoutHigh severity

Page or API response too slow

Playwright timed out waiting for a condition — the page, element, or network request did not complete within the configured timeout.

4
tests matched
Suite confidence 88% · base 90%chromium, firefox, webkitRule ID: RC-001
LocatorHigh severity

The locator did not match any element in the DOM

The element may load asynchronously, be conditionally rendered, or have a dynamic selector that changed between test runs.

4
tests matched
Suite confidence 91% · base 85%chromium, firefox, webkitRule ID: RC-002
LocatorMedium severity

Element exists in the DOM but is not visible — timing or rendering issue

Playwright located the element in the DOM but it was hidden (display:none, visibility:hidden, zero dimensions, or outside viewport). This is typically a timing issue where the element hasn't finished rendering.

4
tests matched
Suite confidence 78% · base 80%chromium, firefox, webkitRule ID: RC-008
AssertionMedium severity

Expected value did not match actual value — test assertion failed

The test assertion failed. The application produced different output than expected — this could be a real application change or a timing issue where the value wasn't settled yet.

3
tests matched
Suite confidence 87% · base 80%chromium, firefox, webkitRule ID: RC-003
StabilityHigh severity

Race condition or async timing issue — the test outcome depends on execution order

When a test flips between PASS and FAIL with no discernible pattern, the most common cause is a race condition between the test's actions and the application's async behavior.

3
tests matched
Suite confidence 67% · base 70%chromium, firefox, webkitRule ID: RC-006
LocatorHigh severity

Element was present but not ready for interaction when clicked

Playwright auto-waits for elements to be stable, visible, enabled, and not covered. The click timed out because one of these conditions was not met within the timeout.

3
tests matched
Suite confidence 82% · base 85%chromium, firefox, webkitRule ID: RC-009
LocatorMedium severity

The locator matched multiple elements — Playwright's strict mode requires a single match

Playwright's strict mode requires locators to resolve to exactly one element. When multiple elements match, it throws this error to prevent accidental interaction with the wrong element.

3
tests matched
Suite confidence 99% · base 90%chromium, firefox, webkitRule ID: RC-011
AssertionMedium severity

Expected title does not match actual page title

The browser's page title did not match what the test expected. This can happen after redirects, SPA navigation, or when the title is set asynchronously.

3
tests matched
Suite confidence 92% · base 85%chromium, firefox, webkitRule ID: RC-013
AuthenticationHigh severity

Authorization denied — the authenticated user lacks required permissions

The server accepted the authentication but denied access. The test user has insufficient permissions or the resource has access controls that the test does not satisfy.

3
tests matched
Suite confidence 94% · base 85%chromium, firefox, webkitRule ID: RC-016
NetworkMedium severity

The requested endpoint or page was not found

The server could not find the requested resource. This could be a broken URL, a removed endpoint, or a resource that doesn't exist in the test data.

3
tests matched
Suite confidence 94% · base 85%chromium, firefox, webkitRule ID: RC-017
NetworkHigh severity

Internal server error — the backend encountered an unexpected condition

The backend server threw an unhandled error. This is a server-side issue that requires investigation of backend logs and service health.

3
tests matched
Suite confidence 94% · base 85%chromium, firefox, webkitRule ID: RC-018
NetworkMedium severity

The network connection was abruptly terminated by the server or network

The TCP connection was forcibly closed by the remote host. This is usually a transient network issue or the server terminating the connection unexpectedly.

3
tests matched
Suite confidence 77% · base 80%chromium, firefox, webkitRule ID: RC-019
EnvironmentHigh severity

The browser or page was unexpectedly closed during test execution

The browser page or context was closed before Playwright finished interacting with it. This can happen due to memory pressure, crashes, or incorrect test cleanup.

3
tests matched
Suite confidence 89% · base 80%chromium, firefox, webkitRule ID: RC-020
LocatorMedium severity

The element was removed from the DOM and re-rendered between location and interaction

The element was found in the DOM but a framework re-render replaced it before Playwright could complete the action. The element reference became stale.

2
tests matched
Suite confidence 81% · base 85%webkitRule ID: RC-010
AssertionMedium severity

Expected text does not match actual text on the page

The test expected specific text content but the element contained different text. This is often a UI update that wasn't reflected in the test.

1
test matched
Suite confidence 85% · base 85%firefoxRule ID: RC-012