Revision history for Open-API

0.04    2026-08-05
        - Public C ABI: include/oa_abi.h,
        - Open::API is now a provider as well as a consumer: it installs
          oa_abi.h through ExtUtils::Depends
        - t/25-abi.t drives the whole table in C (api_of -> route -> op_id ->
          validate) and proves it agrees with match / validate_request. It
          treats _abi_ptr as a raw pointer rather than a positive IV, since
          Solaris x86-64 maps shared objects high enough to set the sign bit.
        - Build fix for perl below 5.26: hv_deletes is 5.25.6
        - SPAGAIN after every require in the ABI resolvers (File::Raw::JSON,
          Fetch, JSON::Schema::Fast at BOOT, and the Open::API::UI wrap).
          Each captured SP

0.03    2026-08-05
        - The PSGI app moved into its own module, Open::API::Plack, replacing
          $api->to_app(%opts). 
        - Open::API::UI: a self-contained Swagger UI clone for the compiled
          spec. 
        - Framework contract for other adapters: $ui->routes returns static
          GET routes as PSGI-shaped triplets for Open::API::Catalyst and a
          future Open::API::Mojo to mount; $ui->to_app is a standalone
          PSGI app.

0.02    2026-08-04
        - Security: components.securitySchemes are now enforced. to_app takes a
          security => { scheme => checker } map
        - Open::API::Client attaches credentials to match: security => { scheme
          => credential } sends apiKey / bearer / basic automatically, 
        - CSRF protection on to_app: an always-on Origin/Referer check on
          state-changing methods (GET/HEAD/OPTIONS/TRACE are exempt), plus an
          optional server-side single-use token via a check callback. The
          callback verifies against your own store, its return is stashed as
          $env->{'openapi.csrf'}, and returning a string rotates the token
          cookie for you.
        - Open::API::Client handles CSRF transparently with csrf => 1
        - Secure response headers on by default (X-Content-Type-Options,
          Content-Security-Policy, X-Frame-Options, Referrer-Policy)
        - CORS: the cors => {} option answers preflight OPTIONS and adds
          Access-Control-* headers to actual responses, with an origin
          allowlist, credentials, exposed headers and max-age. A wildcard
          origin with credentials is refused at to_app.
        - max_body_size => N rejects an over-large request body with 413.
        - Opt-in content negotiation (negotiate => 1): 415 for an undeclared
          request Content-Type, 406 when Accept admits no declared response
          type.
        - error_format => 'problem' emits RFC 7807 application/problem+json for
          the errors this layer generates.
        - examples/ - a runnable, login-based petstore showing authentication,
          CSRF and the transparent client together.

0.01    2026-08-04
        First version.

