Showcase
A fault is
two places at once.
One end is where the instance was, the other is the keyword that refused it. Everything on this page is drawn from real runs: the faults are computed by the compiled package as the page loads, and the threads are where those faults point.
The map
One thread per reason
Pick a case. Hover a reason to light its thread; the two nodes it joins are the two places the message is talking about.
schema
instance
The hard keyword
What was never evaluated
unevaluatedProperties is the one keyword that cannot be answered from the
schema alone. It asks what every other keyword — and every in-place applicator it reached —
has already looked at. A branch of allOf that validated hands its members over;
a branch that failed hands over nothing.
the run this diagram is drawn from
/email: no instance validates against false (schema at /unevaluatedProperties)
The keyword is schema and the message is about false, because the
schema in question is the boolean false — a schema that refuses everything.
Written as "unevaluatedProperties": { "type": "string" } the same position
would say not of type string instead.
unevaluated* keywords run last, on what is left. That is why they cannot be
written before the applicators they ask about.
Addressing
Where a reference points
A $ref is resolved against the base URI in effect — RFC 3986, the same rules a
browser follows for a relative link. Which means "money" does not mean a
key called money; it means a document beside this one.
/ is a JSON
Pointer into a document, and a document is only reachable when the caller has handed it
over.