Document 09 of 14 · docs/QA.md
Nothing on this site is verified by reading it. Every claim the site makes to a visitor has an assertion that drives the page and checks. studio-src/sweep.cjs runs them all; studio-src/pdfcheck.mjs checks the files. Both are hand-run and run in the weekly Action. When an assertion is added, it is proved non-vacuous first: break the thing on purpose and watch it fail. Three false alarms on measureandbuy came from assertions that had gone stale, so check the assertion before believing a regression.
scrollWidth === clientWidth, and no element past the right edge outside an intended horizontal scroller).width, height and alt.DESIGN.md section 2 measured from computed styles, 4.5:1 or better for text, 3:1 for focus rings. Measured whole-surface, not one pair.document.fonts.check), and zero requests to any host but our own (and Stripe, on the customizer's buy click only).meta.title. Canonical, og:*, product:price:*, twitter tags present and pinned to www.Product with an Offer whose price equals the tier, BreadcrumbList, FAQPage with the same five questions as the page.--t-accent computed value changes).Content-Type: application/pdf.fields.json is rendered, with its label, counter and limit.overflow() returns empty). Then set the recipient (or the widest-set field) to max + 1 characters: the warning appears, the button disables and reads "Fix the fit to continue". Restore: the button returns. This test runs on every template, every build.a4 class and the sheet's aspect ratio.noindex present in the head and in the response headers.pdfcheck.mjs)For every template's free file and for the two files of a test-mode order:
meta.pages.FontFile2 or FontFile3 stream for each font resource, no base-14 substitutes) and no Type3 font dictionary exists, which is what a variable font turns into; see spikes/render/README.md. Chromium compresses these dictionaries, so the checker inflates every stream before searching.Locally without poppler this is a small Node script reading the PDF objects; with poppler, pdfinfo and pdffonts do the same and the numbers must agree.
refunded and the link stops.async_payment_succeeded is handled.This is the Phase 1 acceptance test and it is not done until all six pass.
sitemap.xml lists every template, month page, category and help page, and nothing noindexed.robots.txt serves. The Rich Pin validator passes on one template page.ga-check.cjs)./auth, /dashboard, /admin, /payment-success to /; /buy/x and /customize/x to /templates/.HANDOFF.md updated with the date and the numbers.Runs the sweep against www, pdfcheck on the free files, one end-to-end render through Browser Run into a scratch path (then deleted), the Supabase keep-warm query, and a link check. Opens one issue (commented on, not duplicated) when anything fails. It never changes anything; it tells a person. Same posture as measureandbuy's monthly source check, and PIPESTATUS[0] not $? after any pipe, for the same reason.