Revision history for JSON-Schema-Fast

0.09    2026-08-17
        - Require File::Raw::JSON 0.07: earlier versions truncated a JSON
          integer wider than the running perl's IV, which failed the
          const "float and integers are equal up to 64-bit representation
          limits" conformance case on the 32-bit smokers.
        - Integer classification no longer casts an NV through an IV to
          decide whether it has a fractional part. 
        - t/55-no-mutation: skip the "not numified" assertion where the
          perl has no 64-bit integers, since the literal under test is
          already an NV before the validator sees it.

0.08    2026-08-16
        - Coercion now reaches enum and const. A string standing in for a
          number or a boolean compared in its raw domain, so a value could
          pass `type: integer` and then fail `enum: [0, 1]` on the string
          it still was. 

0.07    2026-08-12
        - Build : 0.06 does not build at all where the toolchain compiles 
          -flto to bitcode but does not link it 
        - Validation no longer mutates the value it is judging. SvNV on an
          integer caches the NV and turns NOK on, and although that changes
          no verdict it changes the value afterwards: an encoder that tests
          NOK before IOK then writes 1 as 1.0, so a caller who validates a
          document and then serialises it puts different bytes on the wire
          than the ones it was handed.
        - The interpreter now reads the flags a decoder set rather than
          forcing them (jsf__nv_of in include/jsf_types.h), at both sites
          that read a number: the numeric keyword block, and jsf_json_equal
          for const / enum / uniqueItems. The read order matches sv_2nv's
          own preference, so a value carrying both an IV and an NV still
          answers exactly what SvNV answered.
        - t/55-no-mutation.t covers every keyword that reads a number,
          values nested in objects and arrays, the failing path, floats and
          large integers.

0.06    Date/time
        - Build fix for perl 5.14 through 5.20: U64 is behind #ifdef PERL_CORE
          until 5.22
        - Arena allocations take their alignment from the type instead of a
          hardcoded 8. jsf_node_t holds five NVs, and on a perl built
          -Duselongdouble or -Dusequadmath an NV is 16-byte aligned, so every
          node was landing on an odd 8-byte boundary. 
        - SPAGAIN after the require in the Fetch and File::Raw::JSON ABI
          resolvers. Both captured SP, ran arbitrary Perl, then PUSHMARKed and
          PUTBACKed through the stale pointer; if the require had grown the
          value stack, that pointer was into the freed block.

0.05    2026-08-04
        - Consume Fetch's and File::Raw::JSON's C ABIs through ExtUtils::Depends
        - Also an ExtUtils::Depends provider now
        - JSON schema text (and fetched remote documents) are now decoded via
          File::Raw::JSON's C ABI (frj_abi.h) rather than a per-call Perl call
          to file_json_decode.

0.04	2026-08-04
	Become 100% conformance with json schema 2020-12 
	- Full URI reference model: $id opens base-URI scopes, $anchor registers
	  named locations, and $ref resolves against the base URI 
	- Remote / cross-document $ref: compile(..., resolver => sub { $uri -> $doc })
	  lazily fetches and parses referenced documents into the same arena.
	- unevaluatedProperties / unevaluatedItems: a per-schema evaluated set
	  annotation, collected from a schema's keywords and its in place applicators
	- $dynamicRef / $dynamicAnchor
	- $vocabulary / $schema
	- Default remote resolution: a $ref/$dynamicRef to an http(s) document with
	  no resolver is fetched through Fetch's C ABI 
	- Provide a C ABI (include/jsf_abi.h) so other XS modules - e.g. an OpenAPI
	  layer - can compile a schema once and validate per request entirely in C

0.02	2026-08-03
	Propagate defaults into callers params when apply_defaults is true as it's more usefull.

0.01    2026-08-03
	First version
