Revision history for OpenAPI-Modern

0.133     2026-04-07 18:37:11Z
          - OpenAPI::Modern constructor now supports passing along arbitrary
            configuration options to the JSON::Schema::Modern constructor
          - message validation now also saves all deserialized data to the
            result object, optionally with missing values populated from
            "default" keywords (when "with_defaults" is set in the evaluator
            object)

0.132     2026-03-29 19:14:44Z
          - full support for parsing of "query" parameters: form,
            spaceDelimited, pipeDelimited and deepObject styles, as well as
            parsing into arrays and objects
          - full support for parsing of the Cookie header via "cookie"
            parameters: form and cookie styles and media-type-encoded content,
            as well as parsing into arrays and objects

0.131     2026-03-23 16:41:59Z
          - fix handling of zero-length path parameters using the default
            style when no schema is provided

0.130     2026-03-08 23:12:28Z
          - type inference calculations are now cached on the document object,
            for faster runtime performance

0.129     2026-03-01 18:52:33Z
          - support "defaultMapping" in the 3.2.0 discriminator object

0.128     2026-02-21 23:11:29Z
          - header parameters now support utf8-encoded values
          - updated bundled schemas for OAS versions 3.1, 3.2 to their latest
            published versions

0.127     2026-02-09 19:01:59Z
          - fix bad parsing of server object in link object

0.126     2026-01-31 01:04:02Z
          - recursive_get() now preserves summary, description fields from the
            original object when following $refs

0.125     2026-01-27 00:00:08Z
          - fix stringification bug on older perls from last release

0.124     2026-01-26 22:23:44Z
          - BREAKING CHANGE: "path_captures" in find_path_item and
            validate_request is no longer percent-decoded
          - full support for parsing of "path" parameters: simple, matrix and
            label styles, as well as parsing into arrays and objects

0.123     2026-01-21 22:53:30Z
          - more scenarios are supported in OAD 3.0 -> 3.[1,2] upgrade

0.122     2026-01-19 01:30:30Z
          - fix bug with number <-> string coercion on older perls

0.121     2026-01-18 01:00:15Z
          - type coercion for parameter data is now more
            specification-compliant, using the schema to infer the intended
            type for base types, object properties and array items

0.120     2026-01-06 20:00:01Z
          - now checking for references that target an unknown or incorrect
            location when OpenAPI documents are parsed

0.119     2025-12-29 04:53:44Z
          - fix bad implementation of "$ref" in v3.0 OADs

0.118     2025-12-25 00:35:04Z
          - also identify missing "minimum" and "maximum" keywords when
            validating schemas in v3.0 OADs
          - add ability to upgrade OpenAPI documents to a newer version
            (available via "openapi-validate --upgrade")

0.117     2025-12-17 19:03:12Z
          - more improvements to "with_defaults" handling

0.116     2025-12-16 23:36:39Z
          - the converted response object is now added to the optional hashref
            used in validate_response()
          - fix usage of --with-defaults in "openapi-validate'

0.115     2025-12-14 20:15:30Z
          - drop the --document argument in "openapi-validate" in favour of
            @ARGV
          - added --with-defaults option to "openapi-validate" script

0.114     2025-12-09 22:34:18Z
          - support added for parsing and validation of Dancer2 request and
            response objects

0.113     2025-12-08 19:38:14Z
          - now fully supporting the use of v3.0.x documents in request and
            response validation, as well as document validation

0.112     2025-12-07 07:05:36Z
          - fix tests that changed their output with JSON::Schema::Modern
            0.628

0.111     2025-12-04 01:23:20Z
          - now also allowing validation of v3.0.x documents

0.110     2025-12-03 23:53:53Z
          - new command line script "openapi-validate", to validate OpenAPI
            descriptions (one or more files)

0.109     2025-11-29 00:46:37Z
          - the OpenAPI 3.0 schema is now available to be used via
          load_cached_document() in JSON::Schema::Modern::Utilities,
          when OpenAPI::Modern::Utilities is loaded

0.108     2025-11-25 18:03:38Z
          - fixed error in type detection in parameter schemas (thanks, Robin
            Murray!)

0.107     2025-11-23 18:56:54Z
          - efficiency improvements in validate_response() when provided with
            an operationId for lookup
          - prereq bump on Test2::Warnings for an import fix

0.106     2025-11-19 20:28:01Z
          - fix invalid restriction on trailing '/' in server urls (added in
            v0.086)

0.105     2025-11-03 20:04:48Z
          - improved specification compliance when matching URIs to path
            patterns and server url patterns

0.104     2025-10-29 17:54:47Z
          - support added for tagged operations (tag heirarchies are new in
            OpenAPI 3.2)

0.103     2025-10-26 19:14:30Z
          - find_path() has been renamed to find_path_item() (with a
            backcompat alias), and now accepts lookup using just an HTTP
            request URI and method alone, rather than a complete request
            object

0.102     2025-10-21 21:33:40Z
          - support added for additional HTTP methods, new in OpenAPI 3.2

0.101     2025-10-19 20:09:38Z
          - support added for "in: querystring" in parameter descriptions, new
            in OpenAPI 3.2

0.100     2025-10-15 19:38:38Z
          - support added for OpenAPI v3.2 documents!
            See https://github.com/OAI/OpenAPI-Specification/releases/tag/3.2.0
            for what is new or changed.

0.099     2025-10-13 19:44:43Z
          - fixed bug: properly support operation_id = '0'

0.098     2025-10-09 21:01:35Z
          - fixed bug: we no longer assume that a /paths entry can be inferred
            from an operation_id alone

0.097     2025-09-28 22:30:37Z
          - various internal changes to adjust for changes in
            JSON::Schema::Modern 0.619

0.096     2025-09-19 17:17:20Z
          - potentially-breaking change: "method" in the options hash is
            now treated case-sensitively when matching to an HTTP request (the
            entry in the OpenAPI document itself is still lower-cased), and
            also preserves the case when it is returned.
          - updated bundled schemas to their latest published versions

0.095     2025-09-11 03:38:53Z
          - updated bundled schemas to their latest published versions

0.094     2025-09-08 19:05:29Z
          - fix redefinition warning in tests

0.093     2025-09-07 20:32:18Z
          - fix error in tests exposed by JSON::Schema::Modern 0.618

0.092     2025-09-03 22:49:24Z
          - removed the 'json_schema_dialect' constructor argument for
            JSON::Schema::Modern::Document::OpenAPI (use jsonSchemaDialect in
            the document instead)
          - the 'openapi_uri' constructor argument for OpenAPI::Modern is no
            longer required, as it can be calculated from the JSMDO default

0.091     2025-08-16 20:52:35Z
          - various internal changes to adjust for changes in
            JSON::Schema::Modern 0.617

0.090     2025-08-04 00:57:05Z
          - update bundled schemas to their latest versions

0.089     2025-07-31 21:03:29Z
          - internal changes to JSON::Schema::Modern::Document::OpenAPI with
            how the evaluator object is stored and tracked

0.088     2025-07-19 17:09:08Z
          - better type inference for serialized parameters (also looks inside
            the "allOf" keyword, respects keywords adjacent to "$ref", and now
            infers null and boolean data using the "type" keyword)

0.087     2025-06-17 21:01:06Z
          - various fixes to instance and keyword locations in some errors
            when validating requests and responses
          - full support for "server urls" when matching URIs against
            path-items

0.086     2025-06-15 22:58:48Z
          - allow for "x-*" properties in /paths/*
          - "debug" option added to OpenAPI::Modern

0.085     2025-04-22 17:42:36Z
          - no longer resolving error, annotation locations against scheme or
            host from the HTTP request/response

0.084     2025-04-11 21:10:20Z
          - no longer require the user to define a custom metaschema when
            changing jsonSchemaDialect (we dynamically create one for you)
          - pre-emptive support for '$self' property in the OpenAPI document
            (to be officially added in v3.2)

0.083     2025-02-28 23:48:29Z
          - fix Sereal serialization and deserialization hooks
          - operation_uri is now resolved against the document uri and request
            uri, just like error locations are

0.082     2025-02-11 02:51:02Z
          - bump a prereq to work around a mysterious XS bug (RT#159140)

0.081     2025-02-08 19:12:50Z
          - fix a prereq declaration

0.080     2025-02-07 06:24:48Z
          - fix incorrect discriminator test, that was added for a change
            reverted before the OpenAPI v3.1.1 release
          - fix incorrect traversal semantics that new checks in
            JSON::Schema::Modern 0.602 would surface
          - fix a prerequisite declaration for a required HTTP method

0.079     2025-01-31 23:33:40Z
          - fix use of error modes for changes in JSON::Schema::Modern 0.600
          - fix use of document traversal for changes in JSON::Schema::Modern
            0.600

0.078     2025-01-27 05:41:19Z
          - remove use of prototypes combined with signatures (unstable on
            perls 5.22 through 5.26)

0.077     2025-01-26 21:05:06Z
          - fix usage of JSON::Schema::Modern::Result objects, in preparation
            for an upcoming deprecation of boolean overloads

0.076     2024-12-27 22:25:32Z
          - now supporting $refs in path-item objects (e.g. those under
            /paths/<path template>)

0.075     2024-12-22 19:51:49Z
          - now using metaschemas published for OpenAPI 3.1.1 in November 2024.

0.074     2024-12-14 18:07:54Z
          - some adjustments to error messages and locations when matching a
            provided request uri against /paths/* entries in an openapi document

0.073     2024-11-02 23:33:29Z
          - fix test that would break with the latest JSON::Schema::Modern (0.594)

0.072     2024-10-24 16:36:44Z
          - fix module loading, for downstream dependencies (broken in 0.071)

0.071     2024-10-20 23:18:32Z
          - fix tests that changed their output with JSON::Schema::Modern 0.592

0.070     2024-10-07 20:57:24Z
          - fix use of document traversal for changes in JSON::Schema::Modern 0.591

0.069     2024-09-28 23:34:35Z
          - adjust for changes in JSON::Schema::Modern 0.591 (which deprecate
            a form of "add_schema")

0.068     2024-09-14 23:35:47Z
          - path-item+operation lookup can now be performed by operation_id
            alone (a valid usecase for response validation)

0.067     2024-07-27 23:55:46Z
          - fix path template regex to allow for [/?#] characters in capture
            names

0.066     2024-07-13 23:27:00Z
          - now preserving the numeric/string type of any path capture values
            passed in via the $options hash, while still evaluating path
            parameter values as both strings and numbers

0.065     2024-05-25 23:56:08Z
          - BREAKING CHANGE: path_item_uri is dropped from the populated
            $options hash in validate_request, validate_response, and
            find_path, and replaced with operation_uri (note that the
            path-item uri is always one level up)
          - add support for "allowEmptyValue" option in query parameter
            descriptions

0.064     2024-05-07 00:14:00Z
          - fix: requests with an empty URI path (e.g. "https://example.com?foo=1")
            now matches path "/".
          - fix: preserve all headers of the same name when validating a
            Plack::Response object
          - support added for validation of Catalyst::Request and
            Catalyst::Response objects

0.063     2024-04-27 22:26:47Z
          - the url scheme of absoluteKeywordLocations in errors is now taken
            from the incoming request, rather than always being "https"
          - fix matching of request uri against path templates so that
            all characters are matched literally, not treated as regexes

0.062     2024-04-21 18:11:43Z
          - BREAKING CHANGE: operation_path is dropped from the populated
            $options hash in validate_request, validate_response, and
            find_path, and replaced with path_item_uri (note this changed
            again to operation_uri in v0.065)
          - "servers" entries are now allowed in openapi documents, but they
            are not yet considered when matching URIs to paths

0.061     2024-04-01 05:33:15Z
          - fixed incompatibility with an internal change in
            JSON::Schema::Modern 0.583

0.060     2024-03-20 20:56:37Z
          - 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.

0.059     2024-02-10 02:29:14Z
          - now being more strict on conversions from LWP and Plack
            requests/responses to Mojolicious types

0.058     2024-01-18 04:37:30Z
          - bump internal version requirement for Math::BigInt

0.057     2024-01-15 18:36:19Z
          - fix OAS vocabulary definitions for changes in JSON::Schema::Modern
            0.579

0.056     2023-12-31 17:26:55Z
          - bump optional dependency on HTTP::Headers::Fast for a psgi
            interface (GH#70)

0.055     2023-12-31 06:21:46Z
          - fix incompatibility with JSON::Schema::Modern 0.578

0.054     2023-12-20 19:41:20Z
          - now making use of "recommended_response" in JSON::Schema::Modern to
            recommend an HTTP response code and message to use after certain
            request validation failures

0.053     2023-12-13 05:01:33Z
          - no longer improperly reporting 4xx response errors as validation
            failures when message has actually been transmitted

0.052     2023-11-26 23:48:32Z
          - "recursive_get" now optionally takes a target entity type
          - support added for validation of Plack::Request and Plack::Response
            objects

0.051     2023-11-13 01:02:33Z
          - Content-Length checking is now more properly consistent with
            RFC9112; some users of HTTP::Request and ::Response objects may
            need to make adjustments in their tests to be compliant
          - track all subschema locations, not just schema roots, for better
            $ref verification

0.050     2023-11-06 03:10:15Z
          - fix construction of an OpenAPI::Modern object with a
            pre-constructed JSON::Schema::Modern::Document::OpenAPI object
          - "recursive_get" moved from JSON::Schema::Modern::Document::OpenAPI
            to OpenAPI::Modern
          - when validating header strings against a string schema, no longer
            parse out internal whitespace surrounding commas (to use RFC9112
            semantics, validate as an array).

0.049     2023-10-29 01:01:38Z
          - fix "recursive_get" to take a uri-reference, rather than a json
            pointer
          - fix some "discriminator" tests that fail with JSON::Schema::Modern
            0.574, and some inconsistencies with the spec

0.048     2023-10-04 05:34:44Z
          - now validating all headers of a given name, not just the first,
            when provided on the request/response as separate lines
          - multiple headers of the same name can be validated as an array or
            object as per deserialization rules in the OpenAPI v3.1
            specification.

0.047     2023-09-19 04:29:16Z
          - strings are now treated as numbers without requiring the "type"
            keyword, and only from parameters, not message bodies, and only
            when no media type is provided
          - new "recursive_get" method on
            JSON::Schema::Modern::Document::OpenAPI for fetching a
            specification at a json pointer and following any $refs
            (note this interface has changed in 0.049 and 0.050)

0.046     2023-06-24 21:56:39Z
          - extra validation for Transfer-Encoding response header

0.045     2023-06-06 04:15:18Z
          - fix test for changes in JSON::Schema::Modern 0.567
          - now ensuring that $ref locations are to the correct entity type

0.044     2023-05-23 02:08:54Z
          - revert changes to YAML parsing in 0.043, pending fixes to YAML::XS

0.043     2023-05-11 04:36:24Z
          - properly detect, and fail early, on badly-parsed request or
            response objects

0.042     2023-04-08 21:22:13Z
          - improvements to some errors resulting from parsing an invalid
            OpenAPI document

0.041     2023-03-13 02:47:59Z
          - now detecting and erroring on two /paths with the same template
            semantics
          - handle new callback behaviour in JSON::Schema::Modern 0.565

0.040     2023-02-18 23:43:50Z
          - all request and response validation are now done with
            Mojo::Message::Request and ::Response objects, converting from
            HTTP::Request and HTTP::Response as needed; the $options hash is
            now populated with the mojo request

0.039     2023-02-11 23:23:17Z
          - BREAKING CHANGE: find_path now takes one argument, not two; the
            $request object is now passed with the $options hash.
          - the $options hash populated by validate_request, validate_response
            and find_path now includes the request object, when available

0.038     2023-01-15 18:51:02Z
          - fix vocabulary tests with TJSA 1.018
          - fix test for compatibility with JSM 0.561

0.037     2022-11-27 23:57:29Z
          - added operation_path to the options hash returned from find_path,
            validate_request, validate_response

0.036     2022-11-19 22:30:06Z
          - fix some media-type test cases to accomodate changes in
            JSON::Schema::Modern 0.558

0.035     2022-11-12 20:53:54Z
          - fixes to media-type parsing: correctly ignore any charset included
            with non-text Content-Types, and always interpret application/json
            as charset=utf-8 as per RFC8259 §11

0.034     2022-10-15 20:15:34Z
          - removed validation of readOnly properties in request bodies and
            writeOnly values in response bodies
          - bundled OAS v3.1 schemas have been updated to the 2022-10-07
            edition

0.033     2022-09-18 23:10:04Z
          - bump dependency on JSON::Schema::Modern, to pick up changes to
            error output when an openapi document is invalid

0.032     2022-08-13 23:17:31Z
          - error when a uri path specification contains duplicate capture
            names

0.031     2022-06-01 03:59:14Z
          - fix error when request or response body schema is empty (since
            v0.028)
          - use a custom error message with false schemas (to indicate the
            entire entity is forbidden)

0.030     2022-05-26 05:17:26Z
          - prohibit request bodies for HEAD and GET request unless
            requestBody explicitly specified, as this is a smuggling vector

0.029     2022-05-16 04:20:20Z
          - fix missing prereq for result serialization tests

0.028     2022-05-14 21:11:50Z
          - now only checking for readOnly values in request bodies and
            writeOnly values in response bodies (not path
            parameters/headers/query parameters).

0.027     2022-05-01 01:41:48Z
          - permit the use of unevaluatedProperties, unevaluatedItems in
            openapi subschemas, and collect annotations into the evaluation
            result
          - now checking for readOnly values in requests and writeOnly values
            in responses

0.026     2022-04-23 16:48:26Z
          - fix installation of sharedir files when fallback installers
            (ExtUtils::MakeMaker or Module::Build) are used

0.025     2022-04-03 19:58:27Z
          - find_path no longer returns an undef operation_id when there is
            no operationId defined in the schema document

0.024     2022-03-25 23:41:04Z
          - operation_id and method are now always returned in the options
            hash in validate_request, validate_response, find_path

0.023     2022-03-12 00:25:21Z
          - get_operationId has been renamed to get_operationId_path
          - updated bundled schemas from 2021-09-28 versions to 2022-02-27

0.022     2022-02-16 06:00:37Z
          - construction with an invalid document is handled more nicely
          - added new dialect schema share/strict-schema.json to the list of
            available schemas, which prohibits unrecognized keywords
          - added custom LICENSE to schema files copied from
            github.com/OAI/OpenAPI-Specification
          - distribution is renamed from JSON-Schema-Modern-Document-OpenAPI
            to OpenAPI-Modern

0.021     2022-02-11 04:44:05Z
          - absolute locations in errors are now resolved against the
            request's Host header (reverted in v0.085)

0.020     2022-02-10 02:56:46Z
          - validation methods and find_path now also accept the HTTP request
            method as an option
          - the request object is no longer required as an argument to
            find_path
          - validate_request, validate_response now also support Mojolicious
            request and response objects

0.019     2022-01-23 08:17:30Z
          - some instanceLocations in errors from validate_request and
            validate_response have changed to be more specific regarding the
            source of the error
          - find_path is now a public method of OpenAPI::Modern, factored out
            of validate_request and validate_response to enable third-party
            callers to reuse information between these two method calls

0.018     2022-01-17 23:37:05Z
          - fix parsing of escaped characters in URI paths and capture values

0.017     2022-01-17 18:33:07Z
          - remove erroneous logic when checking the "discriminator" keyword
          - user-provided path_template, path_captures and operation_id are
            all verified against the request URI
          - path_template, operation_id and path_captures are no longer
            required arguments for validate_request, validate_response

0.016     2022-01-06 04:22:20Z
          - fix the prereq specification for YAML::PP

0.015     2021-12-31 21:17:11Z
          - load Math::BigInt before attempting to use it

0.014     2021-12-30 05:38:03Z
          - use bignums in JSON::Schema::Modern to properly support int32,
            int64 numeric formats

0.013     2021-12-22 19:23:30Z
          - support */* as a media-type in a content specification, to
            indicate valiation checks that can be performed on any content
            type (e.g. length)
          - add support for OAS-specific formats: int32, int64, float, double,
            password

0.012     2021-12-17 06:39:38Z
          - properly handle a missing Content-Length header alongside a
            non-zero-length body payload

0.011     2021-12-16 06:17:57Z
          - spurious validation errors fixed when request body is empty,
            yet not required

0.010     2021-12-11 23:11:43Z
          - OpenAPI metaschemas are now also available via URIs ending in
            .../latest
          - improved error messaging when a media-type or charset decoder fails
          - improved handling of HTTP headers

0.009     2021-12-06 05:55:01Z
          - validation no longer errors on a missing media type if the
            corresponding schema is empty (true)
          - validate_request and validate_response now accept an operation_id
            instead of a path_template for looking up the endpoint
            specification in the openapi document
          - treat Content-Type headers and media-type entries in openapi
            documents case-insensitively, and also match wildcards
            (image/jpg falls back to image/* or */*)

0.008     2021-12-03 05:33:29Z
          - process response headers in canonical order

0.007     2021-12-02 05:43:34Z
          - properly handle missing message bodies, with possibly a mising
            Content-Type header as well
          - better type handling for numeric strings and stringy numbers
          - detect and handle infinite recursion while evaluating

0.006     2021-12-01 05:22:01Z
          - support media type encodings in parameters

0.005     2021-11-30 06:22:10Z
          - performance improvements when loading and parsing documents
          - extract and cache all operationIds in the document

0.004     2021-11-28 22:09:01Z
          - implemented validate_response()
          - when validating requests and responses, values that look like
            numbers, and are evaluated as numbers in schemas, are now coerced
            to numbers automatically

0.003     2021-11-26 01:01:47Z
          - OpenAPI::Modern is born

0.002     2021-11-17 05:49:29Z
          - minimum Perl version raised to 5.20
          - embedded schemas are now traversed for resource URIs

0.001     2021-11-10 04:50:17Z
          - Initial release.
