Skip to content

fix: lower the accidental opentelemetry-api floor in the otel extra - #147

Merged
bagowix merged 2 commits into
mainfrom
fix/138-otel-extra-floor
Aug 7, 2026
Merged

fix: lower the accidental opentelemetry-api floor in the otel extra#147
bagowix merged 2 commits into
mainfrom
fix/138-otel-extra-floor

Conversation

@bagowix

@bagowix bagowix commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Summary

pyproject.toml declared otel = ["opentelemetry-api>=1.43.0"]. That floor
was never a requirement of the code: it arrived as a side effect of a routine
dependency bump (3d664ad, #7) that moved the dev pin, the extra's lower bound
and the extras-min CI pin together. Git history shows the extra's floor was
originally >=1.20.0 at introduction — the bump silently raised a
compatibility statement while only intending to bump what we develop against.

OTelEventListener only calls metrics.get_meter, Meter.create_histogram
and Meter.create_counter, API that has been stable for years. Verified
locally: tests/test_otel.py passes unchanged against
opentelemetry-api==1.20.0.

The cost to adopters was real: opentelemetry-distro/SDK releases pin the
whole OTel stack to one API version, so the stale floor forced anyone on an
older distro to choose between upgrading their entire OTel stack and dropping
interlock-cb[otel] — for a listener that would have worked fine.

Changes

  • Lower the otel extra floor back to opentelemetry-api>=1.20.0 and pin
    .github/workflows/ci.yml's extras-min job to the same version, so CI
    proves it on 3.11.
  • Keep the dependency-groups.dev pin at the current version — development
    continues against the latest.
  • Document the rule in CONTRIBUTING.md: an extra's floor is a compatibility
    statement, not a dev pin, and a routine bump must never carry both together.
  • CHANGELOG.md entry under [Unreleased]Changed.

Extras floor audit

Checked git history for every other extra (httpx, httpx2, fastapi,
redis, litestar, tenacity, requests, aiohttp): each floor was set
once at introduction (in the PR that added the integration) and has never
been touched by a routine bump commit. None of them are equally accidental.

Checklist

  • Tests added or updated (suite stays at 100% coverage) — n/a, no library
    code changed; tests/test_otel.py verified against the new floor
  • uv run ruff format --check and uv run ruff check pass
  • uv run mypy, uv run pyright and uv run pyrefly check pass — n/a,
    no Python source changed
  • Docs updated (docs/) for user-facing changes — n/a, no docs/ page
    references the version number
  • CHANGELOG.md [Unreleased] updated
  • Commits follow Conventional Commits

Related issues

Closes #138

Changed

  • Lower the otel extra compatibility floor to opentelemetry-api>=1.20.0.
  • Test opentelemetry-api==1.20.0 in extras-min while retaining the current development pin.
  • Document compatibility floors and development pins in CONTRIBUTING.md.
  • Audit other extras and confirm that their floors are intentional.

A routine Dependabot bump (#7) moved the otel extra's floor from 1.20.0 to
1.43.0 along with the dev pin, though OTelEventListener only calls
get_meter/create_histogram/create_counter, which are stable well below that.
The stale floor forces adopters on an older opentelemetry-distro/SDK release
to choose between upgrading their whole OTel stack and dropping the extra.

Restore the original 1.20.0 floor, verified against tests/test_otel.py, and
pin ci.yml's extras-min job to the same version so CI proves it on 3.11. The
dev dependency group keeps its current pin. The remaining extras' floors were
each set once at introduction and never moved by a routine bump, so none of
them are equally accidental.

Document the rule going forward in CONTRIBUTING.md: an extra's floor is a
compatibility statement, and a routine bump must land on the dev pin only.
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@bagowix, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 15 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 77b6389b-1dba-451a-83c5-26a81f65fd61

📥 Commits

Reviewing files that changed from the base of the PR and between 75e6370 and 2a7d548.

📒 Files selected for processing (2)
  • docs/guides/observability.md
  • docs/llms-full.txt

Walkthrough

The otel optional dependency floor is lowered to opentelemetry-api>=1.20.0. The minimum-version CI job tests that version. The changelog and contributor guidance document the compatibility-floor policy.

Changes

OpenTelemetry compatibility floor

Layer / File(s) Summary
Lower floor and minimum-version validation
.github/workflows/ci.yml, pyproject.toml
The otel extra now requires opentelemetry-api>=1.20.0. The extras-min CI job installs opentelemetry-api==1.20.0.
Document the compatibility-floor policy
CHANGELOG.md, CONTRIBUTING.md
The changelog records the lower floor and CI coverage. Contributor guidance distinguishes compatibility floors from development pins and requires CI updates for intentional floor increases.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested labels: dependencies, github_actions

🚥 Pre-merge checks | ✅ 8 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docs And Llm Mirror ⚠️ Warning The PR changes the public OTel integration's supported dependency floor, but HEAD changes no docs/ page and does not regenerate docs/llms-full.txt. Update docs/guides/observability.md with the supported otel floor, then regenerate docs/llms-full.txt and commit both files.
✅ Passed checks (8 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title uses the required Conventional Commit format, imperative wording, lower case, and a 67-character length.
Linked Issues check ✅ Passed The changes satisfy the linked issue: they lower the floor, update CI, preserve the development pin, document the rule, audit extras, and add the changelog entry.
Out of Scope Changes check ✅ Passed All reviewed changes support the linked issue objectives; no unrelated code or documentation changes are present.
Zero-Dependency Core ✅ Passed No files under interlock changed; project dependencies remains []; interlock/init.py has no imports or re-exports from interlock.integrations.
Changelog Entry ✅ Passed CHANGELOG.md adds a bullet under [Unreleased] → Changed describing the lower otel floor and the adopter impact.
Tests Accompany Behaviour Change ✅ Passed The PR changes only workflow, documentation, pyproject.toml, and uv.lock files; no .py file under interlock/ changed, so the check's first PASS condition applies.
Public Api Surface ✅ Passed The PR changes no lines in interlock/init.py or interlock/pipeline.py; the parent-to-HEAD diff for both public API files is empty.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/138-otel-extra-floor

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

@codspeed-hq

codspeed-hq Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 24 untouched benchmarks


Comparing fix/138-otel-extra-floor (2a7d548) with main (677fb37)

Open in CodSpeed

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@bagowix
bagowix merged commit e8d1cba into main Aug 7, 2026
17 of 18 checks passed
@bagowix
bagowix deleted the fix/138-otel-extra-floor branch August 7, 2026 16:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Lower the accidental opentelemetry-api floor in the otel extra

1 participant