Generated on: 9/28/2026, 10:22:38 PM
Suggested fix: accept the failure and retest — the page is right, the test is out of date
The offer on this lander moved from 40% off £32.95 to 30% off £28.50, with the customer-facing price unchanged at £19.95, and the baseline still asserts the old figures. Every place the page states the offer agrees with the new one — top bar, buy-box badge, strikethrough price, purchase CTA, sticky bar and the server-rendered meta description — so this is a campaign change the baseline has not caught up with, not a page regression.
What I measured. The buy box renders £28.50 struck to £19.95 and badges "YOUR LIMITED TIME OFFER: SAVE 30%". £28.50 − £19.95 = £8.55, which is exactly 30.0000% — floor and ceil agree on 30, so the badge is not merely within rounding tolerance, it is exact. The top bar reads "30% off for a limited time" where the baseline expects 40%; the sticky bar reads "Floor Clean Starter Kit · £19.95 · Save 30%" where the baseline expects "· Save £13" (£13 was the old £32.95 − £19.95 saving). The strings "£32.95", "40%" and "Save £13" are absent from both innerText and textContent, so nothing is merely hidden at this width. What the money path does. Clicking TRY RISK-FREE navigates to https://purdyandfigg.com/pages/go?variant=56829413491068&plan=832140247420&discount=FLOORCLEAN4.4&quantity=1 and resolves to a Shopify checkout reading "Floor Clean Starter Kit Plan 4.4 Every 90 days", original £28.50, discounted £19.95, discount code FLOORCLEAN4.4 (−£8.55), total £19.95, recurring £23.95 every 90 days. The variant id (56829413491068) and selling plan (832140247420) are character-for-character identical to the baseline's; only the discount code changed, from ADVFLOORCLEANSKIT638C to FLOORCLEAN4.4. Same product, same plan, same price to the customer. What I ruled out. Not an A/B arm: the Intelligems bundle did not execute (window.Intelligems undefined, no Intelligems DOM nodes, only the server-emitted igProductData global), so I was served the native experience and cannot excuse or blame copy on a variant. Not a rendering artefact: the page's own meta description is server-rendered and reads "…Now 30% off.", which means the 30% figure is baked into the page source, not computed client-side from a bad value. Not a single-page fault: the sibling lander /floor-clean-problem carries the identical offer this run — 30% off, £28.50 → £19.95, £8.55 saving — so both Floor Clean landers moved together, which is what a deliberate campaign change looks like and not what a regression on one page looks like. Not a viewport problem: ran at 1280x813, desktop. Everything else in the baseline passes, including the assertions most likely to break in a real regression: all ten FAQ controls in the asserted order, the 10ml-into-5L dose (identical on the sibling, so the baseline's hard-failure condition for a dilution contradiction does not trigger), the 60ml ÷ 10ml = 6 washes and 3 × 6 = 18 weeks value maths, all five buy-box line items, both anchors, and every copy string in sections 2, 3, 5, 6, 9, 10, 11 and 12 verbatim under whitespace normalisation. The baseline clauses needing rewriting are section 1 (top bar 40% → 30%), section 8 (SAVE 40% → SAVE 30%, £32.95 → £28.50, and the CTA "TRY RISK-FREE | £32.95 £19.95" → "£28.50 £19.95"), section 12 (sticky bar "Save £13" → "Save 30%") and section 13 (discount ADVFLOORCLEANSKIT638C → FLOORCLEAN4.4). Section 8's arithmetic note should also be restated: £28.50 − £19.95 = £8.55 = exactly 30%.
A proposal, not a verdict — this route is still failing, and still counting toward the 3-strike demotion, until somebody confirms it in QA Bot.
URL: https://get.purdyandfigg.com/floor-clean-education/?aegis_qa=1 Viewport: 1280x813 (desktop) Runner: agatha-qa-runner (unattended) Theme: not a Shopify page (Lovable proxy on get.purdyandfigg.com); Shopify.theme is null here. Verified on purdyandfigg.com during cart cleanup: theme 188893921660, role main — no preview leak. A/B arms (Intelligems): bundle did not execute — window.Intelligems undefined, 0 Intelligems DOM nodes, only the server-emitted igProductData global. Control arm / native experience. (A stale ig-vars cookie from an earlier session is present; per playbook that is history, not state, and the global check is what establishes the arm.) Smooth-scroll probe: {instant: true, smooth: false} — measured before applying the instant-patch. getComputedStyle(documentElement).scrollBehavior = auto. CSS-animation probe: {probeOpacity: "0", reducedMotion: false} — animations are frozen in this browser. document.visibilityState is hidden.
The offer moved from 40% off £32.95 to 30% off £28.50. The price the customer pays, £19.95, is unchanged. Every statement of the offer on the page agrees with the new figures, and checkout charges exactly what the page shows. My proposed triage is baseline, high confidence — see the triage note.
---
| Check | Result | |
|---|---|---|
| Page renders (not an empty shell) | PASS | |
| Title exactly `Floor Clean: Your Questions Answered \ | Purdy & Figg` | PASS |
Top bar The floor care you asked for is here · 40% off for a limited time | FAIL | |
Top bar 5.0 · 65,000+ reviews | PASS |
… · 40% off for a limited timeThe floor care you asked for is here · 30% off for a limited time40% and £32.95 are absent from both innerText and textContent — not hidden at this width, genuinely not on the page.Meta description (playbook rule): PASS and worth noting as a positive. The page carries its own <meta name="description">, specific to this route, 138 characters (inside the ~160 display limit): "Everything you need to know about Floor Clean, the floors it suits, how to use it in a bucket or spray mop, and how it works. Now 30% off." og:description is present with the same text. This is not the estate-wide shared-default failure recorded against the PDPs. It is also independent evidence that 30% is the intended live offer — the figure is server-rendered into the page head.
H1 Meet Floor Clean., eyebrow NEW · FOR EVERY FLOOR, sub-copy verbatim, CTA TRY FLOOR CLEAN, ✓ 30-day money-back guarantee, and all four USP ticker items (Natural concentrate, Safe on every floor, Three scents, Slip-free finish).
H2 and body copy verbatim. All four surface labels present (Hardwood, Tile & Grout, Stone & Slate, Marble). The documented six-types-vs-four-labels mismatch is unchanged and, per the baseline, not failed on.
All three steps verbatim, closing line No rinsing. No residue. Just the right dose., and Have questions? Read our FAQ. present with #faq resolving to a real target.
Dose cross-check against the sibling — PASS, and this is the check that matters most here. /floor-clean-problem (route 66) states the identical 10ml into 5L. The baseline's hard-failure condition for a dilution contradiction does not trigger. The FAQ answer restates it consistently ("5 litres of warm water, and add one scoop").
Both methods present with copy verbatim.
All three scents with descriptions verbatim.
Exactly ten accordion controls, in the asserted order, labels verbatim. Item 1 is open by default and its answer covers hard floors, rinse-free/non-slip and the direct-sunlight note, as asserted. Expansion verified: aria-expanded went false → true on item 2 and the answer text rendered.
Method disclosure: tooling clicks by ref did not register on this page — a capture-phase click listener on document recorded zero events after a ref click, while the element was in the viewport and document.elementFromPoint() at its centre resolved inside the button (hitIsButton: true). I therefore exercised the controls with a scripted .click(), which the listener did record. This is a runner-tooling limitation, not a page fault, and I am not reporting any control as broken on the basis of a click I could not prove landed.
| Check | Expected | Shown | Result | ||
|---|---|---|---|---|---|
| H3 | Floor Clean Starter Kit | same | PASS | ||
| Sub-copy | Three scents, one scoop, and a floor that stays clean. | same | PASS | ||
| Social proof | 65,000+ verified 5-star reviews | same | PASS | ||
| Offer label | YOUR LIMITED TIME OFFER: SAVE 40% | …SAVE 30% | FAIL | ||
| Value line | ✓ One concentrate. Every floor. No residue. | same | PASS | ||
| Pricing | £32.95 → £19.95 | £28.50 → £19.95 | FAIL | ||
| Five included line items | all five | all five verbatim | PASS | ||
| Purchase CTA | `TRY RISK-FREE \ | £32.95 £19.95` | `TRY RISK-FREE \ | £28.50 £19.95` | FAIL |
| Reassurance lines | both | both verbatim | PASS |
Arithmetic on what is actually shown: £28.50 − £19.95 = £8.55; £8.55 / £28.50 = exactly 30.0000%. floor and ceil both give 30, so the SAVE 30% badge is exact, not merely within rounding tolerance. The page is internally consistent.
Both claims verbatim. Maths still reconciles: 60ml ÷ 10ml = 6 washes ✓; 3 concentrates × 6 = 18 washes = 18 weekly mops = 18 weeks ✓. All three figures remain consistent with the 10ml dose in section 4.
All four perks present with copy verbatim. (The page also carries a sub-heading Exclusive perks, only available to members. which the baseline does not assert — not a fault, worth adding when the baseline is next drafted.)
H2 present with 65.6K 5-star reviews and all five named testimonials (Roberta, Bath, Krish, Manchester, Lisa, London, Rory, Preston, Sophie, Leeds).
| Check | Expected | Shown | Result |
|---|---|---|---|
| Closing H2 + CTA + guarantee | Ready to give it a go? etc. | same | PASS |
| Sticky footer bar | Floor Clean Starter Kit · £19.95 · Save £13 | Floor Clean Starter Kit · £19.95 · Save 30% | FAIL |
| Footer | © 2026 Purdy & Figg. All rights reserved. | same | PASS |
The sticky bar was read after scrolling, with getComputedStyle checked: position: fixed, visibility: visible, opacity: 1 — a price a customer genuinely sees. Save £13 was the old £32.95 − £19.95 saving; £8.55 is the new one, and the bar now expresses it as a percentage instead.
…&discount=ADVFLOORCLEANSKIT638C&quantity=1https://purdyandfigg.com/pages/go?variant=56829413491068&plan=832140247420&discount=FLOORCLEAN4.4&quantity=1variant and plan are character-for-character identical to the baseline. Only the discount code changed. FAIL on the code, PASS on variant/plan/quantity.#faq and #buy-box both resolve to real targets. PASS.Checkout verified end-to-end. The link resolves to a Shopify checkout reading: Floor Clean Starter Kit, Plan 4.4, Every 90 days — original price £28.50, discounted price £19.95, discount code FLOORCLEAN4.4 (−£8.55), Subtotal £19.95, Total GBP £19.95, TOTAL SAVINGS £8.55, recurring subtotal £23.95 every 90 days. The price displayed on the page is the price charged at checkout.
Measured on a verified-clean session: I dropped the cart cookie before the first purchase action, and after the run /cart.js returned item_count: 0. The only code on the session afterwards was FLOORCLEAN4.4, which the page itself shipped in its /pages/go URL — so the £8.55 reduction is the page's own behaviour, not an inherited code.
Critical-rule checks: no variant reaches checkout under £1.00 (lowest line price £19.95), and no "Unleashed" variant appears anywhere on this page or at checkout.
TRY FLOOR CLEAN did not carry the page to the buy box in this browser. This is not reported as a defect.
{instant: true, smooth: false} — smooth scrolling is suppressed here.scrollY = 185, 185, 185, 185, 185, 185. The page moved 185px and stopped, consistent with a requestAnimationFrame-driven tween getting one frame and then freezing (document.visibilityState: "hidden", the same condition that freezes the CSS animation clock — probe returned probeOpacity: "0").#buy-box exists; scrollIntoView({block:"center"}) put it at top: 37 with scrollY: 4423 — reached: true.Verdict: not verified — smooth scroll unavailable in runner browser; target reachable, handler sound. Note the playbook's 2026-09-06 measurement on this route (0 → 5153, landing on #buy-box at 5152px) no longer matches the page geometry — the buy box now sits at ~4460px absolute, consistent with the layout changes around the offer.
window.gtag is a function; window.google_tag_manager holds G-FGQNW4H684 and AW-651693886; dataLayer processed js, config, gtm.dom, gtm.load.page_view was sent to region1.analytics.google.com/g/collect (tid G-FGQNW4H684).collect POST returned 503, while four Google Ads endpoints (google.com and google.co.uk /pagead/1p-user-list/ for 651693886 and 17526786815) returned 200 on the same page load. Per the playbook this is an observation about this runner's network until proven otherwise and is explicitly not reported as a site-wide or estate-wide failure. The first-party checks that would settle it are GA4 Realtime for property G-FGQNW4H684 and the Google Analytics status page. One machine, one page load, one endpoint — not independent evidence of anything.data-module attributes on this route, as the baseline records. No undocumented tracking modules found.ga-tracking.test.md for this suite is a stub that only says "Navigate to / and verify GA pixels are loaded" — it does not describe this route. Flagged below.65,000+ reviews (top bar), 65,000+ verified 5-star reviews (buy box), 65.6K 5-star reviews (reviews block). These do not contradict each other — 65.6K sits inside "65,000+" — so per the review-count rule this is not a defect. The estate-wide push for a single canonical figure still stands.Exclusive perks, only available to members. is on the page but not asserted.ga-tracking.test.md is a generic stub pointing at /, not at this route. It cannot meaningfully pass or fail. Worth drafting properly against this lander. I have not called request_qa_test_creation because the content baseline here is a real reviewed one and the flag applies only to the GA file.One, for the flag the baseline has carried since capture and which I verified this run — the 5.0 aggregate rating claim against the company's own published 4.8. See the route's Defects tab.
https://purdyandfigg.com/pages/go?variant=56829413491068&plan=832140247420&discount=FLOORCLEAN4.4&quantity=1
That is the only purchase destination on the page — one plan, one link. It is built at runtime by the React handler (the page ships no href and no /cart/add form; a link scrape returns only /, #faq and #buy-box), so I recovered it by clicking the CTA and reading document.referrer at the checkout, then reading the parts of it individually rather than as a joined query string. It resolved to a Shopify checkout that applied FLOORCLEAN4.4 (−£8.55 on £28.50, total £19.95). The resolved checkout URL carries a one-time /checkouts/cn/… session token tied to my own cart and is not reproducible, so it is not reproduced here; the discount code it carried is the one named above.