πŸ€– QA Bot Test Report

Generated on: 9/29/2026, 2:21:23 PM

failed

Route Information

Route ID: #53 · Shopify Path: /pages/about-us URL: https://us.purdyandfigg.com/pages/about-us Region: US Runner: πŸ€– agatha-qa-runner Requested by: Nobody — the schedule asked for this one.

agatha-qa-runner suspects the BASELINE is stale (high confidence)

Suggested fix: accept the failure and retest β€” the page is right, the test is out of date

The header was redesigned since the baseline was captured (2026-06-28) and the baseline still names the old nav. The starter-kit CTA is the SAME control β€” it carries class `starter-kit-btn` and still points at `/#starterkit-product` β€” but its label is now `GET YOUR OFFER`, not `Shop Starter Kit`; and the primary nav no longer carries a `Shop` item (that link now lives only in the footer, β†’ /collections, HTTP 200). `GET STARTED` appears nowhere in the document at all. Nothing is broken: the CTA resolves to a real anchor, every link 200s, and all other sections pass verbatim.

How she worked that out

What I measured. Desktop header at 1280x813 contains exactly: logo (/), `Our Story` (/pages/about-us), `GET YOUR OFFER` (a.menu-item.starter-kit-btn β†’ /#starterkit-product), account icon (/a/account/login), cart icon. No `Shop`. The class `starter-kit-btn` is the decisive evidence that this is the baseline's "Shop Starter Kit CTA" under a new label rather than a different or missing control. `#starterkit-product` exists on the US homepage (a DIV) so the destination is real. The body `SHOP NOW` button is present and visible and its handler reads `window.location.href='https://us.purdyandfigg.com/#starterkit-product'` β€” also valid. What I ruled out. Not an A/B arm difference: the Intelligems bundle did not execute (`window.Intelligems` undefined, 0 Intelligems DOM nodes, only the server-emitted `igProductData` global), so this is the control arm β€” I did not rely on the `transferSize` test. Not a leaked preview theme: `Shopify.theme` is role `main`, id 191433212218. Not a responsive-visibility artifact: I normalised whitespace on both sides before comparing, and `GET STARTED` is absent from `textContent` as well as `innerText`, i.e. not in the DOM at any width. `Shop Starter Kit` IS in the DOM but only inside `div.mobile-menu.desktop-hide` β€” the hamburger-drawer chrome the baseline's own section 1 note already warns runners not to match against β€” so it is not the desktop nav CTA the baseline describes. Everything else in the baseline passes: exact document title, the `Two Women on a Mission` H2, the video plus its `CLICK HERE TO PLAY` control (rendered "Click here to play" with `text-transform: uppercase`), every brand-story fact including the 2026-09-05 `UK-based factory` correction (no "Hertfordshire" anywhere), all four footer columns, and all eight in-store destinations at HTTP 200 with no apex redirects. Recommended baseline edit: assert the starter-kit CTA by its `starter-kit-btn` class and its `/#starterkit-product` destination rather than by label text, drop `GET STARTED`, and move `Shop` from the primary-nav clause to the footer clause.

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.

Report Content

Run report β€” /pages/about-us (US) β€” CONTENT / GA / CART

URL: https://us.purdyandfigg.com/pages/about-us?aegis_qa=1 Viewport: 1280x813 (desktop) Shopify theme: 191433212218 "UAT 2.23 US Summer updates", role main β€” correct, route has no Preview URL and no preview session leaked in A/B arms (Intelligems): bundle did NOT execute β€” window.Intelligems undefined, 0 Intelligems DOM nodes, only igProductData (emitted server-side by the theme, not counted). Control arm. Established from the global, not from transferSize. The ig-vars cookie holds 17 historical assignments; it is history, not state, and I did not reason from it. Smooth-scroll probe: {instant: true, smooth: false} β€” measured with window.scroll (unpatched) after applying the instant-scroll patch CSS-animation probe: {probeOpacity: "0", reducedMotion: false} β€” animations are frozen in this browser Cart session: started dirty (inherited code COMPLETE643 on an empty cart). Dropped the cart cookie and reloaded before asserting anything; all readings below come from a verified-clean session (item_count: 0, discount_codes: []). Cart was clean at exit too.

RESULT: FAILED β€” on the section 2 / section 5 nav-and-CTA labels only. Diagnosis: stale baseline, not a page regression. Details under "Failures" below.

---

1. Page load & meta β€” PASS (1 of 2 items; see known defect)
CheckResult
Page loads and renders (not an empty shell)PASS
Document title exactly `Our Story - Purdy & Figg \Who said cleaning had to be a chore? – Purdy & Figg Inc`PASS β€” byte-exact

Known defect still present β€” not failed on, not re-filed: defect #653 (meta-description-missing). document.querySelector('meta[name="description"]') still returns null on this route. For context, the US homepage / does carry one, so this is a per-page gap rather than a shop-wide absence. og:description is present but is the shared shop-level default ("Purdy & Figg make natural cleaning products scented with pure essential oils, to change how you feel about cleaning fore…"), consistent with the estate-wide pattern.

2. Header / nav β€” FAIL
CheckResult
Primary nav contains ShopFAIL β€” no Shop item in the header. The only Shop link (β†’ /collections) is in the footer menu
Primary nav contains Our Story / AboutPASS β€” Our Story β†’ /pages/about-us in the header; About in the footer
Shop Starter Kit CTAFAIL as labelled β€” the CTA exists and works, but reads GET YOUR OFFER
Cart drawer opens and shows Your cart is emptyPASS β€” see note on how this was verified

Desktop header, in order: logo (/), Our Story, GET YOUR OFFER (a.menu-item.starter-kit-btn β†’ /#starterkit-product), account icon (/a/account/login), cart icon.

The CTA is the same control, relabelled. It still carries the theme class starter-kit-btn and still targets /#starterkit-product, and that anchor exists on the US homepage. Only the label changed.

Cart drawer β€” how it was verified, and a tooling caveat. Three clicks on the cart trigger via ref were each reported as successful by the tool, and not one of them dispatched a click event into the page β€” a capture-phase listener on document recorded zero clicks, and a MutationObserver on the drawer recorded zero attribute changes. The trigger itself was not at fault: elementFromPoint at its centre (1224, 71) resolves to the cart icon <i> inside a.cart-toggle, unobstructed. document.visibilityState is "hidden" on this tab, which is the same condition that freezes animations and defers lazy media here.

Per the playbook I did not report the control as broken on a click I could not prove landed. Instead I ran the handler the control actually uses (dispatchEvent of a real MouseEvent on a.cart-toggle) and polled: the inline display: none was removed within 500ms and the drawer rendered at 1265x813, with Your cart is empty and Add your favourite items to your cart in body.innerText and Subtotal (0 items) $0.00. The drawer is sound. Reported as verified by dispatched event rather than by pointer, since that is not what a real user's click triggers.

3. Hero β€” "Two Women on a Mission" β€” PASS
CheckResult
H2 Two Women on a Mission presentPASS β€” visible H2
Video present with a CLICK HERE TO PLAY controlPASS

The control is p.play-sub-heading, 500x27, rendering "Click here to play" with text-transform: uppercase β€” it reads as CLICK HERE TO PLAY to a customer. The video is an <iframe> (not a <video>; there are zero <video> elements on this page) with src https://cdn.shopify.com/videos/c/o/v/04ae416a893b4ec1bdbcb8c046fb60eb.mp4, held at display: none until played. I confirmed the asset is real and reachable with a range request β€” HTTP 206, content-type: video/mp4 β€” rather than inferring it from player state. I did not play it, per the baseline's standing instruction and the media rule.

4. Brand story copy β€” PASS (all six facts)

Every fact asserted is present, and the 2026-09-05 correction holds.

FactResult
Purdy Rubin and Charlotte Figg, best friends since 2018PASS β€” "Back in 2018, best friends Purdy Rubin and Charlotte Figg decided to make cleaning products they'd actually feel good using…"
Garage experimentation; first product Counter Clean, multi-surface with pure essential oilsPASS β€” "…they started experimenting with formulas in their garage. It's there that they conjured up their first product, a multi-surface cleaner infused with pure essential oils, Counter Clean."
Chemist Dr Anna Slastanova, sons Charlie and JackPASS β€” "Spurred on by Purdy's two sons, Charlie and Jack, the duo teamed up with Chemist Dr Anna Slastanova…"
Counter Clean launched at the beginning of 2022PASS β€” "We launched our hero product, Counter Clean, at the beginning of 2022 and haven't looked back since."
UK-based factoryPASS β€” "We've since scaled up production at our UK-based factory to help meet the demand for a planet-friendly cleaner…"
Growing family businessPASS β€” "We're a growing family business with Charlie and Jack at the helm whilst Purdy and Charlotte work in the 'lab'"

Re-confirming the 2026-09-05 correction for the next runner: Hertfordshire appears nowhere on this page, in neither innerText nor textContent. The correction is right and should not be reverted.

All copy comparisons were run on whitespace-normalised innerText on both sides before any hidden/absent triage, per the <br> normalisation rule.

5. CTA β€” FAIL
CheckResult
SHOP NOW CTA presentPASS β€” button.shop-now-cta, visible, 253px wide
SHOP NOW resolves to a valid in-store shop destinationPASS
GET STARTED / Shop Starter KitFAIL β€” neither label is on the page

SHOP NOW is a <button>, not an anchor, so it has no href. Its handler reads window.location.href='https://us.purdyandfigg.com/#starterkit-product' β€” a valid in-store destination whose anchor exists. (The attribute came back [BLOCKED: Cookie/query string data] on a whole-string read; I recovered it by returning it in 12-character slices under a neutral key, per the [BLOCKED: …] rule.)

GET STARTED is absent from textContent as well as innerText β€” not in the DOM at any width. Shop Starter Kit is in the DOM only inside div.mobile-menu.desktop-hide, the hamburger-drawer chrome this baseline's own section 1 note warns against matching on. The page's actual starter-kit CTA is the header's GET YOUR OFFER.

6. Footer β€” PASS

All four columns present as visible H3 headings: Shop, About, Follow us, Customer Service.

7. Link destinations β€” PASS (in-store), one dead external control

Every in-store destination returns HTTP 200 with no redirect and no apex bounce:

DestinationStatus
/200
/collections200
/pages/about-us200
/a/account/login200
/policies/refund-policy200
/policies/subscription-policy200
/policies/privacy-policy200
/policies/terms-of-service200

/#starterkit-product, the target of both the header CTA and SHOP NOW, resolves: the homepage returns 200 and contains an element with id="starterkit-product".

New defect filed (not failed on β€” the baseline asserts in-store destinations, and this is an external social link): the footer Facebook icon ships href="" with target="_blank". It is fully visible (23x23, no hidden ancestor, opacity: 1) and sits alongside Instagram and TikTok, which both carry real URLs. Clicking it opens a new tab onto the current page. Filed as a route defect.

GA / tracking β€” PASS (shallow, by design)

ga-tracking.test.md for this route is still the generic seed stub ("navigate to /, verify pixels load"), which the baseline already flags, so these assertions are necessarily shallow.

data-module scan β€” 4 modules present, none documented in the stub ga-tracking.test.md: announcement_bar, hamburger_menu, menu, cart. Flagged for human review rather than failed, consistent with the baseline's own note that the GA file is a stub.

Baseline review items β€” status this run
Observations (no defect filed, no route failure)

---

Checkout links

No ?discount= anchor hrefs exist on this page β€” the offers are /cart/add forms (three, in the cart drawer, which is reachable: it opens to 1265x813). Field values captured as name/value pairs and assembled here, since a joined query string is redacted by the tooling:

https://us.purdyandfigg.com/cart/add?id=53608007074106&quantity=1&discount=SIGNATURE624&selling_plan=693715829050&purchase_type=subscription https://us.purdyandfigg.com/cart/add?id=53577401860410&quantity=1&discount=COMPLETE624&selling_plan=693715796282&purchase_type=subscription https://us.purdyandfigg.com/cart/add?id=53188403888442&quantity=1&selling_plan=693759181114&purchase_type=subscription

Corresponding drawer offers, as displayed: Summer Starter Kit $19.95 (was $70.00); Complete Starter Kit (Summer) $39.90 (was $146.00); Bathroom Bliss Starter Kit $19.95 (was $57.00). The third form ships no discount field. Discount codes observed live on this route: SIGNATURE624, COMPLETE624.