Summary
Implement the cross-browser screenshot baseline-storage design decided in
RFC 0002 — Cross-Browser Screenshot Baseline Storage.
This is the implementation follow-up for the decision issue #85 (AC #2:
"Implementation tracked as a follow-up issue"). Blocked on RFC 0002 acceptance —
no code lands until the RFC Status moves Proposed → Accepted.
Decision recap
- Default backend: commit baselines to the repo (ratify the current
.gitignore behavior), extended to firefox/webkit; storage: "lfs" flag for
large baseline sets.
- Pluggable
visualBaselines.backend: commit (default) | ci-artifact |
service (Chromatic/Percy), behind a uniform adapter contract.
- Determinism precondition: capture cross-browser baselines in a pinned
Playwright container; record + verify per-baseline provenance.
Deliverables (phased per RFC §10)
Phase A — make the signal real (non-blocking)
Phase B — determinism, then teeth
Phase C — the other adapters
Open questions to resolve during implementation
See RFC §13: unify regressionTesting vs. keep separate; blocking threshold;
image-pin strategy; local firefox/webkit capture policy (warn vs. fail); LFS
history migration.
References
Milestone: v2.0.0
Summary
Implement the cross-browser screenshot baseline-storage design decided in
RFC 0002 — Cross-Browser Screenshot Baseline Storage.
This is the implementation follow-up for the decision issue #85 (AC #2:
"Implementation tracked as a follow-up issue"). Blocked on RFC 0002 acceptance —
no code lands until the RFC Status moves
Proposed → Accepted.Decision recap
.gitignorebehavior), extended tofirefox/webkit;storage: "lfs"flag forlarge baseline sets.
visualBaselines.backend:commit(default) |ci-artifact|service(Chromatic/Percy), behind a uniform adapter contract.Playwright container; record + verify per-baseline provenance.
Deliverables (phased per RFC §10)
Phase A — make the signal real (non-blocking)
visualBaselinessection to.claude/pipeline.config.jsonand itsJSON Schema (strict
additionalProperties: false).baselines/manifest.json) — engine, Playwrightversion, container image, sha256, gitSha, host.
firefox/webkitfrom committed baselines (extendscripts/regression-test.shor addscripts/cross-browser-baseline.sh),reusing
scripts/visual-diff.jsat threshold0.03.orchestration.phases.cross-browserso the phase performsthe comparison it advertises (replaces capture-only
scripts/cross-browser-test.shbehavior).CLAUDE.md+ adocs/page for the cross-browser baseline flow.Phase B — determinism, then teeth
docker run).emitting false pixel diffs).
blocking: trueand flip
qualityGate.crossBrowserScreenshotsRequired.Phase C — the other adapters
storage: "lfs"flag +.gitattributesautomation + migration docs.ci-artifactadapter (compare against last-greenmain).serviceadapter (Chromatic/Percy) — token via CI secret, opt-in.Open questions to resolve during implementation
See RFC §13: unify
regressionTestingvs. keep separate; blocking threshold;image-pin strategy; local firefox/webkit capture policy (warn vs. fail); LFS
history migration.
References
docs/rfcs/0002-cross-browser-screenshot-baseline-storage.mddocs/plans/2026-03-24-cross-browser-e2e-testing.md,docs/plans/2026-03-25-screenshot-regression-testing.mdMilestone: v2.0.0