Labs · 57 fixture families

Stores built to be measured.

Each lab is a public, semantic-HTML page set. KeyPages.ai adds them as commerce pages and watches what the scanner sees.

All-Green Northwind
Live/labs/northwind
Reference storefront

All-Green Northwind

Deterministic ecommerce surface: home, collection, product, cart, checkout-entry, search, account, pricing. Built to pass every KeyPages commerce check.

Open store
Missing Add-to-Cart
Live/labs/missing-add-to-cart
PDP regression

Missing Add-to-Cart

Product page renders normally but the add-to-cart control is gone from the DOM. Tests purchase-path detection.

Open store
Disabled Add-to-Cart
Live/labs/disabled-add-to-cart
PDP regression

Disabled Add-to-Cart

Add-to-cart is present but rendered in a disabled state. Tests whether scanners distinguish interactive vs inert controls.

Open store
Missing Checkout Button
Live/labs/missing-checkout-button
Cart regression

Missing Checkout Button

Cart page is intact but the checkout CTA is removed. Tests funnel-step coverage when a single button vanishes.

Open store
Checkout Redirects Home
Live/labs/checkout-redirects-home
Silent funnel break

Checkout Redirects Home

The checkout-entry route silently redirects back to the homepage. Tests redirect-chain evidence and alert confidence.

Open store
Search Returns Zero
Live/labs/search-zero-results
Search regression

Search Returns Zero

Every search query returns an empty result set, no matter the term. Tests query-template baseline diffs.

Open store
Account Login Missing
Live/labs/account-login-missing
Auth surface regression

Account Login Missing

The account URL renders a Login Unavailable page while the rest of the site stays up. Tests auth-surface presence monitoring.

Open store
Empty Collection Grid
Live/labs/collection-grid-empty
Catalog regression

Empty Collection Grid

Collection page loads but renders zero product tiles. Tests catalog-density signals and empty-state detection.

Open store
Pricing — Missing Prices
Live/labs/pricing-missing-prices
Pricing regression

Pricing — Missing Prices

Pricing tiers render with names and features, but every price value is gone. Tests price-element baseline diff.

Open store
Pricing — Missing CTA
Live/labs/pricing-missing-cta
Pricing regression

Pricing — Missing CTA

Pricing tiers keep their prices but lose their CTAs. Tests conversion-path coverage on the pricing surface.

Open store
Critical Script Removed
Live/labs/critical-script-removed
Legacy marker fixture

Critical Script Removed

Legacy inline-marker fixture retained for compatibility. Use the paired critical-checkout-script gate for detector proof.

Open store
All-Green SaaS
Live/labs/saas-happy-path
SaaS reference site

All-Green SaaS

Healthy B2B SaaS marketing site: home, product, pricing, trial signup, demo, login, docs. No cart or checkout.

Open store
Directory · 12 of 12

Every lab, sortable and searchable.

PathOpen
Account Login MissingAuth surface regressionLive/labs/account-login-missingOpen
All-Green NorthwindReference storefrontLive/labs/northwindOpen
All-Green SaaSSaaS reference siteLive/labs/saas-happy-pathOpen
Checkout Redirects HomeSilent funnel breakLive/labs/checkout-redirects-homeOpen
Critical Script RemovedLegacy marker fixtureLive/labs/critical-script-removedOpen
Disabled Add-to-CartPDP regressionLive/labs/disabled-add-to-cartOpen
Empty Collection GridCatalog regressionLive/labs/collection-grid-emptyOpen
Missing Add-to-CartPDP regressionLive/labs/missing-add-to-cartOpen
Missing Checkout ButtonCart regressionLive/labs/missing-checkout-buttonOpen
Pricing — Missing CTAPricing regressionLive/labs/pricing-missing-ctaOpen
Pricing — Missing PricesPricing regressionLive/labs/pricing-missing-pricesOpen
Search Returns ZeroSearch regressionLive/labs/search-zero-resultsOpen
Next KeyPages gates · 45 fixture families

Paired and stateful fixtures for the next detection gates.

Operator directory. Each family pairs a broken condition with a healthy control built from the same layout. Expected test keys describe intent only — nothing here is a KeyPages result.

statefulWave A1Fixture onlyDurable state required

Lead form readiness

A public lead form can lose an essential control while the page itself remains healthy.

lab_id:
lead-form-readiness
expected_test_key:
lead_form_readiness
expected_http_status:
200 in both modes
fixture_version:
1
statefulDetector Phase D2T10Fixture onlyDurable state required

Business contact action regression

A configured call or email action can silently change to a malformed or unapproved destination while the page remains healthy.

lab_id:
contact-action-regression
expected_test_key:
contact_action_regression
expected_http_status:
200
fixture_version:
1
statefulWave A2Fixture onlyDurable state required

Primary action obscured

A visible, enabled booking or contact action can become unusable when another page element covers it.

lab_id:
primary-action-obscured
expected_test_key:
primary_action_obscured
expected_http_status:
200 in both modes
fixture_version:
1
statefulFixture Batch F2T06Fixture onlyDurable state required

Critical section stalled

A selected essential section can remain loading or unusable while the surrounding page continues to render.

lab_id:
critical-section-stalled
expected_test_key:
critical_section_stalled
expected_http_status:
200 for every fixture page
fixture_version:
1
statefulFixture Batch F2T03Fixture onlyDurable state required

Booking widget unavailable

A configured booking provider can be blank, errored, blocked, or absent while the host page remains reachable.

lab_id:
booking-widget
expected_test_key:
booking_widget_unavailable
expected_http_status:
200 for host pages; declared provider-frame responses vary by case
fixture_version:
1
statefulDetector Phase D4T09Fixture onlyDurable state required

Critical page data failure

A configured critical request can fail while its related customer-visible section becomes unusable even though the page shell remains healthy.

lab_id:
critical-page-data
expected_test_key:
critical_page_data_failure
expected_http_status:
200 for fixture pages; synthetic API responses vary by case
fixture_version:
1
statefulFixture Batch F3T07Fixture onlyDurable state required

Mobile conversion layout regression

A desktop conversion path can remain usable while the selected mobile action becomes unreachable through clipping or positioning.

lab_id:
mobile-conversion-layout
expected_test_key:
mobile_conversion_layout_regression
expected_http_status:
200 for every fixture page
fixture_version:
1
statefulFixture Batch F3T08Fixture onlyDurable state required

Offer content conflict

Visible and structured offer details can contradict each other for the same identified plan while the page remains reachable.

lab_id:
offer-content-conflict
expected_test_key:
offer_content_conflict
expected_http_status:
200 for every fixture page
fixture_version:
1
statefulFixture Batch F1T05Fixture onlyDurable state required

Critical image render failure

A customer-confirmed essential image can remain in markup while its selected resource fails, cannot decode, or never settles.

lab_id:
critical-image-render
expected_test_key:
critical_image_render_failure
expected_http_status:
200 for fixture pages; declared image resources vary by case
fixture_version:
1
statefulFixture Batch F1T04Fixture onlyDurable state required

Primary CTA destination regression

A visible primary action can resolve to a dead, unapproved, unsafe, or semantically invalid destination.

lab_id:
primary-cta-destination
expected_test_key:
primary_cta_destination_regression
expected_http_status:
200 for fixture pages; declared destination resources vary by case
fixture_version:
1
pairedHealthy controlsNo mutable state

All-Green Northwind detector controls

Each static commerce alarm needs a matching healthy page contract, not just a broken fixture.

lab_id:
northwind-healthy-controls
expected_test_key:
none
expected_http_status:
200 on every route
fixture_version:
1
  • Healthy product /labs/northwind/products/northstar-travel-jacket?contract=f10-healthy-product
  • Healthy collection /labs/northwind/collections/summer-gear?contract=f10-healthy-collection
  • Healthy cart /labs/northwind/cart?contract=f10-healthy-cart
  • Healthy checkout /labs/northwind/checkout?contract=f10-healthy-checkout
  • Healthy search /labs/northwind/search?q=hat&contract=f10-healthy-search
  • Healthy login /labs/northwind/account/login?contract=f10-healthy-login
  • Healthy pricing /labs/northwind/pricing?contract=f10-healthy-pricing
pairedSame-origin checkout script

Critical checkout script removed

Checkout still renders, but the required checkout script no longer loads.

lab_id:
critical-checkout-script
expected_test_key:
commerce_checkout_script_failure
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/critical-checkout-script/healthy/checkoutloads same-origin checkout script
  • Broken /labs/critical-checkout-script/broken/checkoutcheckout script never requested
paired

HTTP 200 JavaScript crash

The page returns 200 and looks fine, but JavaScript fails and the primary action does not work.

lab_id:
js-crash-http-200
expected_test_key:
js_crash
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/js-crash-http-200/healthy
  • Broken /labs/js-crash-http-200/brokenuncaught YAMAYAMA_INTENTIONAL_JS_CRASH
paired

Blank page vs application shell only

A page renders nothing at all, or only a visual loading skeleton without real content.

lab_id:
render-integrity-states
expected_test_key:
blank_page | script_shell_only
expected_http_status:
200 on all three routes
fixture_version:
2
  • Healthy /labs/render-integrity-states/healthy
  • Blank /labs/render-integrity-states/blank
  • Shell only /labs/render-integrity-states/shell-only
pairedRequires server behavior

Browser/network failure vs server outage

A verified customer outage must be distinguished from a capture failure with no trustworthy evidence.

lab_id:
failure-classification
expected_test_key:
http_status_failure
expected_http_status:
200 healthy, 503 outage, 302 to transport abort
fixture_version:
1
  • Healthy /labs/failure-classification/healthy
  • Server outage (503) /labs/failure-classification/server-outage
  • Browser error /labs/failure-classification/browser-errorredirects to a closed loopback port so the browser records a transport failure
pairedRequires server behavior

HTTP 429 rate limit and cooldown

The site temporarily rate-limits the scanner; monitoring should cool down and retry, not declare an outage.

lab_id:
rate-limit-cooldown
expected_test_key:
none
expected_http_status:
200 healthy, 429 with Retry-After: 120
fixture_version:
1
statefulDurable state required

Full failure and recovery lifecycle

A real issue must stay confirmed while broken and clearly recover once the page is fixed.

lab_id:
recovery-toggle
expected_test_key:
commerce_add_to_cart_disabled
expected_http_status:
200 in both modes
fixture_version:
1
paired

Checkout provider missing

Checkout and order summary render, but the expected payment provider experience is absent.

lab_id:
checkout-provider-missing
expected_test_key:
commerce_checkout_provider_missing
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/checkout-provider-missing/healthy/checkoutinert Stripe Elements evidence
  • Broken /labs/checkout-provider-missing/broken/checkoutprovider evidence removed only
statefulDurable state required

Major DOM drop after a healthy baseline

A page still returns 200 but loses most of its meaningful content after previously working.

lab_id:
major-dom-drop
expected_test_key:
major_dom_drop
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state requiredTwo baseline detectors

Visible text drop with HTML payload jump

A page keeps its headline and returns HTTP 200, but most visible copy disappears while the document payload grows unexpectedly.

lab_id:
baseline-drift
expected_test_key:
major_text_drop | large_html_size_jump
expected_http_status:
200 in both modes
fixture_version:
1
pairedConfigured product page

Product price missing

A purchasable product page keeps its buying action but loses all product price evidence.

lab_id:
product-price-missing
expected_test_key:
commerce_product_price_missing
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/product-price-missing/healthy/product
  • Broken /labs/product-price-missing/broken/productprice removed; product image and add-to-cart remain
pairedConfigured product page

Product image missing

A purchasable product page keeps its price and buying action but loses its primary product image.

lab_id:
product-image-missing
expected_test_key:
commerce_product_image_missing
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/product-image-missing/healthy/product
  • Broken /labs/product-image-missing/broken/productproduct image removed; price and add-to-cart remain
pairedConfigured cart page

Checkout button disabled

The cart is intact and the checkout control is present, but shoppers cannot activate it.

lab_id:
checkout-button-disabled
expected_test_key:
commerce_checkout_button_disabled
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/checkout-button-disabled/healthy/cart
  • Broken /labs/checkout-button-disabled/broken/cartcheckout button is disabled and aria-disabled
pairedConfigured checkout-entry pageRequires server behavior

Checkout entry unreachable

The configured checkout-entry route returns a real server failure instead of a checkout experience.

lab_id:
checkout-entry-unreachable
expected_test_key:
commerce_checkout_entry_unreachable
expected_http_status:
200 healthy, 503 broken
fixture_version:
1
  • Healthy /labs/checkout-entry-unreachable/healthy/checkout
  • Broken /labs/checkout-entry-unreachable/broken/checkoutreal HTTP 503
pairedConfigured search page

Search input missing

Search results still render, but shoppers have no input with which to start a new search.

lab_id:
search-input-missing
expected_test_key:
commerce_search_input_missing
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/search-input-missing/healthy/search
  • Broken /labs/search-input-missing/broken/searchresults remain; search form and input are removed
pairedConfigured account pageRequires redirect evidence

Account redirects home

The configured signed-out account route is masked by a same-origin redirect to the homepage.

lab_id:
account-bad-redirect
expected_test_key:
commerce_account_bad_redirect
expected_http_status:
200 healthy, 307 broken to /
fixture_version:
1
  • Healthy /labs/account-bad-redirect/healthy/account/login
  • Broken /labs/account-bad-redirect/broken/account/loginsame-origin redirect to homepage
statefulConfigured collection pageDurable state required

Collection product count drop

A previously healthy collection loses most of its product cards while the page remains reachable.

lab_id:
collection-product-count-drop
expected_test_key:
commerce_collection_product_count_drop
expected_http_status:
200 in both modes
fixture_version:
1
pairedConfigure #request-estimate

Configured critical selector missing

A customer-selected essential control disappears while the rest of the page stays healthy.

lab_id:
critical-selector-missing
expected_test_key:
critical_selector_missing
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/critical-selector-missing/healthy
  • Broken /labs/critical-selector-missing/broken#request-estimate removed
statefulDurable state required

Document title removed

A previously titled page loses its document title without otherwise failing to render.

lab_id:
title-removed
expected_test_key:
title_removed
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state requiredFour metadata detectors

Metadata integrity signals removed

A rendered page loses indexing, canonical, social, and structured-data signals while remaining HTTP 200.

lab_id:
metadata-integrity
expected_test_key:
canonical_changed | noindex_added | og_removed | structured_data_removed
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state requiredSitewide sitemap and route discovery

Sitemap integrity

A crawler-facing sitemap becomes malformed or stops advertising the monitored route while the page still returns HTTP 200.

lab_id:
sitemap-integrity
expected_test_key:
sitemap_malformed | sitemap_removed
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state required

Primary H1 removed

A previously headed page loses its primary H1 while the remaining content stays available.

lab_id:
h1-removed
expected_test_key:
h1_removed
expected_http_status:
200 in both modes
fixture_version:
1
pairedRequires redirect evidence

Redirect loop

A route keeps redirecting to itself instead of resolving to a page.

lab_id:
redirect-loop
expected_test_key:
redirect_loop
expected_http_status:
200 healthy, 302 four-hop redirect chain broken
fixture_version:
1
  • Healthy /labs/redirect-loop/healthy
  • Broken /labs/redirect-loop/brokenstarts an intentional four-hop redirect chain
pairedRequires redirect evidence

Deep link redirects home

A deep link is masked by a redirect to the site homepage.

lab_id:
redirect-homepage
expected_test_key:
redirect_to_homepage
expected_http_status:
200 healthy, 307 to / broken
fixture_version:
1
  • Healthy /labs/redirect-homepage/healthy
  • Broken /labs/redirect-homepage/broken
pairedRequires server behavior

Unexpected 4xx response

A route returns a client error other than an intentional not-found response.

lab_id:
unexpected-4xx
expected_test_key:
unexpected_4xx
expected_http_status:
200 healthy, 410 broken
fixture_version:
1
  • Healthy /labs/unexpected-4xx/healthy
  • Broken /labs/unexpected-4xx/broken
pairedCommerce baseline required

Commerce script domain regression

Checkout remains rendered but loses a previously observed commerce script domain.

lab_id:
commerce-script-domain-regression
expected_test_key:
commerce_script_domain_regression
expected_http_status:
200 on both checkout routes
fixture_version:
1
  • Healthy /labs/commerce-script-domain-regression/healthy/checkout
  • Broken /labs/commerce-script-domain-regression/broken/checkout
pairedConfigured checkout URL expectation

Commerce checkout URL changed

The checkout call-to-action points shoppers at an unexpected host or path.

lab_id:
commerce-checkout-url-changed
expected_test_key:
commerce_checkout_url_changed
expected_http_status:
200 on both checkout routes
fixture_version:
1
  • Healthy /labs/commerce-checkout-url-changed/healthy/checkout
  • Broken /labs/commerce-checkout-url-changed/broken/checkout
pairedConfigure #primary-cta

Primary CTA failure

A readable page loses the customer-configured primary action.

lab_id:
cta-failure
expected_test_key:
cta_failure
expected_http_status:
200 on both routes
fixture_version:
1
statefulDurable state requiredBaseline required

Dependency and resource regression

A page introduces insecure, failing, or unexpected runtime dependencies.

lab_id:
dependency-regression
expected_test_key:
high_resource_error_rate | mixed_content | third_party_failure | unexpected_script
expected_http_status:
200 in both modes
fixture_version:
1
pairedRendered browser evidence

Critical runtime integrity

A critical bundle fails while an injected inline script signature is present.

lab_id:
critical-runtime-integrity
expected_test_key:
critical_bundle_failure | injection_detected
expected_http_status:
200 on both routes
fixture_version:
1
  • Healthy /labs/critical-runtime-integrity/healthy
  • Broken /labs/critical-runtime-integrity/broken
statefulDurable state requiredBaseline required

Latency regression

Response time and time-to-first-byte regress materially from a known-good baseline.

lab_id:
latency-regression
expected_test_key:
slow_response | ttfb_spike
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state required

Severe slow load

A page takes more than eight seconds to respond.

lab_id:
severe-slow-load
expected_test_key:
severe_slow_load
expected_http_status:
200 in both modes
fixture_version:
1
statefulDurable state requiredBrowser metrics

Core Web Vitals regression

A page develops a long main-thread task and a large post-load layout shift.

lab_id:
core-web-vitals-regression
expected_test_key:
core_web_vitals_regression
expected_http_status:
200 in both modes
fixture_version:
1
pairedbadssl.com public control

Certificate expiry

The monitored certificate is expired or inside the renewal window.

lab_id:
certificate-expiry
expected_test_key:
cert_expiry
expected_http_status:
External TLS controls
fixture_version:
1
  • Healthy /labs/certificate-expiry/healthy
  • Broken /labs/certificate-expiry/broken
pairedbadssl.com public control

TLS validation failure

The monitored endpoint presents a certificate that fails trust validation.

lab_id:
tls-failure
expected_test_key:
tls_failure
expected_http_status:
External TLS controls
fixture_version:
1