The report is the source of truth.

Ten web pages, built four ways, each measured against the designer's Figma frame. Every number below is what Fig emits — coverage (how much of the design is accounted for) and parity (how much of it lands within tolerance) — plus the hard parity_trustworthy gate. No self-assessment, no vibes.

Arms, ranked by average coverage

Komai Figma Make Builder Claude

Per-page scorecard

Every page × every arm. cov = coverage (match_score), par = parity within point-tolerance. The bar tracks coverage.

Why symmetric coverage

match_score is accounted nodes over all distinct nodes — design + app. It penalises both missing design elements and app-only extras, so you can't game it by adding junk.

Parity ≠ placement

Coverage says a node is present; parity says it's within tolerance of where the design put it. A page can be 100% covered and still fail parity — that's the signal your agent needs.

The gate is binary

parity_trustworthy is true only when the schema is valid, the visual gate passes, everything's within tolerance, and there are zero warnings. It's the one thing the loop stops on.