Fold demo-build learnings: mechanical visual-QA design gate + detector-authoring traps - #61
Merged
Merged
Conversation
…r-authoring traps Demo storefronts kept shipping polish defects a screenshot glance skips — towering uncapped image bands, list-mode PLPs rendering zero rows behind HTTP 200 — because the re-skin ladder treated image height as an eyeball check and "it renders" (200) was the only mechanical bar. Promotes those to a mechanical definition-of-done in dw-demo-base/references/visual-qa.md: a `tall` image-band-height detector (durable fix = Tier-1 theme-CSS cap, added to dw-demo-swift/references/re-skin.md), a PLP row-presence + per-row-content detector, and framing the existing overflow/gap/stretched detectors as a blocking gate rather than a skippable checklist. Adds a stamped, non-blocking design sign-off pattern (SKIP until a sign-off artifact exists, then PASS) to orchestrator.md so visual taste stays a human decision without a build-blocking pause. Documents three authoring traps that make such a gate pass silently — Playwright's single-arg page.evaluate, ConvertTo-Json unwrapping a single-element array to a scalar, and a PowerShell local case-aliasing a declared parameter — with the rule that a probe run emitting zero probes must never be PASS.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Folds one demo-build session's design-quality-gate learnings into the demo skills' visual-QA, orchestrator, and re-skin references. A page that returns HTTP 200 is not a page that is done; these changes make the recurring polish defects mechanical instead of relying on an eyeball, and document the authoring traps that make such a gate pass silently.
Per learning (symptom -> change -> validation):
Image-band height is a Tier-1 visual-QA item, mechanically gated
talldetector tovisual-qa.md(image band taller than a configured viewport fraction), an eyeball-checklist + symptom-table row, and a DoD item. Durable fix is a Tier-1 theme-CSS cap (aspect-ratio+max-height+object-fit: cover) documented indw-demo-swift/re-skin.md. Distinct from the existingstretchedfinding (aspect is fine; the band is just too tall).tallarray is non-empty when a band exceeds the cap; a capped page returns it empty.PLP list must assert row-presence AND per-row content, not HTTP 200
visual-qa.mdasserting row count >=minRowsand that each row carries its required-field selectors (thumbnail / SKU / price / add-to-cart), plus a DoD row. An empty or field-short list behind 200 is a named finding.empty: true(rows < minRows) or anymissingentry fails; a filled list passes.The programmatic detectors are the mechanical definition-of-done
visual-qa.mdas a deterministic blocking pass/fail run before eyeballing, with the eyeball checklist layered on top rather than substituting.Design sign-off — taste stays human without blocking automation
orchestrator.mdacceptance criteria (and thevisual-qa.mdDoD): reports SKIP ("awaiting human sign-off") until a sign-off artifact exists, then PASS — so taste gets a human decision on the keeper screenshots without a build-blocking pause. The one blocking human gate remains the impact sign-off.Authoring detector/probe scripts — three silent-false-green traps
visual-qa.md: Playwrightpage.evaluatepasses exactly one arg (pass an options object); PowerShellConvertTo-Jsonunwraps a single-element array to a scalar (normalise scalar-or-array on the JS consumer side); a PowerShell local that is a case-variant of a parameter silently aliases it ($Body/$body— name the local distinctly). Plus the rule: a probe run emitting zero probes must never be reported as PASS.Version bumped to 4.11.1 (patch);
CHANGELOG.mdand thedw-demo-baseREADME entry updated in the same commit.python3 scripts/validate-skills.pyexits 0. All cross-references are demo->demo or demo->foundational; no foundational->demo link introduced.