Skip to content

Lower the accidental opentelemetry-api floor in the otel extra #138

Description

@bagowix

Problem

pyproject.toml:31 declares otel = ["opentelemetry-api>=1.43.0"]. That floor was never a requirement of the code: it arrived as a routine dependency bump (3d664ad, "chore: bump opentelemetry-api from 1.42.1 to 1.43.0 (#7)") that moved the dev pin, the extra's lower bound and the extras-min pin (.github/workflows/ci.yml:105) together. A dev pin says "what we develop against"; an extra's floor says "the oldest version we support" — the bump silently answered the second question with the first.

OTelEventListener uses only metrics.get_meter, Meter.create_histogram and Meter.create_counter (interlock/integrations/otel.py:31-56) — API that has been stable for years. Verified locally: every hook of OTelEventListener runs unchanged on opentelemetry-api==1.20.0 and on 1.35.0.

The cost to adopters is real, because the OpenTelemetry distro/instrumentation line pins the whole stack to one API version. opentelemetry-distro==0.56b0 resolves opentelemetry-sdk==1.35.0 and therefore opentelemetry-api==1.35.0; interlock-cb[otel] then forces a choice between upgrading the entire OTel stack and skipping the extra — for a listener that would have worked fine. Every other extra carries a floor that means something (requests>=2.31.0, httpx>=0.27.0, aiohttp>=3.12.0 for the client-middleware API, litestar>=2.23.0 for NamedDependency); this one does not.

Proposal

  • Lower the otel extra floor to the oldest opentelemetry-api the listener actually works on, and pin extras-min to the same version so CI proves it on 3.11. 1.20.0 is verified here; go lower only if the job stays green.
  • Keep the dev group on the current version — development continues against the latest.
  • Prevent the recurrence: a runtime floor is a compatibility statement, not a dev pin. Either exclude [project.optional-dependencies] from the uv updates in .github/dependabot.yml, or state the rule in CONTRIBUTING.md next to the extras workflow so a floor is only ever raised by an API the code needs.

Acceptance criteria

  • The otel extra floor is lowered and .github/workflows/ci.yml pins extras-min to the same version; tests/test_otel.py passes there.
  • The dev group keeps the current opentelemetry-api version, so the main matrix still tests the latest.
  • The "never raise an extra's floor without an API reason" rule is written down where the next bump will be reviewed.
  • Audit the remaining extras' floors in the same PR and note any that are equally accidental.
  • CHANGELOG.md entry under [Unreleased] (Changed), phrased for the adopter it unblocks.

Non-goals

  • Supporting the pre-stable metrics API or adding compatibility shims: if a floor cannot be met without branching on the OTel version, keep the floor.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions