Observability gap: a request's trace and deadline don't cross the REST→gRPC boundary, so traces split and client deadlines aren't honored upstream.
Scope
- Trace-context (W3C): forward incoming
traceparent (+ tracestate) into gRPC metadata. When no traceparent is present, synthesize one (random 16-byte trace-id + 8-byte span-id, sampled) so the upstream still joins a single trace across the boundary.
- Deadline: when the request carries a gRPC-format
grpc-timeout header (<int><unit> with unit H/M/S/m/u/n), parse it and set it as the upstream call deadline via tonic's request timeout. Absent → the channel default applies.
Applies to both unary and server-streaming transcoding paths.
Acceptance
- Unit tests: traceparent forward vs synthesize (valid W3C format), tracestate forwarding, grpc-timeout parsing per unit + overflow rejection.
- README: note trace-context + deadline propagation under Features.
Estimate: 5h
Observability gap: a request's trace and deadline don't cross the REST→gRPC boundary, so traces split and client deadlines aren't honored upstream.
Scope
traceparent(+tracestate) into gRPC metadata. When notraceparentis present, synthesize one (random 16-byte trace-id + 8-byte span-id, sampled) so the upstream still joins a single trace across the boundary.grpc-timeoutheader (<int><unit>with unit H/M/S/m/u/n), parse it and set it as the upstream call deadline via tonic's request timeout. Absent → the channel default applies.Applies to both unary and server-streaming transcoding paths.
Acceptance
Estimate: 5h