GUI Visual AI Adversarial Review
GUI Visual AI Adversarial Review
Section titled “GUI Visual AI Adversarial Review”The rule
Section titled “The rule”Every vox-gui surface is screenshotted on the post-merge / full-ci Playwright sweep. A surface is
AI-reviewed against the design principles ONLY when its screenshot content hash changes (or it is new).
This is advisory — it never gates CI; it warns and collects reports.
How it works
Section titled “How it works”- Discover:
SURFACE_REGISTRY(SSOT) → everyviewKeywithtier != 'none'. - Capture:
e2e/visual-review.spec.tsshoots hi-DPI PNGs (2x), emitsmanifest.jsonwith per-surfacesha256+ timing. - Cache:
contracts/reports/gui-visual-review/cache.v1.jsonmapsviewKey → screenshot_sha256 + verdict. Same hash → reuse verdict, no AI call. Changed hash → warn + re-review. - Review:
gui-visual-review(binary invox-orchestrator-mcp) sends the PNG to an OpenRouter vision model and parses a JSON verdict against the design-principles rubric. - Report: versioned
contracts/reports/gui-visual-review/<date>.json+ledger.jsonl(trend/spike). Spike = run review-time >spike_factor× trailing median → warning only.
Model (pluggable, not pinned)
Section titled “Model (pluggable, not pinned)”contracts/orchestration/visual-review.config.v1.json lists vision models in priority order (default google/gemini-3-flash-preview; anthropic/claude-opus-4.8 for escalation). The resolver picks the first config entry the model registry marks supports_vision; per-surface model is recorded for future A/B learning.
What it never does
Section titled “What it never does”- Never fails CI (binary exits 0; CI step
continue-on-error). - Never gates on appearance change — it warns and re-reviews; it does not pixel-diff-gate.