Skip to content

[OTEP] Federate Semantic Conventions#4906

Closed
jsuereth wants to merge 7 commits into
open-telemetry:mainfrom
jsuereth:wip-federated-semconv
Closed

[OTEP] Federate Semantic Conventions#4906
jsuereth wants to merge 7 commits into
open-telemetry:mainfrom
jsuereth:wip-federated-semconv

Conversation

@jsuereth

@jsuereth jsuereth commented Feb 27, 2026

Copy link
Copy Markdown
Contributor

This is a proposal to federate the semantic-conventions repository to allow for faster innovation and evolution across the ecosystem.

  • We retain clear ownership of semantic convention domains
  • We retain clear policy and tooling support for instrumentation authors to provide comprehensive documentation, stability guarantees and integration test assurance of the signals the produce.
  • We provide a clear "shared" location for x-cutting attributes and definitions.
  • We provide a path for federated semantic conventions to promote to core, if desired.
  • We expand for non-opentelemetry sources of conventions and standards to advertise their instrumentation and leverage the same tooling as open-telemetry.

```
#### Registry Requirements

- The registry MUST declare a dependency on core semantic conventions.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

so that there is no chance of having conflicts / vendoring in in incompatible manner / etc?

I like it!

@lmolkova lmolkova left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is awesome!


- The registry MUST declare a dependency on core semantic conventions.
- The registry MUST use a dependabot or rennovate bot to keep dependencies up-to-date.
- The registry MUST enforce semantic convention policies via github workflow, e.g.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: maybe explain what policies are (link to some section/doc), I imagine it's not a commonly known concept

- name: verify template packages
run: weaver registry check \
-r {my_registry_dir} \
-p https://github.com/open-telemetry/opentelemetry-weaver-packages.git[policies/check/naming_conventions] \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: it's the same on as the last one? (policies/check/naming)

#### Independent Versioning
- It releases `v2.0.0` of the `jvm` federated registry.
- This release is **completely independent** of the core `semconv` registry (which might still be at `v1.45.0`) and other registries like `http` or `messaging`.
- Users who want the new JVM metrics can opt-in by updating their instrumentation to point to the new `schema_url`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit:

I believe we now have the opt-in mechanism that's slightly different than picking a schema url, it was just introduced in declarative config: https://github.com/open-telemetry/opentelemetry-configuration/blob/4351ebd2805746d047a23588f8d3abe89f40f79f/snippets/ExperimentalInstrumentation_kitchen_sink.yaml#L52

E.g.

instrumentation:
  general:
    rpc:
      semconv:
        version: 1
        experimental: false
        dual_emit: true

Comment thread oteps/0000-federated-semantic-conventions-lifecycle.md Outdated

- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.
- **Breaking Changes**: If an instrumentation library adopts a new major version of a federated registry that results in breaking changes to its OTLP output, the library ITSELF must perform a major version bump. For example, if `opentelemetry-java-instrumentation` moves from `jvm/v1` to `jvm/v2`, it must release a new major version of its instrumentation package.
- **Stable by Default**: Following OTEP 4813, instrumentation can be marked as stable once its code and OTLP output are production-ready, this means marking any federated registry as stable, in tandem with the library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we want to allow stable (federated) registry to depend on unstable parts of otel conventions?

I think we can go either way.
If we don't allow it: they can take dependency on stable parts only and vendor in unstable parts if necessary.
If we allow it, they should be able to communicate breaking changes in unstable core via semver.

Either way, we need some forcing factors for them to

  • update to newer underlying core - it will be hard regardless
  • bring common concepts to core conventions

I'd rather not allow it at least initially and encourage to vendor in experimental stuff.


To solve the "cohesive whole" problem and provide obvious version conformance, OpenTelemetry will periodically publish **Platform Releases**.

A **Platform Release** is a manifest (using the schema format from OTEP 4815) that acts as a "BOM" (Bill of Materials). It does not contain new conventions itself but rather lists specific, tested-together versions of federated registries.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this would probably be the forcing factor to update federated registries I mentined in prev comment.
If library A depends on semconv core v1.40 and library B on semconv core v1.140 they probably can't coherently work in the same distro.

registries:
- schema_url: https://opentelemetry.io/schemas/semconv/1.42.0
- schema_url: https://opentelemetry.io/schemas/jvm/2.1.0
- schema_url: https://opentelemetry.io/schemas/http/1.15.0

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: would we separate HTTP from core conventions? Probably not until it needs v2


A **Platform Release** is a manifest (using the schema format from OTEP 4815) that acts as a "BOM" (Bill of Materials). It does not contain new conventions itself but rather lists specific, tested-together versions of federated registries.

**Example Platform Release Manifest (`OpenTelemetry 2026.1`):**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is awesome!

I also like the year as a major version - we should create expectation of some breaking changes on a predictable cadence

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This is date ver no? This is not semver.

Comment thread oteps/4906-federated-semantic-conventions-lifecycle.md
Comment thread oteps/4906-federated-semantic-conventions-lifecycle.md

As OpenTelemetry's semantic conventions expand, a monolithic registry and versioning scheme create friction:
1. **Slow Evolution**: Highly specialized or domain-specific conventions (e.g., JVM metrics, cloud-provider-specific resources) are often gated by the slower stabilization process of the core registry.
2. **Coupled Breaking Changes**: A major version bump in one sub-domain (e.g., a total overhaul of database conventions) should not force the entire OpenTelemetry ecosystem to adopt a major version bump.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

How does this propagate to natively instrumented libraries and what incentive do they have to move to newer conventions? There always is a transform layer running?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

As an alternative to a transform layer running always, I wish to see more-flexible ways to reconfigure static transforms over original instrumentation. In other words, to modify the telemetry at the start instead of in a pipeline (ideally using code generated from the semantic conventions).

As OpenTelemetry's semantic conventions expand, a monolithic registry and versioning scheme create friction:
1. **Slow Evolution**: Highly specialized or domain-specific conventions (e.g., JVM metrics, cloud-provider-specific resources) are often gated by the slower stabilization process of the core registry.
2. **Coupled Breaking Changes**: A major version bump in one sub-domain (e.g., a total overhaul of database conventions) should not force the entire OpenTelemetry ecosystem to adopt a major version bump.
3. **Instrumentation Stability**: Instrumentation libraries need a clear way to declare stability for their OTLP output by pinning to specific versions of the conventions they implement, regardless of whether those conventions are "core" or "federated".

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

are conventions in a particular version all uniformly considered "stable"?


## Goals

1. **Independent Lifecycle**: Enable domain-specific semantic convention registries to have their own SemVer lifecycle.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

what are the rules of semver here. Like dropping an attribute is "breaking" - what if it was optional?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Removing an opt-in attribute would still be breaking for those users that have opted-in.


1. **Independent Lifecycle**: Enable domain-specific semantic convention registries to have their own SemVer lifecycle.
2. **Instrumentation Pinning**: Allow instrumentation libraries to declare stability by pinning to specific federated registry versions.
3. **Platform Releases**: Provide a mechanism (Platform Releases) to bundle specific versions of federated registries into a "tested-together" cohesive set.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What's the acceptance criteria for "tested together", what if an instrumentation fails, is it removed from release?

1. **Independent Lifecycle**: Enable domain-specific semantic convention registries to have their own SemVer lifecycle.
2. **Instrumentation Pinning**: Allow instrumentation libraries to declare stability by pinning to specific federated registry versions.
3. **Platform Releases**: Provide a mechanism (Platform Releases) to bundle specific versions of federated registries into a "tested-together" cohesive set.
4. **Promotion Path**: Define a clear path for federated conventions to be consolidated into the core OpenTelemetry registry.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What if end-users want to opt out of expensive / PII risking conventions. Do these still land in core? What is the final say for something deserving to be in core. I'm unfamiliar here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We allow expensive / PII in core, with opt_in today and there's guidance around it. I think this is an orthogonal concern to this proposal, but an important issue that needs a solution across various components of OpenTelemetry.

For this proposal, we continue with the current behavior we have.

Comment on lines +27 to +28
**The JVM Metrics Example**:
The JVM Metrics registry (e.g., `opentelemetry.io/schemas/jvm`) identifies a need to overhaul its metric names to align with a new runtime standard.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this is a good example, but also centralized with the maintainers of Java. So it seems like a simpler example? It's harder to do this when there is no central vendor.

The JVM Metrics registry (e.g., `opentelemetry.io/schemas/jvm`) identifies a need to overhaul its metric names to align with a new runtime standard.

#### Registry Structure
A federated registry like `jvm-metrics` would contain a manifest, the convention definitions, and a policy enforcment github action.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

where to these actions run - on OTEL repos only? How does it run on native libraries.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

So we only "enforce" this structure for OTEL-owned repositories/conventions.

For native libraries, we provide open-telemetry/weaver as a tool they can use to participate in this federation, but we do not enforce any structure / policy unless they are planning to move their definitions back into the OpenTelemetry project.

#### Registry Requirements

- The registry MUST declare a dependency on core semantic conventions.
- A stable federated registry MUST NOT depend on unstable or experimental core conventions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

what if the federated conventions need the unstable conventions for it to make sense - example being session / threading of agents.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Then the federated convention would be marked "unstable" as well. Basically you can't declare a "child" convention stable unless the "parent" is also stable.

This doesn't preclude usage, just stability declaration.

#### Independent Versioning
- It releases `v2.0.0` of the `jvm` federated registry.
- This release is **completely independent** of the core `semconv` registry (which might still be at `v1.45.0`) and other registries like `http` or `messaging`.
- Users who want the new JVM metrics can opt-in by utilizing declarative configuration mechanisms (e.g., `version: 2`, `dual_emit: true`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

dual_emit prioritizes which verion?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

In OpenTelemetry - dual_emit will fire both conventions, i.e. you'll get both attributes, multiple metrics, etc.

@trask or @lmolkova may be able to speak more to how that works in practice.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What does "both conventions" mean, though? Some prior version of the jvm federated registry? The vestigial conventions in the semconv registry?

- This release is **completely independent** of the core `semconv` registry (which might still be at `v1.45.0`) and other registries like `http` or `messaging`.
- Users who want the new JVM metrics can opt-in by utilizing declarative configuration mechanisms (e.g., `version: 2`, `dual_emit: true`).
This should implicitly update the `schema_url` of telemetry, allowing users to see which version is which and address versioning issues.
- Existing users of `v1.x.x` are unaffected and continue to see the old OTLP output.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

which users are we talking about. The end-user?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes

Instrumentation libraries "own" the stability of the OTLP they produce. To maintain this stability:

- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.
- **Breaking Changes**: If an instrumentation library adopts a new major version of a federated registry that results in breaking changes to its OTLP output, the library ITSELF must perform a major version bump. For example, if `opentelemetry-java-instrumentation` moves from `jvm/v1` to `jvm/v2`, it must release a new major version of its instrumentation package.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this is not so simple. Instrumentation is dependent on now two versions, the library it instruments AND the semcov that it tracks. What if the instrumentation needs to move a major version for library changes, then subsequently needs to backfill support for an older version. Now there is no tenable way to track both semcov breaking changes with library breaking changes.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think I intend this to mean the opposite, or at least I don't see them as coupled.

  • If you make a breaking change in semconv, you need a major version bump on your library.
  • You may need major version bump on your library for other reasons, you do NOT need to bump semconv major version for this.

The key here is folks understand they need to do the first, and that the output signals of an instrumentation library are part of its stability.

Regarding tracking both semconv breaking + library breaking changes - I wanted to keep this simpler where you mostly just pay attention to library major version bumps, and then schema_url and backends can help you handle incompatibilities / conversions downstream.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

then subsequently needs to backfill support for an older version

@mikeldking Are you asking about backporting a semconv breaking change to an older instrumentation version?


- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.
- **Breaking Changes**: If an instrumentation library adopts a new major version of a federated registry that results in breaking changes to its OTLP output, the library ITSELF must perform a major version bump. For example, if `opentelemetry-java-instrumentation` moves from `jvm/v1` to `jvm/v2`, it must release a new major version of its instrumentation package.
- **Stable by Default**: Following OTEP 4813, instrumentation can be marked as stable once its code and OTLP output are production-ready, this means marking any federated registry as stable, in tandem with the library.

@mikeldking mikeldking Mar 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What if the library is unstable?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We would allow semconv to be marked as stable prior to libraries being fully stable. This is more to prevent the opposite in otel - libraries which are production-ready NOT declaring stability, because of a looming threat of semconv changes.

No. Engaging with `schema_url` and federated registries is optional. OpenTelemetry continues to work as-is for users who do not require automated schema transformation or validation. Existing observability ecosystems suffer from these same semantic fragmentation issues today, but they are typically only discovered at the storage or query layer. This proposal provides the metadata necessary to *address* these issues upstream, but it does not mandate that every SDK or Collector component must be schema-aware.

### 8. Won't this lead to "version fatigue" if instrumentation libraries have to major bump frequently to adopt federated registry changes?
No. Instrumentation libraries in OpenTelemetry are subject to the [specification's versioning and stability policies](/specification/versioning-and-stability.md). These policies strongly discourage frequent major version bumps and require minimum support periods (e.g., one year for contrib/instrumentation packages) for older major versions. This inherent bias towards stability ensures that instrumentation libraries do not adopt breaking changes from federated registries at a high cadence. Instead, maintainers will typically batch such changes or only adopt them when the value to users clearly outweighs the significant cost of a major release and the subsequent long-term support requirement.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

the problem here is "cost" - the cost to one OTLP backend might be significant - it dictates a business deal being made in a quarter vs losing to a competitor that doesn't comply to Otel at all. This puts vendors that are all in on OTEL at risk as their upstream signals are being dictated by parties that have no actual financial overhead or incentives to move the standards forward.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm also not sure this aligns with the Contrib Stability section of the versioning and stability doc:

Plugins, instrumentation, and other contrib packages SHOULD be kept up to date and compatible with the latest versions of the API, SDK, and Semantic Conventions. If a release of the API, SDK, or Semantic Conventions contains changes which are relevant to a contrib package, that package SHOULD be updated and released in a timely fashion.

If the relevant federated semconv decides to ship new major versions every other Tuesday because they're post-1.x and yet have attributes or telemetry that are in flux then it seems like the instrumentation libraries that depend on it would also be expected to ship new major versions frequently. Maybe that's something we'd want the TC to put a stop to, but it does seem like an expected result of a combined push for "stable semver" and "faster evolution".

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

So the idea behind this federation is that the lifecycle of a federated semconv and the instrumentation are aligned. You wouldn't bump one without the other, but you can bump both without bumping core semconv versions or requiring syncing beyond that scope.

The owners of the instrumentation and the owners of the "federated semconv" would be the same set of folks.

The wording in the Contrib Stability section would be updated appropriately here as well.


This is a scenario that exists today in open source observability. As
`schema_url` becomes more widely adopted, we expect backends to support
automatic or semi-automatic (e.g agent-aided) transitions and translations to handle this problem.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

how can we say that backends will use these agent-aided transformations? That seems like something that certain vendors such as companies that have privileged foundation model access a competitive advantage. This seems unfair.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good point, and not the real intention here.

The agent-aided meant we may want to start leveraging agents within open-telemetry to define transitions at definition time, and publicizing these transitions for everyoen to consume without agents. We cannot have agent-in-the-loop on hot paths, that's intractable. Leveraging an agent to help improve the coverage of how many version transitions we can safely provide is what this was intended to mean.

The true goal is that we have an open model and easy-to-use transition "definition" that folks can consume to translate between versions of schema, or even (if we're successful) between different schema-urls entirely.

That's still experimental / long-term exploration for the project. For now, we have targeted version-bump transitions as something we believe we can provide automatic transition model that should NOT be costly unfair for the ecosystem to adopt.

### Automatic Schema Transformation

Tooling (like `weaver`) could automatically generate the necessary OTLP transformations when a user moves from a Platform Release `2026.1` to `2026.2`. We could also
leverage `weaver`'s MCP server to automatically generate OTLP transformation and configuration today as tooling to help with major version bumps needed in OpenTelemetry

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I'm not familiar with the weaver MCP server. How does this work?

@jsuereth jsuereth Mar 6, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Today it's pretty light. You run weaver mcp and it will load in a registry and allow the agent to interact with a version of semantics and lookup the model, definitions, notes, etc. It can also run live-check to enforce conformance on the version. We hope to expand this further to be more of an aide when defining conventions and allow more ad-hoc agent-initiated flows, e.g. "Help me create a semantic convention registry from this integration test"

@github-actions

Copy link
Copy Markdown

This PR was marked stale. It will be closed in 14 days without additional activity.

@github-actions github-actions Bot added the Stale label Mar 21, 2026
Comment thread oteps/4906-federated-semantic-conventions-lifecycle.md
### 8. Won't this lead to "version fatigue" if instrumentation libraries have to major bump frequently to adopt federated registry changes?
No. Instrumentation libraries in OpenTelemetry are subject to the [specification's versioning and stability policies](/specification/versioning-and-stability.md). These policies strongly discourage frequent major version bumps and require minimum support periods (e.g., one year for contrib/instrumentation packages) for older major versions. This inherent bias towards stability ensures that instrumentation libraries do not adopt breaking changes from federated registries at a high cadence. Instead, maintainers will typically batch such changes or only adopt them when the value to users clearly outweighs the significant cost of a major release and the subsequent long-term support requirement.

### 9. Where will federated semantic convention registries reside?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It would also be nice to think through where the code generators and generated code would live. Would the existing language generators also track and generate federated repos, or would they need to publish their generation artifacts (e.g. templates) in a way that is consumable (and stable?) for federated semconv publishers to use to generate their own stuff? Presumably we don't want federated publishers to also have to write their own code generators.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Code generators - https://github.com/open-telemetry/opentelemetry-weaver-packages

Generated code - perhaps this needs more though. My expectation was it would live beside the instrumentation that exists today. I think that should be sufficient.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Got it. So stuff like https://github.com/open-telemetry/opentelemetry-go/tree/main/semconv/templates/registry/go would need to be replicated in each federated semconv area? Or is go the only ones that have our templates stored in our repo?

Comment thread oteps/4906-federated-semantic-conventions-lifecycle.md
@github-actions github-actions Bot removed the Stale label Mar 22, 2026
@github-actions

github-actions Bot commented Apr 7, 2026

Copy link
Copy Markdown

This PR was marked stale. It will be closed in 14 days without additional activity.

@github-actions github-actions Bot added the Stale label Apr 7, 2026
#### Independent Versioning
- It releases `v2.0.0` of the `jvm` federated registry.
- This release is **completely independent** of the core `semconv` registry (which might still be at `v1.45.0`) and other registries like `http` or `messaging`.
- Users who want the new JVM metrics can opt-in by utilizing declarative configuration mechanisms (e.g., `version: 2`, `dual_emit: true`).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What does "both conventions" mean, though? Some prior version of the jvm federated registry? The vestigial conventions in the semconv registry?


- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.
- **Breaking Changes**: If an instrumentation library adopts a new major version of a federated registry that results in breaking changes to its OTLP output, the library ITSELF must perform a major version bump. For example, if `opentelemetry-java-instrumentation` moves from `jvm/v1` to `jvm/v2`, it must release a new major version of its instrumentation package.
- **Stable by Default**: Following OTEP 4813, instrumentation can be marked as stable once its code and OTLP output are production-ready, this means marking any federated registry as stable, in tandem with the library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This feels like the opposite of how I understood the proposal in #4813. That seemed to say that instrumentation libraries should declare themselves stable without regard to the stability of the semantic conventions they use. This seems to be saying that semantic conventions used by stable instrumentation libraries must be, by definition, stable. What of an instrumentation library that is "stable" but for dependence on semantic conventions that are "experimental"?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You can see my back and forth about #4813 - That was the wrong impression and the wording (should be corrected).

The goal is that insrumetnation can declare stability prior to core semconv declaring stability, but that instrumentation must then maintain its own stability of what it produces. This is the mechanism for how.

1. **Incubating**: Registry exists outside the core, managed by a specific language-agnostic SIG (e.g., GenAI). It uses a unique namespace, both for schema_url (e.g., `opentelemetry.io/schemas/jvm`) and for signals/attributes (e.g. `jvm`).
2. **Maturity Progression**: The federated registry progresses through `development` -> `beta` -> `stable` according to its own usage and feedback.
3. **Criteria for Promotion**: To be merged into core `semconv`, a federated registry MUST:
- Reach `stable` status, and remain backwards compatible for a full year.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does making major version bumps when required count as remaining backward compatible? If not I'd fear that such a time-in-grade requirement could lead to intentional stagnation.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure I parse what you are asking.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If the jvm conventions have been stable for 6mo and want to be merged into core, but recognize a need for a breaking change can they do so with a MV bump without resetting the clock on that 1y timer? Put another way, does "Reach stable status, and remain backwards compatible for a full year" mean the highest MV must be >1 and at least one year old or does it mean that v1.0 must be at least one year old and any breaking changes appropriately incremented the MV? If the former, would they be incentivized to sit on a change for 6mo to get v1.x into core before releasing v2.x? Is that the incentive we want?

No. Engaging with `schema_url` and federated registries is optional. OpenTelemetry continues to work as-is for users who do not require automated schema transformation or validation. Existing observability ecosystems suffer from these same semantic fragmentation issues today, but they are typically only discovered at the storage or query layer. This proposal provides the metadata necessary to *address* these issues upstream, but it does not mandate that every SDK or Collector component must be schema-aware.

### 8. Won't this lead to "version fatigue" if instrumentation libraries have to major bump frequently to adopt federated registry changes?
No. Instrumentation libraries in OpenTelemetry are subject to the [specification's versioning and stability policies](/specification/versioning-and-stability.md). These policies strongly discourage frequent major version bumps and require minimum support periods (e.g., one year for contrib/instrumentation packages) for older major versions. This inherent bias towards stability ensures that instrumentation libraries do not adopt breaking changes from federated registries at a high cadence. Instead, maintainers will typically batch such changes or only adopt them when the value to users clearly outweighs the significant cost of a major release and the subsequent long-term support requirement.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm also not sure this aligns with the Contrib Stability section of the versioning and stability doc:

Plugins, instrumentation, and other contrib packages SHOULD be kept up to date and compatible with the latest versions of the API, SDK, and Semantic Conventions. If a release of the API, SDK, or Semantic Conventions contains changes which are relevant to a contrib package, that package SHOULD be updated and released in a timely fashion.

If the relevant federated semconv decides to ship new major versions every other Tuesday because they're post-1.x and yet have attributes or telemetry that are in flux then it seems like the instrumentation libraries that depend on it would also be expected to ship new major versions frequently. Maybe that's something we'd want the TC to put a stop to, but it does seem like an expected result of a combined push for "stable semver" and "faster evolution".

@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown

This PR was marked stale. It will be closed in 14 days without additional activity.

@github-actions github-actions Bot added Stale and removed Stale labels May 7, 2026
@jsuereth
jsuereth marked this pull request as ready for review May 22, 2026 12:37
@jsuereth
jsuereth requested review from a team as code owners May 22, 2026 12:37
run: weaver registry check \
-r {my_registry_dir} \
-p https://github.com/open-telemetry/opentelemetry-weaver-packages.git[policies/check/naming_conventions] \
-p https://github.com/open-telemetry/opentelemetry-weaver-packages.git[policies/check/stability] \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can / should the checks use versioned opentelemetry-weaver-packages?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Absolutely! We need to cut our first release of that repo

Instrumentation libraries "own" the stability of the OTLP they produce. To maintain this stability:

- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.
- **Breaking Changes**: If an instrumentation library adopts a new major version of a federated registry that results in breaking changes to its OTLP output, the library ITSELF must perform a major version bump. For example, if `opentelemetry-java-instrumentation` moves from `jvm/v1` to `jvm/v2`, it must release a new major version of its instrumentation package.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

then subsequently needs to backfill support for an older version

@mikeldking Are you asking about backporting a semconv breaking change to an older instrumentation version?

Comment on lines +135 to +136
- The old federated `schema_url` manifest is updated to simply reexport the new core `semconv` version. This ensures that existing OTLP data continues to work seamlessly with consumers of
the previous registry.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How would we communicate that the federated semconv has merged into core?
How would we ensure that users can discover that further versions are available in core?
Would the federated manifests keep getting new versions for every core semconv version or would it include a flag moved_to?
For sure its repo could show a message in the README and a message in its last release before being archived.
Is this sufficient or should new semconv version in core be programmatically discoverable?

**Example Platform Release Manifest (`OpenTelemetry 2026.1`):**

```yaml
file_format: platform/1.0.0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How would federated registries not hosted under opentelemetry interact with the platform release?
Eg a corporate registry declares dependencies on the core otel and jvm registries, could the corporate registry use the platform release manifest as a dependency or would they need to update their own registry dependency manifest to use the platform release versions?


## Goals

1. **Independent Lifecycle**: Enable domain-specific semantic convention registries to have their own SemVer lifecycle.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Removing an opt-in attribute would still be breaking for those users that have opted-in.

@lmolkova lmolkova left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, this is effectively being done in GenAI SIG https://github.com/open-telemetry/semantic-conventions-genai/ which can serve as a prototype

**Example Platform Release Manifest (`OpenTelemetry 2026.1`):**

```yaml
file_format: platform/1.0.0

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: do you think we have to have a new type of manifest (platform)?

This is essentially publication manifest with import * from all dependencies.
I imagine the core difference is that this is never published as a registry and does not have schema url


For third-party or experimental registries, authors are encouraged to use their own domains (e.g., `acme.com/schemas/`) to avoid collisions. The `weaver` tool will also validate that a registry does not redefine attributes or signals already present in its dependencies, so any OpenTelemetry registry MUST depend on the core `semantic-conventions` registry.

To aid in discoverability and prevent conflicts, the core `semantic-conventions` repository will maintain a centralized list of all known federated registries. This list can be used by automated tooling to periodically validate all federated registries together, identifying any unintended collisions or running tests against the latest core.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we would essentially own platform release in semconv. The platform release will also ensure that there are no collisions between otel-hosted registries

as we do today, due to needing finer-grained `schema_url` tracking. To
know if this is true, we need feedback from instrumentation SIGs on how
they are leveraging instrumentation scope today.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

One thing we didn't consider yet is semconv libs generation: whether there should be a semconv lib per federated registry and/or one lib for all applicable registries.

I think a viable approach for language SIGs to have one user-facing lib with a curated list of registries applicable to their ecosystem (e.g. JVM metrics are only important for Java, maybe Kotlin and Android ecosystems but not for Python).

@github-actions

Copy link
Copy Markdown

This PR was marked stale. It will be closed in 14 days without additional activity.

@github-actions github-actions Bot added the Stale label Jun 12, 2026
@lmolkova lmolkova removed the Stale label Jun 17, 2026

As OpenTelemetry's semantic conventions expand, a monolithic registry and versioning scheme create friction:
1. **Slow Evolution**: Highly specialized or domain-specific conventions (e.g., JVM metrics, cloud-provider-specific resources) are often gated by the slower stabilization process of the core registry.
2. **Coupled Breaking Changes**: A major version bump in one sub-domain (e.g., a total overhaul of database conventions) should not force the entire OpenTelemetry ecosystem to adopt a major version bump.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

As an alternative to a transform layer running always, I wish to see more-flexible ways to reconfigure static transforms over original instrumentation. In other words, to modify the telemetry at the start instead of in a pipeline (ideally using code generated from the semantic conventions).

@MrAlias MrAlias left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for writing this up. I think federation is a useful direction, but from the Go semantic-convention implementation side I do not think this OTEP yet gives language maintainers enough contract to implement it cleanly.

Today Go has a simple generated-package model: users choose a semantic convention version and import a versioned package such as go.opentelemetry.io/otel/semconv/v1.42.0. That package is generated from the corresponding core semantic-conventions release and contains helpers for HTTP, RPC, messaging, database, system, process, resources, and so on. If GenAI, MCP, OpenAI, JVM, or future domains move into independent release streams with independent schema URLs, Go needs to know whether those become separate generated packages, one curated language package, a platform-release package, or something else.

The sharpest blocker is the schema URL model for mixed telemetry. Existing Go instrumentation already emits attributes from multiple semantic-convention namespaces in one instrumentation scope. HTTP instrumentation emits http.*, url.*, server.*, network.*, and error.type; AWS SDK v2 emits rpc.*, aws.*, messaging.*, db.*, and server.*; MongoDB emits db.* and network.*; gRPC metrics combine RPC conventions with server.* attributes and compatibility modes. Resource detectors are even more mixed: AWS ECS, GCP, Azure VM, and the built-in Go SDK resource providers combine namespaces such as cloud.*, container.*, k8s.*, faas.*, host.*, os.*, service.*, process.*, and telemetry.sdk.*.

That all works today because the active conventions are covered by one core schema URL, or in several contrib instrumentations no schema URL is set on the scope at all. Under federation, it is not clear whether the schema URL for mixed telemetry should be the owning registry for the span/metric/log, a resolved closure of that registry plus dependencies, a platform release, or blank/schemaless on conflict. This needs to be specified before we can tell Go users which generated package to import or which SchemaURL instrumentation should use.

Before approving this, I think the OTEP needs to make the following explicit: how shared cross-cutting attributes such as server.*, network.*, error.type, cloud.*, host.*, service.*, process.*, and os.* are owned; how dependency schema URLs are resolved when attributes from different registries appear on the same scope or resource; how diamond dependencies map to language artifacts where latest wins is not how imports work; how resources with attributes from different schema URLs are represented; and how language packages, generated code, discovery, and version pairing are expected to work for GenAI and future federated registries.

I am not opposed to federation, but without those answers the OTEP leaves the hardest interoperability questions to language SIGs and instrumentation authors to infer independently.


#### Registry Requirements

- The registry MUST declare a dependency on core semantic conventions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think this needs to define what dependency means for schema URLs and generated language artifacts. If a federated registry depends on core semantic conventions, does its schema URL identify only the local registry, or a resolved closure that also covers the dependency attributes it uses?

For Go this is not just a manifest detail. Generated semconv packages are versioned import paths, so a future genai/v0.x.0 package and semconv/v1.42.0 package would expose separate constants and helpers. The OTEP should say whether instrumentation using a federated registry should use the federated SchemaURL, the core SchemaURL, a platform-release schema URL, or something else when it emits attributes from both.


Instrumentation libraries "own" the stability of the OTLP they produce. To maintain this stability:

- **Pinning**: An instrumentation library MUST specify the `schema_url` of the federated registry version it targets in its `Scope` metadata, via `get {Meter|Tracer|Logger}` operations.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is underspecified for instrumentation that emits mixed semantic-convention namespaces from one scope. Existing Go contrib instrumentation already does this: HTTP emits http.*, url.*, server.*, network.*, and error.type; AWS SDK v2 emits rpc.*, aws.*, messaging.*, db.*, and server.*; MongoDB emits db.* and network.*; gRPC metrics combine RPC conventions with server.* attributes.

Since a Tracer/Meter/Logger scope has one schema URL, the OTEP needs to say which schema URL such instrumentation should set. If the answer is the federated registry's schema URL, then that URL needs to be defined as a resolved schema that also covers dependency attributes. If not, language maintainers need the alternative rule.


Federated registries follow a standard path toward consolidation to ensure the core specification remains cohesive:

1. **Incubating**: Registry exists outside the core, managed by a specific language-agnostic SIG (e.g., GenAI). It uses a unique namespace, both for schema_url (e.g., `opentelemetry.io/schemas/jvm`) and for signals/attributes (e.g. `jvm`).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This unique-namespace rule does not explain shared cross-cutting conventions. Namespaces such as server, network, error, url, cloud, host, service, process, and os are not naturally tied to one span/metric/log domain, and current instrumentation and resource detectors reuse them across domains.

If the intended atom is the span, metric, or log, where do these shared attribute groups live? If they remain core, the OTEP should say that federated registries depend on core for these groups. If they can themselves federate, the OTEP needs a rule for instrumentation that combines a domain registry with one or more shared registries.

- Have a formal review and approval from the Semantic Conventions SIG.
4. **Consolidation**: The promoted conventions are merged into the core `semconv` registry.
- A new version of core `semconv` is released (e.g., `v1.50.0`).
- The old federated `schema_url` manifest is updated to simply reexport the new core `semconv` version. This ensures that existing OTLP data continues to work seamlessly with consumers of

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The reexport story needs to be more precise for language artifacts and user discovery. If gen_ai.* starts in a federated Go package and later moves into core semconv/v1.N.0, what happens to the old package's SchemaURL, generated helpers, documentation, and import path? Should the old federated package keep releasing wrappers, expose a moved_to signal, or stop at the last federated version?

Without a programmatic migration/discovery rule, users will not know whether to keep importing the federated package or move to the core semconv package after promotion.


### 2. What happens if two instrumentation libraries depend on different, incompatible versions of the same federated registry?

This is a classic "diamond dependency" problem. OpenTelemetry's Schema v2 (OTEP 4815) handles this via the "latest version wins" resolution at the collector or consumer level, provided the changes are backward compatible. For breaking changes (major version bumps), the telemetry remains unambiguous because each library pins its specific `schema_url`. A consumer (e.g., the Collector) can process both signals independently using the metadata provided in the OTLP `Resource` or `Scope`. This is no worse than the same issue today, where we rely on storage to figure out these conflicts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

latest version wins is not enough of a resolution rule for language implementations. In Go, semantic convention versions are import paths, not dependency constraints that a solver collapses to one version. A program can import go.opentelemetry.io/otel/semconv/v1.42.0, another package can import v1.43.0, and a future GenAI package might depend on a particular core semconv version.

The OTEP should define what language maintainers expose when a federated registry depends on core 1.42.0 but the rest of an application or instrumentation set uses core 1.43.0. The answer may be a resolved federated schema, a platform-release artifact, or separate package constants, but it needs to be explicit.


### 7. Does this increase the implementation burden for SDKs and the Collector?

No. Engaging with `schema_url` and federated registries is optional. OpenTelemetry continues to work as-is for users who do not require automated schema transformation or validation. Existing observability ecosystems suffer from these same semantic fragmentation issues today, but they are typically only discovered at the storage or query layer. This proposal provides the metadata necessary to *address* these issues upstream, but it does not mandate that every SDK or Collector component must be schema-aware.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I do not think the implementation burden is optional for language SIGs. Even if SDKs do not perform schema transformations, language maintainers still need to decide how generated semconv packages are published, how users discover which package owns a namespace, how package versions pair with core versions, and which SchemaURL constants instrumentation should use for mixed telemetry.

This should be part of the OTEP's compatibility contract rather than left as language-specific interpretation.


### 12. What is the impact on telemetry overhead and storage costs?

We may not be able to re-use `InstrumentationScope` in as many places

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This should also cover resources, not only InstrumentationScope. Existing Go resource detectors commonly create one resource containing attributes from multiple namespaces: AWS ECS combines cloud.*, container.*, AWS ECS, and AWS log attributes; GCP combines cloud.*, k8s.*, faas.*, host.*, and GCP attributes; Azure VM combines cloud.*, host.*, and os.*; built-in Go SDK providers cover service.*, telemetry.sdk.*, host.*, process.*, os.*, and container.*.

The Go SDK already treats different non-empty resource schema URLs as a merge conflict and returns a schemaless merged resource. If federation can assign different schema URLs to those attribute groups, the OTEP needs to say whether resources use a resolved schema URL, a platform schema URL, no schema URL, or some other rule.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

This PR was marked stale. It will be closed in 14 days without additional activity.

@github-actions github-actions Bot added the Stale label Jul 8, 2026
@github-actions

Copy link
Copy Markdown

Closed as inactive. Feel free to reopen if this PR is still being worked on.

@github-actions github-actions Bot closed this Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants