Repository navigation
feat: request tracing and structured logs, enforced API versions, RFC ETag matching - #1820
Merged
github-actions[bot] merged 1 commit intoOct 17, 2026
Conversation
|
@Pro-builder Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1788
Closes #1789
Closes #1790
Closes #1791
#1788 ETag and conditional requests
isETagMatch(compression.ts, used byserver.tsviasendJson) now does the RFC 9110 weak comparison: comma-separated lists andW/tags match, so CDNs that weaken the tag still get a 304.server.test.ts: ETag emitted, 304 for exact, list and weak matches, 200 for a stale tag. Unit tests incompression.test.ts.docs/etag-caching.mdnow describes the real code path.#1789 API versioning
versionRegistryreflects what is served: v1 active and default.resolveVersionrejects an explicitly requested unknown version (path, header or query) with 400VERSION_NOT_FOUNDinstead of serving the default. Fixes the 4 failing tests inapiVersioning.test.ts.createVersionMiddlewaremounted inserver.tsandcreateApiServer.ts; responses carryapi-version.docs/api-versioning.md: current state, strategy and deprecation policy (6 month minimum window, headers, 410 on sunset).#1790 Structured request logging
backend/shared/middleware/requestObservability.ts, mounted in both servers.X-Request-Idkept from the caller when safe, otherwise a UUID; echoed and used as the logcorrelationIdfor everything logged during the request.http.requestlog per request with requestId, traceId, spanId, method, path, status, durationMs.docs/api-logging.mddocuments the format.#1791 Distributed tracing
serverspan that continues the incomingtraceparentand exports throughcreateTracerFromEnv(OTLP whenOTEL_EXPORTER_OTLP_ENDPOINTis set).request.id.server.tsaccepts an injected tracer for tests.docs/distributed-tracing.mdupdated with the real backend setup and log correlation.