Task · TSO-0184

Emit tailnet ownership on runtime traces before offering tailnet-scoped trace panels

Description

app.New passes a.tracer (process tracer) to runtime clients/schedulers and receivers. These spans do not carry a runtime tailnet dimension; adding a query matcher would silently hide valid spans. Only the emitted scrape collector dimension is repaired in this candidate. Found during TSO-0172 (comprehensive audit of both Grafana dashboards against the live stack); not admitted into loop26.

Acceptance Criteria

Definition of Done

Implementation Plan

Wire owning provider tracers into runtime APIs, schedulers, node discovery and routed receivers; preserve process-global releases. Validate actual OTLP export, then final native and delivered live queries.

Implementation Notes

Owner commissioned ordinary work on main on 2026-10-13. Root owns integration, delivery and final proof; bounded workers own disjoint source/evidence paths. Replay remains blocked.

Actual two-runtime OTLP fixture and negative/race tests pass. Native final union render passes. Delivered live query matches exact six All trace IDs and two per owner; process traces preserved only under All. Evidence: /Users/rob/repos/tailscale2otel/codex/dashboard-closeout/live/final-query-proof.json and /Users/rob/repos/tailscale2otel/codex/dashboard-closeout/browser/trace-render-final-union/verdict.json. Full just check passed on final source; generation clean; justfile formatting gate passed, no new recipes. Source commit 760fda5e7c725ae2e1f6499a77bf681bfcd49585; exact-source CI and GitSync succeeded. CodeRabbit Go shard completed with zero findings; Python shard failed No files to review and is not claimed clean.

Final Summary

Runtime ownership emitted and trace selectors verified locally and after GitSync delivery.

References

View the source file on GitHub