Skip to content

feat(observability): tenant and request id on every log record and span - #819

Merged
taitelee merged 10 commits into
mainfrom
claude/obs-771-tenant-request-id-gq494d
Oct 13, 2026
Merged

taitelee merged 10 commits into
mainfrom
claude/obs-771-tenant-request-id-gq494d

Conversation

@taitelee

@taitelee taitelee commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

Requested by Taite · project thread

Summary

Before: chi's RequestID ran on every request but nothing read the id, so no log line, span or response carried it, and an incoming X-Request-Id was dropped. The tenant was on no span and on few request-path log lines, so the authz-denied WARN, the operator-key audit line and batch ingested could not be grouped by tenant.

After: every record logged through a request's context carries request_id, and tenant once the tenant is resolved. The otelhttp server span carries the same two attributes. Every response returns the id in X-Request-Id. Neither field is a metric label.

How:

  • internal/observability/request.go (new) adds a request scope in the context. TraceHandler stamps it on records; a record that already names a tenant keeps its own. The tenant is filled in place, so the panic recoverer's record, logged through an earlier context, has it too.
  • internal/api/correlation.go (new) replaces chi's RequestID. It keeps an incoming X-Request-Id sent once with 1 to 128 printable ASCII characters and no spaces, otherwise it mints a random 32-hex id that, unlike chi's, names no host. annotateSpan runs after otelhttp and copies the scope onto the server span.
  • TenantMW stamps the X-Tenant-ID tenant. On /v1/ops, opsRequestTenant runs ahead of authentication, so the operator-key audit line carries the tenant: a valid ?tenant=, or tenant 0 for any ops route that names none (reads, raw SQL, the schema refresh). A settings reload naming none acts on every tenant and stamps nothing.
  • cmd/wavehouse's boot logger is wrapped in TraceHandler, so stdout keeps these fields, and trace_id/span_id, with otel.logs.enabled off.

Left for later: internal/api/ingest.go is untouched because #712 rewrites it. Its batch ingested and per-event lines already log through the request context, so they get both fields with no edit there. Its ingest child span still carries only table; the tenant is on the server span above it. As asked, no wiring went into internal/app/{wire,app}.go, internal/chconn/chconn.go or internal/ingest/worker.go.

The docs are updated in api.md, architecture.md, deployment.md (a new "Following one request or one tenant" section), configuration.mdx, reverse-proxy.mdx and AGENTS.md, with a CHANGELOG entry under Unreleased.

Test plan

  • make build, go vet ./...
  • go test -race ./internal/api/ ./internal/observability/ ./internal/auth/ ./cmd/...
  • New tests cover: request id parsing (kept, too long, space, control, non-ASCII, repeated), the echo on every response, span annotation in both orders, a tenant set after the context was taken, no duplicate tenant key, tenant-route and ops-route lines (both routers) carrying the tenant from authentication on, and the ops and DLQ default tenant.
  • Pre-push code and docs reviewers: ship_it on f70346f
  • make ci: not run in the cloud session, which has no Docker and cannot download golangci-lint; left for the owner to run locally

Related Issues

Closes #771

Part of #777. Carries #333's request-id item. Related: #25.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RzXgYrkbx4W91MUu18T2G7

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzXgYrkbx4W91MUu18T2G7
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzXgYrkbx4W91MUu18T2G7
@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: df714a26-201f-4a31-af4b-df92885eb456
📥 Commits

Reviewing files that changed from the base of the PR and between e66e60c and 563a10d.

📒 Files selected for processing (1)
  • docs/src/content/docs/deployment.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
🧰 Additional context used
📚 Code guidelines (3)
docs/src/content/docs/deployment.md — auto-discovered
AGENTS.md — auto-discovered
docs/src/content/docs/development.md — auto-discovered
📓 Path-based instructions (3)
Source excerpt: All images use multi-stage builds (Go Alpine builder → distroless runtime) for minimal attack surface.

📄 CodeRabbit inference engine (docs/src/content/docs/deployment.md)

Files:

  • docs/src/content/docs/deployment.md
Source excerpt: **Editors see WH001 in `.md` only.**

📄 CodeRabbit inference engine (AGENTS.md)

Files:

  • docs/src/content/docs/deployment.md
Source excerpt: Run `make fix` to apply them.

📄 CodeRabbit inference engine (docs/src/content/docs/development.md)

Files:

  • docs/src/content/docs/deployment.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: taitelee
Repo: Wave-RF/WaveHouse PR: 819
File: scripts/ci/remote-ci.test.sh:126-128
Timestamp: 2026-10-13T13:23:56.008Z
Learning: In scripts/ci/remote-ci.test.sh, the Bash run() watchdog uses KILL intentionally. On Bash 5.2.21, TERM delivered before the watchdog subshell resets its traps can execute the inherited parent EXIT trap and remove the shared scratch directory. Readiness-synchronized probes exclude this early signal window and cannot disprove the race. KILL prevents trap execution; replacing it with TERM can cause intermittent test failures.
Learnt from: CR
Repo: Wave-RF/WaveHouse

Timestamp: 2026-10-13T14:41:40.347Z
Learning: Source excerpt:
# AGENTS.md — AI Agent Instructions for WaveHouse

## Operating Rules

3. **Every code change updates its docs + `CHANGELOG.md` in the same PR** — a code change without its doc update is incomplete ([§Documentation Sync](#documentation-sync)).
Learnt from: CR
Repo: Wave-RF/WaveHouse

Timestamp: 2026-10-13T14:41:40.347Z
Learning: Source excerpt:
# AGENTS.md — AI Agent Instructions for WaveHouse

## Documentation Sync

Every code change should update the corresponding docs in the same PR. A code change without its doc update is incomplete.

| Change | Files to update |
| ------ | --------------- |
| Add/modify API endpoint | `docs/src/content/docs/api.md`, `README.md` (if user-facing) |
| Add/modify boot config option | `docs/src/content/docs/configuration.mdx`, `config.yaml`, `deployments/compose/*` env blocks, `docs/src/content/docs/deployment.md` |
| Add/modify a settings-directory key (`config.json`, `roles.json`, `policies.json`, `pipes.json`) | `docs/src/content/docs/settings-directory.mdx` (table **and** the example block), `internal/settings/seed/*.json`, `deployments/compose/settings/*.json`, `tests/e2e/fixtures/settings/*.json`, `config.yaml` (the `settings:` comment enumerates the keys) |
| Change architecture / add a package | `docs/src/content/docs/architecture.md`, `AGENTS.md` |
| Change ingest / e...
🔇 Additional comments (1)
docs/src/content/docs/deployment.md (1)

754-754: LGTM!

📝 Summary

Summary by CodeRabbit

  • New Features
    • All responses now include an X-Request-Id. A single valid supplied ID is preserved; invalid, duplicate, or missing IDs are replaced with a generated 32-character hexadecimal ID.
    • Request IDs and resolved tenant IDs are included in logs and server spans. Existing tenant values in log records are preserved, and these fields are not used as metric labels.
    • Added guidance on request ID validation, request correlation, and forwarding IDs through reverse proxies.

The API now validates or generates a request ID, returns it in X-Request-Id, and adds request and resolved-tenant values to logs and server spans. Documentation describes the correlation behavior. The CI script also changes how it terminates its watchdog.

Changes: Request and tenant correlation

Layer / File(s) Summary
Request-scoped log and span attributes
internal/observability/request.go, internal/observability/logger.go, internal/observability/request_test.go, cmd/wavehouse/main.go, AGENTS.md, docs/src/content/docs/architecture.md, docs/src/content/docs/configuration.mdx, internal/auth/auth.go
Request scope stores the request ID and resolved tenant. TraceHandler adds these values to log records while preserving an explicitly supplied tenant. Observability helpers add request and tenant attributes to spans. The boot logger uses TraceHandler. Related tests and documentation describe the fields and output.
API request ID and tenant propagation
internal/api/correlation.go, internal/api/router.go, internal/api/tenant.go, internal/api/dlq.go, internal/api/correlation_test.go, CHANGELOG.md, docs/src/content/docs/api.md, docs/src/content/docs/architecture.md, docs/src/content/docs/deployment.md, docs/src/content/docs/reverse-proxy.mdx
API middleware accepts a single valid request ID or generates one, places it in request context, and returns it in the response. Tenant middleware records a resolved named or default tenant. Tests and documentation cover ID validation, tenant attribution, and correlation behavior.

CI watchdog cleanup

Layer / File(s) Summary
Watchdog termination
scripts/ci/remote-ci.test.sh
The run cleanup sends KILL to the watchdog instead of TERM. Comments describe the early-refusal case and EXIT-trap cleanup.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature · Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant requestID
  participant TenantMiddleware
  participant SetRequestTenant
  participant TraceHandler
  Client->>requestID: Send X-Request-Id
  requestID->>TenantMiddleware: Add request ID to request context
  TenantMiddleware->>SetRequestTenant: Record resolved tenant
  SetRequestTenant->>SetRequestTenant: Update request scope and server span
  TraceHandler->>TraceHandler: Add request ID and tenant to log record
  requestID-->>Client: Return X-Request-Id
Loading
Merge Risk: ⚪ Minimal · up to 563a1

Request and tenant correlation behavior matches the documented intent, and the watchdog signal change adds no new cleanup risk. No actionable merge-blocking issue remains; normal CI checks are still appropriate.

Pre-merge checks · Passed 3 · Failed 2

Failed Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check Warning The PR changes scripts/ci/remote-ci.test.sh so the watchdog cleanup sends KILL instead of TERM. This change concerns CI watchdog behavior and does not implement request or tenant correlation for… Remove the watchdog change from this PR or move it to a separate PR for CI watchdog behavior.
Docstring Coverage Warning Docstring coverage is 76.32% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 38 functions across 11 files. (1 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks (3 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely identifies the main change: adding tenant and request ID fields to observability logs and spans.
Description check Passed The description directly explains the request ID and tenant correlation changes, affected components, documentation updates, and test results.
Linked Issues check Passed Issue #771 is addressed. The PR creates a request scope with request_id and resolved tenant, adds these fields to request log records, annotates the otelhttp server span, and returns `X-Request-Id…
Full details: Out of Scope Changes check

Explanation

The PR changes scripts/ci/remote-ci.test.sh so the watchdog cleanup sends KILL instead of TERM. This change concerns CI watchdog behavior and does not implement request or tenant correlation for issue #771.

Full details: Docstring Coverage

Explanation

Docstring coverage is 76.32% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 38 functions across 11 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
✨ Simplify code
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation go Pull requests that update go code area/observability Metrics, logs, traces, health, profiling area/api HTTP handlers, routing, middleware area/docs Documentation, site/, README area/infra CI, build, deploy, Docker, release labels Oct 12, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzXgYrkbx4W91MUu18T2G7
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

📚 Docs preview

✅ Live: https://pr-819-wavehouse-docs.wave-rf.workers.dev (follows this PR)
This commit (563a10d): https://1a942409-wavehouse-docs.wave-rf.workers.dev (exactly this commit; open it if the link above looks stale)

  • Commit: 563a10d docs(observability): the bare probes and the metrics path carry request_id alone
  • Author: @taitelee
  • Committed: 2026-10-13 10:02 EDT
  • Uploaded: 2026-10-13 10:06 EDT (run)
Earlier commits (1)
Commit Preview (that commit only) Uploaded
e66e60c https://eaeb6b5b-wavehouse-docs.wave-rf.workers.dev 2026-10-13 09:38 EDT

@github-code-quality

github-code-quality Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: Go

Go

The overall line coverage in commit 563a10d in the claude/obs-771-tenan... branch remains at 93%, unchanged from commit f8e44f2 in the main branch.

Show a line coverage summary of the most impacted files.
File main f8e44f2 claude/obs-771-tenan... 563a10d +/-
internal/mq/nats_topology.go 92% 91% -1%
internal/mq/external.go 85% 85% 0%
internal/api/dlq.go 100% 100% 0%
internal/ingest/claims.go 91% 92% +1%
internal/mq/ext...nal_consumer.go 88% 89% +1%
cmd/wavehouse/main.go 61% 62% +1%
internal/api/router.go 98% 99% +1%
internal/app/wire_dynamodb.go 89% 95% +6%
internal/observ...lity/request.go 0% 100% +100%
internal/api/correlation.go 0% 100% +100%

Updated October 13, 2026 14:07 UTC

@taitelee

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@taitelee
taitelee marked this pull request as ready for review October 12, 2026 20:48
@taitelee
taitelee requested review from a team and EricAndrechek October 12, 2026 20:48

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: d15d028d-5354-433e-a7ab-484e9b0a34e1
📥 Commits

Reviewing files that changed from the base of the PR and between 86c8fbc and 8cac284.

📒 Files selected for processing (18)
  • AGENTS.md
  • CHANGELOG.md
  • cmd/wavehouse/main.go
  • docs/src/content/docs/api.md
  • docs/src/content/docs/architecture.md
  • docs/src/content/docs/configuration.mdx
  • docs/src/content/docs/deployment.md
  • docs/src/content/docs/reverse-proxy.mdx
  • internal/api/correlation.go
  • internal/api/correlation_test.go
  • internal/api/dlq.go
  • internal/api/router.go
  • internal/api/tenant.go
  • internal/auth/auth.go
  • internal/observability/logger.go
  • internal/observability/request.go
  • internal/observability/request_test.go
  • scripts/ci/remote-ci.test.sh

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Review details
🧰 Additional context used
📚 Code guidelines (4)
docs/src/content/docs/deployment.md — auto-discovered
CONTRIBUTING.md — auto-discovered
.github/copilot-instructions.md — auto-discovered
AGENTS.md — auto-discovered
📓 Path-based instructions (6)
Source excerpt: **Settings directory.**

📄 CodeRabbit inference engine (docs/src/content/docs/deployment.md)

Files:

  • docs/src/content/docs/configuration.mdx
  • docs/src/content/docs/deployment.md
Source excerpt: In a Docker / Podman / Kubernetes deployment, **`data_dir` must resolve to a host-backed volume**.

📄 CodeRabbit inference engine (docs/src/content/docs/deployment.md)

Files:

  • docs/src/content/docs/deployment.md
Source excerpt: Update the documentation and `CHANGELOG.md` (under `## Unreleased`) that your change affects.

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Files:

  • docs/src/content/docs/reverse-proxy.mdx
  • docs/src/content/docs/configuration.mdx
  • docs/src/content/docs/deployment.md
  • docs/src/content/docs/api.md
  • CHANGELOG.md
  • docs/src/content/docs/architecture.md
See [AGENTS.md](../AGENTS.md) for project conventions, architecture notes, and AI agent instructions.

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • AGENTS.md
Source excerpt: **Docs prose**: never hard-wrap Markdown — one paragraph is one line.

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Files:

  • docs/src/content/docs/reverse-proxy.mdx
  • docs/src/content/docs/configuration.mdx
  • docs/src/content/docs/deployment.md
  • docs/src/content/docs/api.md
  • CHANGELOG.md
  • AGENTS.md
  • docs/src/content/docs/architecture.md
Source excerpt: **In MDX, leave a blank line between a JSX tag and a code fence.**

📄 CodeRabbit inference engine (AGENTS.md)

Files:

  • docs/src/content/docs/reverse-proxy.mdx
  • docs/src/content/docs/configuration.mdx
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: Wave-RF/WaveHouse

Timestamp: 2026-10-12T20:48:09.334Z
Learning: Source excerpt:
# AGENTS.md — AI Agent Instructions for WaveHouse

## Operating Rules

1. **Validate locally before every push** — run `make ci` the documented way, here or on a configured host with `make ci-remote` ([§Running `make ci`](#running-make-ci-for-agents)). Don't use CI as your first feedback loop.
Learnt from: CR
Repo: Wave-RF/WaveHouse

Timestamp: 2026-10-12T20:48:09.334Z
Learning: Source excerpt:
# AGENTS.md — AI Agent Instructions for WaveHouse

## Documentation Sync

Every code change should update the corresponding docs in the same PR. A code change without its doc update is incomplete.

| Change | Files to update |
| ------ | --------------- |
| Add/modify API endpoint | `docs/src/content/docs/api.md`, `README.md` (if user-facing) |
| Add/modify boot config option | `docs/src/content/docs/configuration.mdx`, `config.yaml`, `deployments/compose/*` env blocks, `docs/src/content/docs/deployment.md` |
| Add/modify a settings-directory key (`config.json`, `roles.json`, `policies.json`, `pipes.json`) | `docs/src/content/docs/settings-directory.mdx` (table **and** the example block), `internal/settings/seed/*.json`, `deployments/compose/settings/*.json`, `tests/e2e/fixtures/settings/*.json`, `config.yaml` (the `settings:` comment enumerates the keys) |
| Change architecture / add a package | `docs/src/content/docs/architecture.md`, `AGENTS.md` |
| Change ingest / e...
🪛 LanguageTool
docs/src/content/docs/deployment.md

[style] ~794-~794: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...e_id/span_idfor Loki-to-Tempo links whether or nototel.logs.enabled` is on. Leaving it o...

(WHETHER)

docs/src/content/docs/api.md

[style] ~83-~83: Since ownership is already implied, this phrasing may be redundant.
Context: ... ASCII characters, with no spaces, gets its own back; any other gets a fresh random 32-...

(PRP_OWN)

CHANGELOG.md

[typographical] ~19-~19: Consider using an em dash in dialogues and enumerations.
Context: - **Every request's log records and serve...

(DASH_RULE)


[style] ~19-~19: This sentence is over 40 words long. Consider splitting it up, as shorter sentences make the text easier to read.
Context: - Every request's log records and server span say which request and which tenant they belong to (internal/observability/{request,logger}.go (+ tests), internal/api/correlation.go (new, + tests), internal/api/{router,tenant,dlq}.go, cmd/wavehouse/main.go, a comment in internal/auth/auth.go, docs/src/content/docs/{api,architecture,deployment}.md, {configuration,reverse-proxy}.mdx, AGENTS.md): closes #771, part of the observability epic #777, and carries the request-id item of #333 that #25 asked for. chi's RequestID ran on every request,...

(TOO_LONG_SENTENCE)


[style] ~19-~19: Since ownership is already implied, this phrasing may be redundant.
Context: ...lution, has it too; a record that names its own tenant keeps it. The otelhttp server sp...

(PRP_OWN)

docs/src/content/docs/architecture.md

[style] ~192-~192: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...ogger in it too, so stdout carries them whether or not OTLP logs are on. otlpSamplerFn is ex...

(WHETHER)


[style] ~193-~193: Since ownership is already implied, this phrasing may be redundant.
Context: ...ds and spans alike; a record that names its own tenant keeps it. They are never metric ...

(PRP_OWN)

🔇 Additional comments (17)
internal/observability/request.go (1)

34-35: LGTM!

Also applies to: 53-58, 62-76, 80-98

internal/observability/logger.go (1)

15-16: LGTM!

Also applies to: 21-22, 24-24

internal/observability/request_test.go (1)

42-95: LGTM!

Also applies to: 97-117, 119-163

cmd/wavehouse/main.go (1)

16-16: LGTM!

Also applies to: 164-167

AGENTS.md (1)

44-44: LGTM!

docs/src/content/docs/architecture.md (1)

78-78: LGTM!

Also applies to: 192-193

docs/src/content/docs/configuration.mdx (1)

298-298: LGTM!

docs/src/content/docs/deployment.md (1)

747-750: LGTM!

Also applies to: 794-794

internal/auth/auth.go (1)

500-504: LGTM!

Also applies to: 526-527

internal/api/correlation.go (1)

13-58: LGTM!

Also applies to: 78-85

internal/api/router.go (1)

123-123: LGTM!

Also applies to: 167-167, 214-214, 262-262

internal/api/tenant.go (1)

10-10: LGTM!

Also applies to: 102-102, 116-116, 157-157

internal/api/dlq.go (1)

10-10: LGTM!

Also applies to: 37-37

internal/api/correlation_test.go (1)

26-96: LGTM!

Also applies to: 98-209

CHANGELOG.md (1)

19-20: LGTM!

docs/src/content/docs/api.md (1)

83-84: LGTM!

docs/src/content/docs/reverse-proxy.mdx (1)

198-198: LGTM!

Comment thread internal/api/correlation.go
Comment thread scripts/ci/remote-ci.test.sh
@github-project-automation github-project-automation Bot moved this from Backlog to In review in WaveHouse Task Board Oct 12, 2026
@taitelee

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 13, 2026
@taitelee

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@taitelee

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@taitelee
taitelee merged commit 38cec1b into main Oct 13, 2026
20 checks passed
@taitelee
taitelee deleted the claude/obs-771-tenant-request-id-gq494d branch October 13, 2026 14:58
@github-project-automation github-project-automation Bot moved this from In review to Done in WaveHouse Task Board Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/api HTTP handlers, routing, middleware area/docs Documentation, site/, README area/infra CI, build, deploy, Docker, release area/observability Metrics, logs, traces, health, profiling documentation Improvements or additions to documentation go Pull requests that update go code

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

feat(observability): tenant and request id on every log record and span

2 participants