01 — changelog

What shipped, including what broke

We list fixes alongside features. A changelog that only contains good news is marketing, not a changelog.

  1. v2.4.0

    • added
    • improved

    Low-tail duration flags and Rust SDK general availability

    Low-tail duration flags. Spans that complete unusually fast against their own history are now flagged the same way slow ones are. Empty retrievals, stale cache hits and silently-failing tool calls all present as suspiciously quick successes, and until now nothing surfaced them. On by default for retrieval and tool spans; configurable per span type in project settings.

    Rust SDK is generally available. Implemented as a tracing-subscriber layer, so existing spans in your application flow through without changes. Ships with the same redaction hook as the Python and TypeScript SDKs.

    Improved: trace search now matches on span attribute values, not just names. Queries against a 30-day window return in a median of 18ms, down from 240ms, after moving the attribute index off the hot path.

    Improved: the escalation buffer now reports its own occupancy on the ingest status page. We shipped this feature blind a quarter ago and have been mildly embarrassed about it since.

  2. v2.3.2

    • fixed

    Bedrock inference profile resolution

    Fixed: AWS Bedrock cross-region inference profiles were being recorded as the profile identifier rather than the model that actually served the request. Cost attribution for affected accounts was wrong — usually low, occasionally high — for any workload using profiles rather than direct model IDs.

    Traces ingested since 2026-05-02 have been re-costed and the corrected figures are live in usage reports. If your invoice was affected, we have already issued the adjustment; you do not need to contact us.

    Fixed: the TypeScript SDK’s edge runtime build was importing node:async_hooks unconditionally, breaking Cloudflare Workers deployments on cold start. Context propagation on edge runtimes now uses AsyncLocalStorage where available and falls back to explicit context passing where it is not.

    Fixed: eval runs scheduled at exactly midnight UTC could execute twice.

  3. v2.3.0

    • added
    • improved

    Evals in CI, and human-agreement scores on every rubric

    Evals on pull requests. A GitHub Action that runs your rubrics against a fixed trace set and fails the check when scores drop past a threshold you set. Same execution path as scheduled production evals, so a green check means the same thing in both places.

    Human-agreement scores. Every model-graded rubric now carries a published agreement number, computed from a labelled sample, and it is displayed next to every score that rubric produces. A 0.91 from a rubric with 0.62 agreement should not read like a 0.91 from one at 0.94, and now it does not.

    Added: decision span type, for recording branch points in your own code — the input the branch saw, the branch taken, and optionally the alternatives scored.

    Improved: partial traces are now explicitly labelled as partial, with the count of processes that dropped their spans before escalation. Previously they rendered as complete traces with gaps, which was misleading in exactly the situation where you least want to be misled.

  4. v2.2.0

    • added

    Per-tenant cost attribution and scheduled exports

    Per-tenant cost attribution. Attach a tenant identifier at the root span and every child inherits it. Cost is derived from token counts and the resolved model identifier, and breaks down by tenant, by span type and by time window without any per-call plumbing.

    Scheduled exports. Hourly Parquet drops of raw spans to an S3 or R2 bucket you own, with a schema we version and document. Your data leaves whenever you want it to, in a format you can query without us.

    Added: deterministic trace-ID hashing for sampling decisions. Raising your sample rate now strictly adds traces rather than reshuffling which ones are kept, so historical dashboards stay continuous across a rate change.

Subscribe to the feed.

Every release lands in the RSS feed the moment it ships.

curl -s https://cinder.dev/rss.xml
Open the feed

Or talk to an engineer — the same people who wrote the ingest path.