---
changelog:
  category: Release
  version: logixlysia@6.11.0
date: '2026-10-30T16:12:40Z'
seo:
  description: >-
    The error line now carries error.cause for an error thrown with { cause },
    normalized the same way as the error itself and cut at three levels.
    HttpError…
title: logixlysia@6.11.0
type: changelog
---
## Minor Changes

- 6a63c83: The error line now carries `error.cause` for an error thrown with `{ cause }`, normalized the same way as the error itself and cut at three levels. `HttpError` accepts `cause` in its init object; like `internal`, it is logged and never serialized into the response.
- 0d64086: The OTLP and HyperDX adapters now set the log record's native `traceId`, `spanId` and `flags` from `context.trace_id`, `context.span_id` and `context.trace_flags`, so backends join logs to their traces; the attributes are kept too. `logixlysia/otel` gains `otelEnricher()`, so active-span ids can be attached through `config.enrichers` instead of a hand-written `onRequest` hook.

## Patch Changes

- ffd2a30: An awaited adapter `flush()` or `close()` now keeps the retry backoff timer alive, so a process whose only pending work is that call no longer exits in the middle of a retry and loses the batch. A background retry still lets the process exit. An error response body is now read to 1 KB at most instead of in full.
- 98b7487: `mergeAIMetrics` now keeps a running total per request: token counts, `msToFinish` and `calls` are summed across calls, and `model`, `provider` and `finishReason` keep the last call's values. Before, each call replaced the previous one on the access line.
- 7f2ce8d: A tail-sampling glob with more than two single `*` wildcards in one path segment is now rejected at startup, and path rules skip pathnames longer than 2048 characters, so a crafted URL can no longer pin the event loop in the matcher. `userAgentEnricher` parses at most the first 512 characters of the header.
- cf52f7b: Transports now receive the request URL without its query string unless `logQueryParams` is `true`, the same rule the console and file sinks already follow. Before, query parameters such as OAuth codes and signed-URL tokens reached every adapter even with the option off.
- 2a4d281: With `aot: false`, an error that a later `onError` hook maps to another status (for example 418 with a body) now logs that status and level, the same as the `aot: true` path. Before, the line carried the thrown error's own status, usually 500.
- 0ad5167: `withRedaction` no longer waits for the wrapped transport to send its batch before redacting the next record, so wrapping a batching adapter no longer caps throughput at one batch per round trip and no longer drops records as "queue full" during a slow send. `flush()` and `close()` still wait for every delivery that was handed over.
