v0.6.0
v0.6.0 — real-world surface readiness
The generator and proxy now cover the read side of a real HTTP surface:
bodyless operations — GET reads, path-only POSTs, and 204 responses — bundle
and proxy end-to-end, where v0.5 rejected them. wavefront also becomes visible
in distributed traces, emitting its own attributed span per request, and the
release workflow now renders these notes from the tag annotation itself. The
span ships without the OpenTelemetry SDK — a hand-rolled OTLP/HTTP exporter
keeps the server's dependency tree free of opentelemetry and grpc (#92 resolved
by approach).
-
Bodyless operations end-to-end. wavefront-bundle add no longer rejects
operations with no request body or no 200 response: each layer synthesizes a
single wavefront.gen.v.Empty message, and bodyless operations bind it
for the request and/or response side. At runtime a request_message of Empty
produces a clean bodyless upstream call (no body, no Content-Type — not {}
with application/json), and a response_message of Empty emits no response
body. Path and query parameters still pass through verbatim (#105 closed). -
wavefront-attributed OpenTelemetry span. With
WAVEFRONT_TRACES_OTLP_ENDPOINT set, wavefront emits one wavefront.proxy span
per request to an OTLP/HTTP collector, continuing the inbound W3C traceparent
(trace id preserved, the inbound span becomes the parent, fresh child span id)
while still forwarding the client's traceparent/tracestate untouched. Each
span carries contract_version, target, and transform_outcome attributes and a
service.name resource (WAVEFRONT_TRACES_SERVICE_NAME, default wavefront);
WAVEFRONT_TRACES_SAMPLE_RATIO in (0,1] sets the root-trace sample probability.
Emission is non-blocking and best-effort — a full queue or a collector error
drops the span, never the request. Unset endpoint = disabled, zero overhead.
Implemented as a hand-rolled OTLP/JSON exporter, no OTel SDK (#71, #92
closed). -
Release notes from the tag annotation. The release workflow extracts the
annotated-tag body explicitly (git tag -l --format='%(contents)' into
--notes-file) instead of --notes-from-tag, which had silently fallen back to
the commit message on v0.5.0 (#106 closed). -
feat: synthesize a synthetic Empty message for bodyless operations (#107)
-
feat: send bodyless upstream requests / empty responses for Empty (#111)
-
feat: emit a wavefront-attributed OTLP span per request (#110)
-
fix: extract release notes from the tag annotation explicitly (#109)