|
362 | 362 | } |
363 | 363 | }, |
364 | 364 |
|
| 365 | + "visualBaselines": { |
| 366 | + "type": "object", |
| 367 | + "additionalProperties": false, |
| 368 | + "description": "Cross-browser (firefox/webkit) screenshot baseline storage per RFC 0002: pluggable backend, deterministic containerized capture, and per-baseline provenance. Same-browser chromium regression stays in regressionTesting.", |
| 369 | + "properties": { |
| 370 | + "enabled": { "type": "boolean" }, |
| 371 | + "backend": { |
| 372 | + "type": "string", |
| 373 | + "enum": ["commit", "ci-artifact", "service"], |
| 374 | + "description": "Where baselines live: committed to the repo (default), fetched from the last-green-main CI artifact, or delegated to a SaaS provider." |
| 375 | + }, |
| 376 | + "storage": { |
| 377 | + "type": "string", |
| 378 | + "enum": ["git", "lfs"], |
| 379 | + "description": "commit backend only: plain git-tracked PNGs, or Git LFS for large baseline sets (see scripts/setup-baseline-lfs.sh)." |
| 380 | + }, |
| 381 | + "baselineDir": { "type": "string", "description": "Baseline root, shared with regressionTesting; per-engine subdirectories." }, |
| 382 | + "screenshotDir": { "type": "string", "description": "Transient current-capture directory (gitignored)." }, |
| 383 | + "diffDir": { "type": "string", "description": "Transient diff-image directory (gitignored)." }, |
| 384 | + "browsers": { "$ref": "#/$defs/browserList" }, |
| 385 | + "routes": { "type": "array", "items": { "type": "string" } }, |
| 386 | + "breakpoints": { "$ref": "#/$defs/breakpointMap" }, |
| 387 | + "threshold": { "$ref": "#/$defs/percentageRatio", "description": "Cross-engine mismatch tolerance. Must equal e2e.crossBrowserDiffThreshold (structural check)." }, |
| 388 | + "blocking": { "type": "boolean", "description": "When true, compare failures exit non-zero (Phase B teeth). Keep false until determinism is proven." }, |
| 389 | + "reportFile": { "type": "string" }, |
| 390 | + "capture": { |
| 391 | + "type": "object", |
| 392 | + "additionalProperties": false, |
| 393 | + "properties": { |
| 394 | + "mode": { |
| 395 | + "type": "string", |
| 396 | + "enum": ["container", "local"], |
| 397 | + "description": "container (required for trustworthy firefox/webkit baselines) runs capture in the pinned Playwright image; local captures are recorded with host=local and flagged by provenance." |
| 398 | + }, |
| 399 | + "image": { "type": "string", "description": "Pinned Playwright container image (authoritative; scripts warn on drift vs the resolved @playwright/test version)." }, |
| 400 | + "waitAfterLoadMs": { "type": "integer", "minimum": 0 }, |
| 401 | + "fullPage": { "type": "boolean" } |
| 402 | + } |
| 403 | + }, |
| 404 | + "provenance": { |
| 405 | + "type": "object", |
| 406 | + "additionalProperties": false, |
| 407 | + "properties": { |
| 408 | + "manifest": { "type": "string", "description": "Committed provenance manifest path (engine, Playwright version, image, sha256, gitSha, host per baseline)." }, |
| 409 | + "policy": { |
| 410 | + "type": "string", |
| 411 | + "enum": ["warn", "enforce"], |
| 412 | + "description": "warn: provenance mismatches are reported but baselines are still diffed. enforce: flagged baselines are excluded from diffing and counted as failures." |
| 413 | + } |
| 414 | + } |
| 415 | + }, |
| 416 | + "ciArtifact": { |
| 417 | + "type": "object", |
| 418 | + "additionalProperties": false, |
| 419 | + "description": "backend=ci-artifact only.", |
| 420 | + "properties": { |
| 421 | + "compareAgainst": { "type": "string", "enum": ["last-green-main"] }, |
| 422 | + "retentionDays": { "type": "integer", "minimum": 1 } |
| 423 | + } |
| 424 | + }, |
| 425 | + "service": { |
| 426 | + "type": "object", |
| 427 | + "additionalProperties": false, |
| 428 | + "description": "backend=service only. The provider owns capture, diffing, and review; opt-in, requires a token in CI secrets.", |
| 429 | + "properties": { |
| 430 | + "provider": { "type": "string", "enum": ["chromatic", "percy"] }, |
| 431 | + "projectTokenEnv": { "type": "string", "description": "Name of the environment variable holding the provider project token." } |
| 432 | + } |
| 433 | + } |
| 434 | + } |
| 435 | + }, |
| 436 | + |
365 | 437 | "deadCode": { |
366 | 438 | "type": "object", |
367 | 439 | "additionalProperties": false, |
|
0 commit comments