You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Distributed tracing has to be wired before the first feature ships, or instrumentation never gets retrofitted.
Proposed solution
Port src/observability/{logging.py, spans.py, tracing.py} from Teller. Tracing: OTel SDK + OTLP gRPC exporter pointed at OTEL_EXPORTER_OTLP_ENDPOINT (Jaeger via docker-compose). Logging: structured JSON logs correlated with active span ID. Span helpers: official OTel semantic-convention attribute names only (per feedback_otel_semconv memory). Wire FastAPI auto-instrumentation in src/api/main.py.
Acceptance criteria
Hitting /api/v1/health produces a span visible in Jaeger UI.
Logs are JSON, single-line, with trace_id and span_id fields.
tests/test_observability.py asserts span creation and semconv attribute names.
No custom-named OTel attributes; only semconv-defined ones.
Priority rationale
High: observability retrofitted is observability never done. Locks in correct tracing posture from day one.
Activity
chore: docker-compose.yml (app + frontend + jaeger) (#7) (#35)
chore: placeholder test so pytest does not exit 5 on empty scaffold (#46
feat: observability setup (OTel SDK, OTLP exporter, structured loggin…
constk commentedon Apr 27, 2026
Merged in PR #56.