v0.5.0
[0.5.0] - 2026-07-23
Added
- Add side-effect-free
Config.Validatestartup 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
hartesttiming 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
hariopackage, 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
hartestfixture 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.EntrySourcereplay 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,.resolvedfilenames, source
immutability, and two required handling acknowledgements.
Changed
-
Split SPDX inventories along distributable boundaries: the standalone
Recorder module excludes documentation examples,otelrecorderhas 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() stringextension 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, andotelrecorderpublic APIs with the
latest releases in CI using a pinnedgolang.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-lintversion 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.MaxEntryByteswhile a HAR entry is being read, preventing an
oversized JSON value from being fully accumulated before rejection. - Stop
hartest.Transportfrom replacing a live request's body after matching;
it now follows thehttp.RoundTrippercontract by reading and closing the
original body without mutating request fields. - Consume a matched
hartestfixture that represents a recorded transport
failure, soVerifyand 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.