Revision history for Catalyst-Plugin-JSONRPC-Server

0.004     2026-07-19
          - Build the JSON parser with allow_nonref so a top-level JSON scalar
            (valid JSON per RFC 8259) decodes and is rejected as -32600 (Invalid
            Request), rather than throwing in the decoder and being misreported
            as -32700 (Parse error). Without it, backends that default
            allow_nonref off (JSON::XS, older JSON::PP/Cpanel::JSON::XS) failed
            t/dispatcher-errors.t "non-object request is invalid" on CPAN
            Testers.

0.003     2026-07-16
          - Genericise the perl_critic author test comment; no functional
            change.

0.002     unreleased
          - Version bump so consumers reliably install the current code over any
            0.001 already present in an environment (cpanm treats same-version as
            satisfied); no code change from the 0.001 line below.
          - Initial version: generic JSON-RPC 2.0 server plugin for Catalyst.
          - Fixed four dead internal POD links. L</name> does not resolve
            against a =head2 that carries its signature, because the generated
            anchor includes the arguments, so the links to
            jsonrpc_dispatch_with, encode and encode_safe all pointed at
            anchors that do not exist.
          - Added jsonrpc_dispatch_with($dispatcher, $body) for request-scoped
            dispatch against a caller-supplied Dispatcher; jsonrpc_dispatch now
            delegates to it.
          - jsonrpc_register/jsonrpc_dispatch now use a per-request dispatcher
            (cached on the context) instead of a persistent per-application one,
            so handlers can no longer leak across requests.
          - jsonrpc_dispatch_with takes an optional $empty_status (default 204)
            for the nothing-to-send case, so a transport requiring another code
            (e.g. MCP's 202 Accepted) can set it.
          - Dispatcher::encode_safe: never dies on a non-serializable handler
            result (degrades to -32603, per element).
          - Stricter JSON-RPC 2.0 validation: a structurally-invalid id-less
            request now returns -32600 (was silently dropped); a structured id
            is rejected; params:null is treated as no params.
          - Size limits: Dispatcher max_batch (default 1000) and the plugin's
            max_body_bytes config (default 10 MiB).
