Paste a JSON Schema contract and one or more JSON outputs an AI tool produced. Get a deterministic PASS/FAIL per output — exact violation, exact path — plus a canonical SHA-256 hash so you can tell "reformatted the same answer" apart from "quietly changed the answer" across reruns. Everything runs in your browser; nothing is sent anywhere; the same inputs always produce the same verdict, on this page or anyone else's copy of it.
no network callsno LLM judgedeterministicthird-party re-runnableworks offline
What this actually checks (read before trusting a verdict)
In scope
Structural conformance to a JSON Schema contract: type, required, properties, additionalProperties, patternProperties, items (incl. tuple form), enum, const, minimum/maximum/exclusiveMinimum/exclusiveMaximum/multipleOf, minLength/maxLength/pattern, minItems/maxItems/uniqueItems, allOf/anyOf/oneOf/not, local $ref into $defs/definitions.
Canonical form: object keys sorted, whitespace stripped, numbers via standard JS number-to-string — so two JSON blobs that mean the same thing hash the same, regardless of key order or spacing.
Cross-run consistency: among the candidates that pass, are they canonically identical (stable) or do they diverge (silent drift between calls)?
Not in scope / honest limits
This is a useful subset of JSON Schema (2020-12 flavoured), not the full spec — no $dynamicRef, no remote $ref, no if/then/else, no vocabulary extensions.
format (email / date-time / uri / uuid) is checked with plain best-effort regexes, not the RFC grammars — treat format failures as a hint, not a verdict.
It cannot tell you the JSON is true, only that it is shaped the way the contract said it would be. A model can satisfy the schema and still be wrong about the world.
Canonical-hash matching proves byte-for-byte structural equality after normalization — it is not a semantic/fuzzy "close enough" comparator.
✓ Self-test (runs automatically, on this page's own bundled example)
Running…
1 Contract (JSON Schema)
contract hash: —
2 Candidate outputs
One per box. Add every run you want compared — e.g. the same prompt called three times.
3 Results
↻ How to reproduce this verdict without this page
Validate each candidate JSON against the contract's JSON Schema keywords listed above, in any conformant validator, recording every violation as (path, message).
Canonicalize any JSON value v recursively: objects → {} with keys sorted ascending by UTF-16 code unit and re-emitted as "key":canon(value) joined by commas; arrays → [] with elements in original order; strings → standard JSON string escaping; numbers → the ECMAScript Number.prototype.toString() form (reject NaN/Infinity, normalize -0 to 0); true/false/null literally. No inserted whitespace anywhere.
UTF-8 encode the canonical string and take SHA-256, hex-encoded lowercase. That is the hash shown per candidate and for the contract itself.
Two candidates with the same hash are, by construction, the same JSON value — independent of formatting, spacing or key order. Two passing candidates with different hashes proved the AI's output actually changed between runs, not just its formatting.