Skip to content

UIJudgeBench v0.2.0

Pre-release
Pre-release

Choose a tag to compare

@soodoku soodoku released this 17 Aug 18:53
· 7 commits to main since this release
039a536

[0.2.0] — 2026-08-17

Instrument-fairness release: the two scoring paths v0.1.0 disclosed as unfair to vision
judges are fixed, the layout track gains detector parity plus a keyless rules floor, and
the corpus gains exhaustive receipt-backed multi-label gold and both-edge protrusions.
Still $0 in paid runs under the repaired v4 instrument — floors only; the historical
Gemini v1 result remains disclosed, and the fixed-instrument baselines remain priced-but-held.
The reasoning-aware v4 three-run test estimate is $37.19 for Gemini 3 Flash plus
$2.68 for Qwen3-VL ($39.87 combined; see reports/spend_estimate_2026-08-17.md).
Gemini's estimate includes 2,700 billed reasoning tokens/call; its configured-budget
envelope is $102.80, so the paid smoke remains mandatory before a full run.

Instrument fixes (datasheet #16, resolved)

  • L2 closed vocabulary — prompt v4 (#16a): the L2 prompt told judges to use "the
    closed vocabulary named in the question" but never named one, so free-text labels could
    not match the controlled codes (L2 F1 = 0.0 by construction). Prompt v4 is the
    recorded calibration winner (v1) with exactly one change: the L2 template renders the
    track's explicit, versioned, scorable criterion vocabulary
    (uijudge.criteria.render_track_vocabulary) — identical text for every item of a track,
    so it cannot leak an answer. v1–v3 stay byte-identical (CALIBRATION.md Amendment 2).
  • Exhaustive L2 gold: verifier receipts now record every supported overlapping criterion
    established by the same render measurements. This fixes truncation/page-overflow cases
    where a complete prediction was previously penalized for returning a second correct label.
    Detached form labels now carry both WCAG 1.3.1 and 4.1.2, matching W3C failure F68.
    Responsive small-range items now use the defective mobile viewport at every scored level.
    L2 is limited to controlled synthetic pages: 52 frozen-real mutation L2 rows were removed
    because unrelated pre-existing defects make their page-level label sets non-exhaustive.
  • L3 bbox-IoU-only scoring (#16b): ground-truth selectors are internal #uij-eN ids a
    vision judge cannot know from a screenshot; selector match is no longer a scoring path.
    A hit is bbox IoU ≥ 0.5, full stop; predicted selectors are recorded, never scored, and
    score_l3 reports a selector_only count. Consequence, disclosed: the axe floor's L3
    drops to 0.0 (its answers are selector-only; axe reports no geometry).

Corpus

  • Unsupported clean L2 labels removed: a criterion-specific passing control cannot prove
    that a page is clean across an exhaustive multi-label vocabulary. The 90 provisional empty
    L2 rows were removed; clean-page L2 false-positive rate remains an explicit limitation until
    a page-wide verifier can support that ground truth.
  • GDS kept at its native evidentiary level: the 142 seeded GDS categories remain as
    criterion-conditioned L1 items, but their 142 provisional L2 rows were removed. An upstream
    seeded category is not exhaustive page-level annotation and overlaps both other GDS
    categories and WCAG; treating it as complete multi-label gold was not defensible.
  • Two new mutation classes (17 total): overflow:page (document wider than the
    viewport) and truncate:ellipsis (single-line text cut by an ellipsis), both
    render-verified with ported layoutlens measurements.
  • Both-edge viewport protrusion: the protrude:viewport mutator now draws left or
    right; receipts and item evidence carry edge/edge_px (a left-edge protrusion is no
    longer described as a right-edge one). Left offsets are sized to actually clear the
    template's element positions — v0.1.0's left branch could never verify.
  • Pixel-confinement gate (DiffSpot-style): contrast:degrade mutations (and
    z:occlude, against the occluder's own bbox) must change pixels only near the target
    bbox or the mutation is discarded and logged; reflow classes are policy-skipped with
    recorded reasons. Receipts carry severity and confinement.
  • Corpus totals: 4,149 items / 676 unique pages (was 4,340/677); synthetic slice
    1,979. Two consecutive make corpus-synth builds remain byte-identical.

Floors and metrics

  • New keyless layout rules floor — layoutlens-layout: answers L1/L3 layout items
    from a deterministic layoutlens.layout.LayoutScorer scan (no LLM, no API key), the
    layout-track analogue of AxeJudge. Test split: L1 F1 0.539, L3 acc@0.5 0.462 — recall
    1.0 / FPR 0.0 on all five mapped defect classes; unmapped classes
    (occlusion/alignment/small-range) abstain and score as wrong. Circularity disclosed in
    the report note (layoutlens.layout is the productionized port of this repo's verifier),
    as is the real-page FP source (intentional offscreen sr-only/skip-link patterns).
  • Per-defect-class recall/FPR (per_defect_class) in score_all output, the floors
    reports, the skeleton printer, and the leaderboard — mutated items paired with their
    clean twins per class. Confusion gains false_positive_rate.

Single measurement source (docs/SCORERS.md, delivered)

  • layoutlens>=2.0.0 is now a core dependency. uijudge.engine.wcag re-exports the
    contrast math from layoutlens.layout.contrast (the published WCAG example-pair tests
    still run against this repo's import path); only the mutation-planting helper
    pick_color_for_ratio stays local. The verifier keeps its own measurement JS by design
    (claims-checking stays independent of the item pipeline).

Pricing

  • Spend estimate regenerated from the exact v4 prompts, selected viewport, actual PNG
    dimensions where present, and reasoning-aware per-model completion budgets
    (reports/spend_estimate_2026-08-17.md plus adjacent JSON). Provider prices were
    re-verified 2026-08-16 for the pinned slugs (gemini-3-flash-preview $0.50/$3.00 —
    note the newer Gemini 3.6/3.7 Flash bill higher and are not what this slug runs;
    Qwen3-VL-235B $0.20/$0.88 unchanged).

Security and distribution

  • Updated the locked transitive cryptography dependency from 49.0.0 to 50.0.0,
    resolving high-severity CVE-2026-69247 (GHSA-g6cj-pr64-35w5).
  • Distribution scope for this pre-release is the GitHub release and the versioned
    Hugging Face dataset mirror. UIJudgeBench 0.2.0 is not published to PyPI; the complete
    benchmark includes repository-level corpus, labels, schemas, and reports that are not
    part of the Python wheel.