0.37.0-M3 - Preflight exports, parseJson, and observability improvements

Date

    Orbital 0.37.0-M3 is the third milestone release of 0.37. We haven’t published release notes on 0.37.0-M1 or -M2, we’ll cover off those releases too.

    The headline features are a new parseJson() standard library function, the ability to export query history as Preflight test specs, and a significant improvement to observability — with request parameters now captured on every remote call across all connectors.

    There’s also a crop of reliability improvements: better git sync resilience, a fix for a stack overflow in the query engine, and an internal overhaul that removes a class of thread-pool starvation under concurrent load.

    As a milestone release, 0.37.0-M3 is intended for early adopters and teams that want to test ahead of the GA release. Feedback welcome.

    New Features

    parseJson() stdlib function

    Available since 0.37.0-M3

    You can now use parseJson() in your queries and projections to parse a JSON string into a typed value.

    This is useful when JSON arrives embedded in a field as a string — a common pattern in event-driven systems where a message envelope wraps a serialized payload.

    Using parseJson()

    Schema (just the highlights)
    Play with this snippet by editing it here, or edit it on Taxi Playground
    Result
    Query failed

    Preflight test spec export

    Available since 0.37.0-M2

    Query history can now be exported as a Preflight test spec, in addition to the existing ZIP regression pack format.

    When downloading a regression pack from query history, you can now choose between Zip (the original format) and Preflight spec files.

    Preflight Spec Files are markdown files that describe a test scenario, along with all the information to stub out query services:

    ---
    spec-version: 0.1
    ---
     
    # Test name
     
    Optional description paragraph.
     
    ## Query
     
    ```taxiql
    find { Customer( CustomerId == "C-100" ) } as CustomerProfile
    ```
     
    ## Data Sources
     
    ### Customer API
    <!-- operation: getCustomer -->
     
    Response:
    ```json
    { "id": "C-100", "name": "Alice Smith", "age": 30 }
    ```
     
    ## Expected Result
     
    ```json
    { "id": "C-100", "name": "Alice Smith", "age": 30, "isAdult": true }
    ```

    By capturing these using the data from your queries, you can very quickly build test suites for your taxi projects.

    Preflight tests are runnable using Gradle, so works great with established build tooling and CI/CD.

    Observability

    Request parameters captured on trace events

    The capture of input parameters for events shown in the Trace View has been extended, capturing inputs across all connectors.

    JFR flight recorder

    Available since 0.37.0-M1

    Orbital now supports capturing Java Flight Recorder traces for capturing diagnostic data. This feature is disabled by default, but can be enabled through configuration

    0.37.0-M3 extends this to further capture exception data.

    Reliability & Performance

    Query engine: fix for circular operation types (ORB-1081)

    Available since 0.37.0-M2

    Fixed a bug where an operation whose return type also appeared as an input parameter type would trigger recursive parameter construction, ultimately causing a stack overflow. Type-level cycle detection is now applied during object building, so these circular type graphs are handled cleanly.

    Git sync failures are no longer fatal

    Available since 0.37.0-M3

    A git repository sync failure at startup is now treated as a warning rather than an error. If a locally-cached copy of the schema is available, Orbital will use it and continue running — reporting a WARNING state in the UI rather than refusing to start.

    The UI also now distinguishes between ERROR (schema could not be loaded at all) and WARNING (schema loaded from local cache), with separate alerts and colour-coded severity badges, so it’s clearer what’s actually happening.

    A rate limiter (via resilience4j) has also been introduced on git repository polling, to prevent remote git servers from denying requests when Orbital is polling frequently.

    Eliminated blocking calls from the query engine

    Available since 0.37.0-M1

    The internal TaxiQL query engine has been refactored to remove blocking calls. Under specific conditions, it was previously possible for the query engine to get into thread starvation, waiting for I/O calls to complete.

    By migrating the core query engine away from blocking, this removes the risk