Skip to content

v0.5.0

Choose a tag to compare

@mgurevin mgurevin released this 23 Jul 13:22
v0.5.0
3d97fae

[0.5.0] - 2026-07-23

Added

  • Add side-effect-free Config.Validate startup checks for contradictory TLS
    capture flags, unsupported algorithms and modes, missing protection
    providers, and malformed redaction or content-decoder registrations.
  • Add opt-in, context-aware hartest timing playback with scaling, a required
    per-exchange delay bound, response-header latency, and receive latency
    distributed across body reads.
  • Add bounded, all-or-nothing HAR and streaming NDJSON readers in the optional
    hario package, with structural validation and fuzz coverage.
  • Add bounded pull streams for processing large HAR and NDJSON captures one
    validated entry at a time without retaining prior entries.
  • Add the optional, network-free hartest fixture transport with strict
    method/URL/query/header/body/request-trailer matching, an isolated request
    normalizer for volatile values, ordered fixture consumption, embedded and
    external bodies, trailers, recorded failures, protected-value resolution,
    and secret-safe diagnostics.
  • Add lazy hartest.EntrySource replay so large HAR and NDJSON fixtures are
    pulled only as matching requires and consumed entries are released.
  • Add Inspector export of all, selected, or current-trace entries as HAR or
    NDJSON, preserving original protected values and reporting fixture readiness.
  • Add an explicitly dangerous Inspector export mode for values already resolved
    in memory, with plaintext-free risk summaries, .resolved filenames, source
    immutability, and two required handling acknowledgements.

Changed

  • Split SPDX inventories along distributable boundaries: the standalone
    Recorder module excludes documentation examples, otelrecorder has its own
    SBOM, and the Inspector remains an independent asset.

  • Separate internal API-design guards from external wire-schema contracts,
    remove the redundant hand-picked config surface check, and document the
    repository's CI maintenance gates.

  • Resolve sensitive-value protection keys at most once per mode and exchange,
    sharing one immutable snapshot across request and response redaction, and
    reuse exchange-scoped AES-GCM state, tokenization state, and protected-token
    encoding buffers to reduce dense-body allocation.

  • Replace the pre-1.0 BodyValue.Finish() string extension contract with
    FinishTo(io.Writer) error, allowing protected body values to reach their
    destination without an intermediate immutable string allocation.

  • Add allocation-free ASCII name matching with Unicode-preserving fallbacks for
    streaming XML element and form field redaction.

  • Reuse multipart boundary state, scan part headers without split allocations,
    and fast-path ordinary form-data parameters while retaining standard MIME
    parsing for escaped, extended, duplicate, or ambiguous syntax.

  • Compare the root, hario, hartest, and otelrecorder public APIs with the
    latest releases in CI using a pinned golang.org/x/exp/apidiff, with explicit
    temporary review of intentional pre-v1 incompatibilities and a repository-
    hosted badge linking to the complete compatibility report.

  • Eliminate per-key JSON decoding for ordinary ASCII keys and per-byte
    fail-closed buffering churn while retaining escaped and Unicode matching.

  • Refresh the performance snapshot and extend benchmark coverage to bounded
    HAR/NDJSON ingestion and strict fixture replay.

  • Pin the golangci-lint version used by local and CI checks through one
    repository-owned version file.

  • Replace external Codecov uploads with repository-native coverage reporting:
    per-component thresholds, GitHub Actions job summaries, retained GitHub
    artifacts, local HTML/LCOV reports, and a browsable dashboard and badge
    published with the Inspector on GitHub Pages.

  • Expand GoDoc with executable core, capture-reader, async-sink, redaction, and
    OpenTelemetry examples, and clarify public policy/configuration semantics.

  • Redesign the Inspector export and live-stream tools as responsive, consistent
    workspace panels with clearer controls, status summaries, and safety guidance.

  • Test every documentation example behavior and align coverage enforcement and
    reporting with the Recorder libraries, documented code examples,
    OpenTelemetry, and Inspector component boundaries; combine examples across Go
    module boundaries into one source-level coverage report.

Fixed

  • Preserve XML siblings after redacting element names whose Unicode lowercase
    form is not equivalent under simple case folding, including Turkish İ.
  • Enforce hario.MaxEntryBytes while a HAR entry is being read, preventing an
    oversized JSON value from being fully accumulated before rejection.
  • Stop hartest.Transport from replacing a live request's body after matching;
    it now follows the http.RoundTripper contract by reading and closing the
    original body without mutating request fields.
  • Consume a matched hartest fixture that represents a recorded transport
    failure, so Verify and repeated-request behavior follow the same one-shot
    contract as successful exchanges.
  • Preserve JSON string, number, boolean, null, object, and array value types
    when the Inspector renders or exports resolved protected bodies; malformed
    and base64 bodies remain protected rather than producing misleading evidence.