Revision history for JSON-Schema-Modern

0.611     2025-05-31 03:38:55Z
          - fix integer vs number distinction in draft4 for x.0 values. This
            comes at the expense of properly identifying other numbers as
            integers in draft4 instead of numbers, e.g. 2e1 as a json literal,
            as these all decode to Math::BigFloat objects.
          - some fixes to id/$id validity checks across all drafts

0.610     2025-05-16 20:58:28Z
          - evaluate() and evaluate_json_string() can no longer be called with
            a JSON::Schema::Modern::Document object; now you should only pass
            in the desired URI directly (or the raw schema), as before.
          - fixed some issues when evaluating a schema that had a base URI
            added to it after the document was created, including selecting
            the proper base URI to use in error messages when there are
            multiple choices

0.609     2025-04-20 23:40:09Z
          - validate_schema() (and the json-schema-eval --validate-schema
            option) now detect more errors

0.608     2025-04-11 20:57:16Z
          - documentation now makes a note of the special licence for JSON
            Schema schema files
          - documentation fixes for JSM and JSM::Document regarding handling
            of uris
          - introduction of 'original_uri' for JSON::Schema::Modern::Document,
            which document subclasses may wish to use for logic of their own
            after changing the canonical uri of the document

0.607     2025-04-01 19:35:50Z
          - now performing stricter email address validation for the 'email' and
            'idn-email' formats
          - some improvements to the handling of unimplemented formats (only
            missing core formats are checked for at traverse time; custom
            formats can be added at any time and errors can be avoided with
            'short-circuit')

0.606     2025-03-23 00:16:35Z
          - bump required version for optional module Data::Validate::Domain
            (used by the 'hostname' and 'idn-hostname' formats)

0.605     2025-03-09 16:31:05Z
          - update 'hostname' and 'idn-hostname' format validation to be more
            lax with respect to domain names; fixes some acceptance tests

0.604     2025-03-08 23:23:05Z
          - mark some failing format tests as todo that will be added in
            Test::JSON::Schema::Acceptance 1.028

0.603     2025-02-28 23:35:43Z
          - fix Sereal serialization hooks
          - various performance improvements when dealing with base URIs

0.602     2025-02-21 00:11:32Z
          - more checks at traverse and evaluation time for inconsistent
            results
          - fix Sereal deserialization hooks

0.601     2025-02-02 00:23:38Z
          - check for builtin::Backport at install time

0.600     2025-01-31 23:23:21Z
          BREAKING CHANGES: OpenAPI::Modern must be updated to 0.079 after
          installing this version.
          - the specification version can now be overridden when constructing
            Documents directly (rather than via the evaluator), if not
            specified by the "$schema" keyword
          - some fixes for $id handling in earlier drafts
          - rework of document management and URI resolution:
            $jsm->add_schema($uri, $schema) no longer sets the $uri in the
            document object, allowing the document to be added to the index
            under multiple URIs. Instead, we resolve the document's indexed
            resources against the base URI and only store the resolved form in
            the evaluator itself. This allows the same document to be reused
            with different base URIs if it only contains relative $ids
            internally.  add_document($uri, $document) now resolves all URI
            resources against the provided URI, rather than adding document
            resources as-is and adding $uri as one more resource URI.
          - further restructuring of internal resource indexes, anchor
            management, and traversal of subschemas from embedded non-JSON
            Schema documents (e.g. OpenAPI documents)

0.599     2025-01-26 22:54:02Z
          - the boolean overload in JSON::Schema::Modern::Result is now
            deprecated: it will warn on use, and will be removed no sooner
            than 2026-02-01.

0.598     2025-01-19 18:30:32Z
          - fix format acceptance tests that would fail when some optional
            modules are not installed
          - fix some acceptance tests that used the wrong validate_formats
            mode (since v0.592)

0.597     2024-12-07 23:30:38Z
          - report installed version of builtin

0.596     2024-11-24 00:57:13Z
          - properly handle changing of dialects (including swapping out
            vocabularies and keywords) when evaluating a local subschema
            (without a $ref)
          - now collecting identifiers within contentSchema keywords as we do
            for any other subschema

0.595     2024-11-07 18:57:16Z
          - bump required version of builtin::compat

0.594     2024-11-03 17:01:42Z
          - improved handling of numeric type checking in draft4
          - numeric type checking is relaxed, now allowing for dualvars
            arising from the simple case of using a number in string context
            or a string in numeric context (only a problem in perls <5.36)

0.593     2024-10-14 18:43:23Z
          - fix new integer type tests that fail on perls < 5.35.9

0.592     2024-10-13 19:43:20Z
          - support added for the draft4, draft6 specification versions

0.591     2024-10-06 21:06:15Z
          - new --dump-identifiers option in json-schema-eval executable
          - the document form of 'add_schema' has been extracted out into
            'add_document', with the old form deprecated
          - is_equal() utility function, and the const and enum keywords, now
            provide more detailed error diagnostics
          - fix "strict" mode for draft7 documents

0.590     2024-09-07 00:48:50Z
          - "strict" mode is now recognized by validate_schema(), to report on
            any unrecognized keywords used in the schema being validated

0.589     2024-07-06 21:07:44Z
          - skip unpassable tests when ivsize < 8

0.588     2024-06-28 17:14:22Z
          - bump required version of Math::BigInt for bdiv, bmod fixes

0.587     2024-06-26 22:55:11Z
          - fix multipleOf test that fails on some peculiar architectures
          - document the use of Sereal for caching large evaluator objects

0.586     2024-06-23 18:46:01Z
          - simplification of calculation for "multipleOf" keyword

0.585     2024-06-19 04:03:36Z
          - make use of core bool functionality where it exists (perl 5.36+)

0.584     2024-05-18 21:06:35Z
          - add 'get_entity_locations' helper sub to ::Document

0.583     2024-03-30 17:56:17Z
          - further optimization of error and annotation construction, which
            should significantly improve evaluation performance of large
            documents which heavily use the 'unevaluated*' keywords (such as a
            schema evaluated against its metaschema, or an OpenAPI document
            evaluated against its schema)

0.582     2024-01-23 03:18:31Z
          - change the status of some format tests that rely on optional
            modules so they are not reported as specification failures
          - fix forking test that failed on MSWin32

0.581     2024-01-18 05:35:16Z
          - make automated tests much quieter when some optional modules (e.g.
            used for format tests) are not installed

0.580     2024-01-18 04:38:33Z
          - update a format test to be more amenable to 32-bit architectures

0.579     2024-01-15 03:32:27Z
          - improve performance by checking for duplicates by comparing the
            checksum of a schema rather than the content itself
          - fix error occurring when using the FormatAssertion vocabulary in
            an evaluator object that was loaded from a serialized object
          - fixed custom format definitions to not allow 'integer' types, as
            per the specification
          - support custom format definitions that operate on more than one
            core data type
          - fixed handling of unrecognized formats in draft2020-12 and later
            (but only when the FormatAssertion vocabulary is explicitly
            requested, not with validate_formats=1)
          - the format keyword now respects the "stringy_numbers" option

0.578     2023-12-29 23:13:44Z
          - remove use of JSON::MaybeXS, to avoid potential use of JSON::XS;
            now we use Cpanel::JSON::XS or JSON::PP directly, using the same
            environment variables as in Mojo::JSON for customization.
          - new helper interface, get_document()

0.577     2023-12-19 05:27:04Z
          - new attribute on Error and Result objects: "recommended_response",
            for use when validating HTTP requests

0.576     2023-12-10 06:10:57Z
          - the "stringy_numbers" feature now also applies to the "enum",
            "const", and "uniqueItems" keywords

0.575     2023-11-26 05:11:10Z
          - properly handle some edge cases where the "$schema" keyword can
            change the dialect to a different specification version with
            different Core vocabulary keywords
          - evaluation at non-schema locations is now prohibited

0.574     2023-11-13 00:50:55Z
          - better detection of schema locations, for use by Document
            subclasses
          - fixed vocabulary ordering (from v0.567)
          - properly handle "$dynamicRef", "$recursiveRef" and "$schema"
            referencing a boolean schema
          - bundled metaschemas have been updated to their latest versions
            from https://json-schema.org

0.573     2023-10-21 23:49:03Z
          - fix construction of default values of some attributes e.g.
            media_types, encodings
          - fix list context of has_errors, error_count, annotation_count
            methods

0.572     2023-10-14 22:04:52Z
          - boost runtime performance by removing uses of MooX::HandlesVia

0.571     2023-09-17 01:14:47Z
          - removed duration and uuid formats for draft7 (they were not
            defined until the next spec version)
          - properly default format validation to true in draft7

0.570     2023-09-02 20:42:03Z
          - small performance improvements to 'date-time' and 'date' format
            validation
          - new stringy_numbers option, for validating numbers more loosely

0.569     2023-07-08 23:36:06Z
          - fixed some edge cases with ipv6 format validation

0.568     2023-06-17 07:16:54Z
          - add media-type support for application/x-ndjson and
            application/x-www-form-urlencoded

0.567     2023-06-03 22:11:23Z
          - vocabularies are now evaluated in a different order: Validation
            and Format vocabularies now come before Applicator, in order to
            allow faster short circuiting when errors are encountered.

0.566     2023-05-11 03:34:59Z
          - treat ambiguous types as a normal error, rather than an exception
            which may provide incorrect location data

0.565     2023-03-12 21:19:27Z
          - traverse and evaluate callbacks can now produce errors,
            which are incorporated into the overall evaluation results
          - fix bad handling of empty patterns in "pattern",
            "patternProperties" keywords

0.564     2023-03-04 00:43:42Z
          - further tweak performance by short-circuiting inside some
            subschemas (but not when annotations must be collected for
            "unevaluated" keywords)
          - added support for 'base64url' encoding

0.563     2023-02-04 23:38:13Z
          - documentation update: improve language around data types and
            JSON decoder recommendations

0.562     2023-01-22 00:49:07Z
          - bump a test prereq to fix a mismatched exception message

0.561     2023-01-07 20:57:37Z
          - further tweak performance by only collecting annotations when
            explicitly requested, or needed by the current evaluation scope

0.560     2022-12-20 20:00:05Z
          - fix a test that depended on optional prereqs

0.559     2022-12-16 04:29:55Z
          - fix regression where formats do not validate beyond a $ref (since
            v0.556)

0.558     2022-11-26 02:43:15Z
          - add fallback media type handling for text/*
          - performance is (hopefully) improved by delaying some calculations
            in annotations until they are needed

0.557     2022-10-30 21:59:04Z
          - improvements to processing of keywords in the Content vocabulary
            (contentEncoding, contentMediaType, contentSchema)
          - LICENSE now provided with bundled metaschema files

0.556     2022-09-18 22:41:50Z
          - some performance optimizations for schema traversal and evaluation

0.555     2022-09-10 21:43:11Z
          - the "iri-reference" format is now supported, sort of (all strings
            will be accepted as valid)
          - "enum" no longer incorrectly errors if elements are not unique
          - new experimental output format: "data_only", which encapsulates
            what is produced when a JSON::Schema::Modern::Result object is
            stringified

0.554     2022-07-24 00:08:54Z
          - use new Slurpy type in Types::Standard

0.553     2022-06-25 03:27:14Z
          - expanded on the documentation for serializing results.
          - updated IETF URI references from draft-bhutton-json-schema-00
            to draft-bhutton-json-schema-01, to reflect the updates to
            specification draft2020-12 (implementation updates have already
            been reflected in earlier releases, notably 0.548 and 0.550)

0.552     2022-05-03 03:31:59Z
          - fix result serialization from exceptions (broken in 0.550)

0.551     2022-05-01 01:29:51Z
          - the "specification_version" configuration option now accepts
            values without "draft" in the name, to facilitate a new naming
            convention used for future specification versions
          - new "formatted_annotations" option for JSON::Schema::Modern::Result,
            to allow for omitting annotations from result output

0.550     2022-04-14 04:32:32Z
          - added 'dump' method to Result, Error and Annotation objects, for
            easier debugging and generating test output
          - adjusted syntax checks for $vocabulary keyword to allow for
            bundled metaschemas
          - new validate_schema() method, for easily validating a schema
            against its metaschema

0.549     2022-03-22 03:55:15Z
          - properly detect the metaschema in json-schema-eval
            --validate-schema

0.548     2022-03-09 06:27:10Z
          - "annotate_unknown_keywords" option removed; behaviour is now on
            for draft2020-12 and off otherwise
          - annotation behaviour for applicator keywords is fixed per the
            spec, resulting in fewer redundant errors from unevaluatedItems,
            unevaluatedProperties keywords

0.547     2022-03-03 06:08:51Z
          - improved error stringification on document error

0.546     2022-02-23 01:33:03Z
          - avoid use of newly-experimental signature syntax on 5.35.9

0.545     2022-02-22 04:30:36Z
          - avoid new experimental warning on 5.35.9
          - skip unresolvable identifiers for future drafts in acceptance
            tests (added in TJSA 1.016)

0.544     2022-02-16 05:53:08Z
          - add_schema() now has more consistent exception handling

0.543     2022-02-11 04:11:55Z
          - now allowing runtime overriding of the "strict" configuration
          - add "effective_base_uri", for adjusting the locations of errors
            and annotations against a dynamic base

0.542     2022-01-23 08:17:08Z
          - new "strict" option (and --strict flag to json-schema-eval), for
            disallowing unknown keywords

0.541     2022-01-17 23:57:35Z
          - add --add-schema option to json-schema-eval to allow for the
            reference of additional schemas during evaluation

0.540     2022-01-17 18:58:36Z
          - make "unimplemented format" errors more visible
          - fixed serializing of results in acceptance tests
          - add --validate-schema option to json-schema-eval to provide an
            easy way to validate a schema against its meta-schema

0.539     2022-01-06 04:07:20Z
          - updated error message for the "type" keyword to include the actual
            type, as well as the expected type(s)

0.538     2021-12-31 21:18:21Z
          - remove no-longer-needed TODO in tests that caused warnings in
            small-int systems

0.537     2021-12-30 22:49:02Z
          - fix number/integer differentiation on small-int systems
          - improve division calculations if either argument is a non-integer

0.536     2021-12-30 05:32:44Z
          - very large/small numbers are now properly accomodated in all
            cases, including from JSON-serialized data

0.535     2021-12-28 06:38:37Z
          - mark more tests TODO (temporarily!) for small-int systems

0.534     2021-12-27 21:05:34Z
          - clarify exit statuses for 'json-schema-eval'
          - fix numeric tests for architectures with small int size
          - fix handling of unsigned ints that cannot be represented in a
            signed int

0.533     2021-12-23 19:45:11Z
          - fix exit statuses in json-schema-eval

0.532     2021-12-22 19:14:06Z
          - add media_type decoders for application/schema+json,
            application/schema-instance+json
          - add 'json-schema-eval' executable, for ad-hoc evaluation

0.531     2021-12-06 05:39:53Z
          - add method to add format implementations after construction
          - treat media_type names case-insensitively, as per RFC6838,
            and lookups support wildcards (get_media_type('text/plain')
            will match an entry for 'text/*' or '*/*')

0.530     2021-12-03 16:44:23Z
          - fix hash slice syntax that is not available before perl 5.28

0.529     2021-12-03 04:00:26Z
          - added FREEZE and THAW callbacks to assist with serialization

0.528     2021-11-30 06:17:29Z
          - evaluation callback sub signature has changed, to add $data
          - minor performance improvement during evaluation

0.527     2021-11-26 00:53:42Z
          - fixes to base64 and json decoders used in the Content vocabulary

0.526     2021-11-23 05:11:46Z
          - fix evaluate() callbacks for keywords that have no
            runtime-specific actions
          - optional support for contentEncoding, contentMediaType and
            contentSchema with the validate_content_schemas option and
            "encoding", "media_type" handler registries
          - a boolean flag "unknown" has been added to Annotation objects to
            indicate they correspond to an unknown keyword in the schema

0.525     2021-11-17 05:35:24Z
          - minimum Perl version raised to 5.20
          - dropped bundling hyper-schema files, as they are not validatable
            without vocabulary support (see issue #44)
          - & overload added to JSON::Schema::Modern::Result, for combining
            results
          - add callbacks to evaluate(), to enable finding certain positions
            of interest in a document or schema

0.524     2021-11-10 04:36:49Z
          - some refactoring of vocabulary and document methods, to faciliate
            re-use
          - new utility functions: is_uri_reference, assert_keyword_exists
          - allow specifying the metaschema_uri for a schema document
          - add "validate" method to Document object
          - updated draft2019-09 and added draft2020-12 hyperschema schemas

0.523     2021-10-24 05:58:27Z
          - fix tests that were relying on an optional prereq
          - properly gate experimental features by version

0.522     2021-10-22 22:26:29Z
          - 'date-time' format now properly handles leap seconds

0.521     2021-10-04 05:36:10Z
          - fix issues when referencing a schema in a metaschema:
            whose vocabulary is not known, but its keywords can still be
            validated, or which does not use the $vocabulary keyword at all

0.520     2021-09-27 05:56:11Z
          - support arbitrary metaschemas in the "$schema" keyword
          - support custom vocabulary classes, for use in metaschemas that use
            the "$vocabulary" keyword

0.519     2021-09-21 03:56:13Z
          - fix tests that were relying on an optional prereq

0.518     2021-09-18 22:00:42Z
          - skip some regex tests when Unicode library is too old for those
            character classes being tested
          - specification versions can now change, via the $schema keyword,
            within schema resources in a single document or via $ref to another
            resource

0.517     2021-08-28 04:34:17Z
          - restore some optional modules used for format validation to the
            prereq list that were mistakenly dropped in version 0.515
          - date-time, date and time formats no longer match non-ascii digits

0.516     2021-08-14 19:53:16Z
          - fix email format tests on older prereqs
          - avoid errors when enabling validate_formats before evaluating but
            after loading a schema

0.515     2021-08-03 04:07:02Z
          - no longer calling a keyword's callback during traverse() if that
            keyword has an error
          - better handling of blessed data types and other references
          - new config option scalarref_booleans, which will treat \0, \1 in
            data as json booleans
          - support for the most recent specification version, draft2020-12

0.514     2021-07-22 05:17:08Z
          - add_schema() now dies with the errors themselves, rather than an
            object that serializes to an unhelpful value in uncaught die()s.

0.513     2021-06-26 19:45:51Z
          - skip acceptance test for integer overflow when nvsize is too
            large to produce the expected error
          - support for specification version draft7, through the "$schema"
            keyword and the new 'specification_version' constructor option

0.512     2021-06-09 02:29:23Z
          - distribution has been renamed from JSON-Schema-Draft201909 to
            JSON-Schema-Modern. JSON::Schema::Draft201909 lives on as a
            compatibility wrapper.

0.028     2021-06-08 02:48:07Z
          - fix validation regex for the $anchor keyword
          - unevaluatedItems and unevaluatedProperties keywords are now
            applied after all other keywords in the applicator vocabulary
            (true/false results are not affected, but the order of annotations
            and errors will change)
          - calculate the canonical uri correctly after navigating a $ref:
            using the closest resource identifier to the destination, not the
            one that was used in the $ref

0.027     2021-05-15 18:13:21Z
          - fixed error strings used for failing "dependentRequired"
          - in terse output format, do not discard non-summary errors from
            schema-form of items
          - keywords in the applicator vocabulary are now applied before the
            keywords in the validation vocabulary (true/false results are not
            affected, but the order of annotations and errors will change)
          - improved validation of the "date-time", "date" and "time" formats

0.026     2021-04-08 20:13:27Z
          - fix scoping of annotations from uncle keywords (siblings of the
            schema's parent) that were improperly visible to unevaluatedItems,
            unevaluatedProperties
          - 'result' attribute in JSON::Schema::Draft201909::Result has been
            renamed to 'valid', to better match what it represents (a boolean)

0.025     2021-03-30 05:36:14Z
          - minor changes to error strings to distinguish between issues that
            can be determined from static inspection of schema(s), and those
            that only arise during runtime evaluation (such as URIs that
            map to missing schema documents, or inconsistent configuration
            values).
          - more validity checks at traversal time of $ref, $schema,
            $vocabulary values
          - update ipv4 format validation to reject leading zeroes in octets,
            helping avoid a newly-discovered vulnerability in netmasks

0.024     2021-03-23 21:53:42Z
          - the default value for "validate_formats" is once again false (it
            became true in v0.020), to properly conform to the specification

0.023     2021-02-21 18:36:32Z
          - fix "try/catch is experimental" warnings in perl 5.33.7

0.022     2021-02-07 17:33:14Z
          - fix erroneous use of postfix dereference (closes #42).

0.021     2021-02-06 18:50:42Z
          - [Pp]roperties$ keywords now always produce annotations when
            evaluating successfully, even if there were no matching properties
          - added the "strict_basic" output format, for strict (but incorrect)
            adherence to the draft 2019-09 specification

0.020     2021-01-02 17:12:09Z
          - the default value for "validate_formats" is now true, to reflect
            the most typical usecase.
          - gracefully handle the erroneous schema { "type": null }
          - fixes to relative-json-pointer format validation
          - new "annotate_unknown_keywords" config option

0.019     2020-12-08 18:40:10Z
          - further improvements to the "terse" output format
          - add_schema will now die with a Result object rather than a
            listref of Error objects, when the document contains errors.

0.018     2020-12-07 18:22:07Z
          - now can correctly evaluate schemas containing unevaluatedItems,
            unevaluatedProperties keywords without the user having to
            explicitly set collect_annotations => 1 in the constructor
          - fix error in "terse" output formatting that mistakenly dropped
            some unevaluatedProperties errors

0.017     2020-11-24 19:15:18Z
          - refactor keyword implementations into separate vocabulary classes,
            to faciliate future support for custom vocabularies
          - traverse the schema before evaluation, for more correct
            and complete extraction of identifiers and invalid syntax
          - add callbacks to traverse(), to easily find keywords of interest

0.016     2020-11-18 18:18:40Z
          - further fixes to infinite loop detection
          - fix dereference error when evaluating "definitions",
            "dependencies"
          - when adding two schema documents with no canonical uri, preserve
            knowledge of other identifiers found in the first document
          - add_schema() no longer adds additional URIs to the document
            object, only the evaluator

0.015     2020-10-20 03:08:36Z
          - fixed infinity/overflow checks for older perls

0.014     2020-10-16 19:21:17Z
          - ensure "enum" value is an array
          - do not evaluate non-arrays against "unevaluatedItems"
          - fix detection of bad $recursiveAnchor
          - fix canonical uri calculation for $schema, $recursiveAnchor, and
            infinite loop detection
          - for output_format=terse, do not omit the important errors for
            unevaluated* when annotation collection is disabled

0.013     2020-09-15 19:14:53Z
          - detect more cases of resource identifier collisions
          - fix resolution of relative $ids
          - new "terse" output format

0.012     2020-08-13 20:23:21Z
          - now using unicode semantics for pattern matching

0.011     2020-08-04 22:16:46Z
          - better normalization of uris in errors
          - now detecting infinite loops separately from deep traversal
          - optionally collect annotations
          - support for the "unevaluatedItems" and "unevaluatedProperties"
            keywords

0.010     2020-07-23 16:50:18Z
          - fixed error generation for validator keywords with numeric
            arguments (e.g. minimum, multipleOf)
          - new "get" method for fetching the schema found at a URI
          - improved "ipv6" format validation

0.009     2020-07-07 19:54:44Z
          - no longer allowing adding another schema document with a duplicate
            uri but different schema content (some collision checks were too
            lax).
          - fix behaviour of $recursiveRef without an $recursiveAnchor in the
            initial target scope

0.008     2020-06-22 04:24:06Z
          - fix bad syntax used in a test

0.007     2020-06-21 21:20:33Z
          - raise some inadequate prereq declarations
          - fix incorrect canonical uri when evaluating a (sub)schema using a
            non-canonical uri

0.006     2020-06-19 20:54:40Z
          - add support for evaluation against a uri
          - add "add_schema" interface for using additional schema documents
            within the implementation
          - support using the "format" keyword as an assertion, with the
            "validate_formats" option

0.005     2020-06-09 01:54:05Z
          - fix some edge cases with usage of $recursiveAnchor, $recursiveRef
          - fixed several issues with resource identification within schema
            documents

0.004     2020-06-02 19:14:32Z
          - add support for $recursiveAnchor and $recursiveRef
          - support use of "$ref":"https://json-schema.org/draft/2019-09/schema"
            by loading common metaschemas from a local cache

0.003     2020-05-31 20:10:02Z
          - add infinite recursion detection
          - process properties in sorted order, for consistent ordering of
            results
          - mark a numeric comparison test as TODO on 32-bit machines (see
            GHI #10)

0.002     2020-05-27 22:28:15Z
          - fix incorrect prereq needed for tests
          - add support for $id and $anchor in single schema documents

0.001     2020-05-21 15:51:00Z
          - Initial release [as JSON-Schema-Draft201909].
