Skip to content

Require spec changes to consider declarative config schema#4916

Merged
jack-berg merged 8 commits intoopen-telemetry:mainfrom
jack-berg:declarative-configuration-first
Apr 7, 2026
Merged

Require spec changes to consider declarative config schema#4916
jack-berg merged 8 commits intoopen-telemetry:mainfrom
jack-berg:declarative-configuration-first

Conversation

@jack-berg
Copy link
Copy Markdown
Member

With declarative configuration stable (#4374), I propose adjusting the spec contribution process to be "declarative config first".

What this means: If a spec PR is proposing changes to an SDK component's configuration surface area, it should include a reference to an PR against opentelemetry-configuration to propose corresponding changes to the declarative config schema.

Why this is important:

  • Ensures spec PRs are evaluated holistically. The declarative config schema is on track to become a crucial cross-language user facing API for the whole project. Operators can't or don't want to modify source code to use the programmatic API, and env vars are insufficient for non-trivial setups. By doing this, we add UX evaluation criteria in addition to the existing conceptual criteria.
  • Ensures declarative config schema stays in sync with the spec.
  • Helps drive consistency across language implementations, since its much harder to misinterpret / reinterpret a feature when there's a config schema spec to adhere to.
  • Further incentivizes the remaining languages to implement declarative config, helping the project achieve its mission of telemetry concepts being universal across languages.

cc @open-telemetry/configuration-approvers

@jack-berg jack-berg requested review from a team as code owners March 6, 2026 16:56
Comment thread CONTRIBUTING.md
Comment thread CONTRIBUTING.md
@dyladan
Copy link
Copy Markdown
Member

dyladan commented Mar 9, 2026

I wonder if we're at a point that it makes sense to merge the config into the spec? I think it is likely a lot easier to keep things in sync if a single PR can make both changes. Otherwise we can run into a deadlock situation where spec is waiting for config and config is waiting for spec.

@jack-berg
Copy link
Copy Markdown
Member Author

I wonder if we're at a point that it makes sense to merge the config into the spec?

In similar situations in the past, we've tended to move logical chunks out of the spec rather than into it. E.g. semantic conventions, OTLP. However, we did bring OTEPs into the spec from a separate repo.

Otherwise we can run into a deadlock situation where spec is waiting for config and config is waiting for spec.

It shouldn't be deadlock it we treat synchronizing config changes as guidance rather than a mandate. Related convo here.

@dyladan
Copy link
Copy Markdown
Member

dyladan commented Mar 9, 2026

In similar situations in the past, we've tended to move logical chunks out of the spec rather than into it. E.g. semantic conventions, OTLP. However, we did bring OTEPs into the spec from a separate repo.

I think the main difference between config and OTLP/SemConv is that changes to the spec are not blocked on required changes in those places. Spec defines a data model/SDK/API and the proto is an implementation of the spec same as the language client libraries. This change proposes that config is required for spec, which implies that it is a part of the spec, not an implementation of it. In that way it is more similar to OTEPs.

@jack-berg
Copy link
Copy Markdown
Member Author

This change proposes that config is required for spec

That's not my intent and I'll need to adjust the language if that's not clear. I view the relationship as similar to the prototyping requirement for spec PRs. "Prove that this idea can be reasonably implemented in the config schema and what that would look like so that we can properly evaluate it"

There could be merit in strengthening this and having a strict coupling like you're suggesting. The main downside to that I see is that at this point, the spec maintainers (i.e. the TC) aren't experts in the opentelemetry-configuration tooling - i.e. JSON schema and some custom scripting for compiling and validating the schema.

@carlosalberto
Copy link
Copy Markdown
Contributor

In similar situations in the past, we've tended to move logical chunks out of the spec rather than into it. E.g. semantic conventions, OTLP. However, we did bring OTEPs into the spec from a separate repo.

I'm imagining a new user who has a nice idea and the time to help with it, but suddenly he has to work with TWO repos. Imagine if he adds something to semconv too? That's working with THREE repositories, with potentially different people).

(Not saying we should put everything back, but I think we should understand the ramifications. For somebody involved in OTel it won't be hopefully hard to keep track of related PRs, but somebody may suffer some pain).

Copy link
Copy Markdown
Member

@dyladan dyladan left a comment

Choose a reason for hiding this comment

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

Approving this because I think the core idea of "spec changes must consider config" is a good one. The fact it is a separate repo is an implementation detail for now that can be changed, or not, later if desired.

As far as it raising the barrier to spec contribution by stipulating spec authors must learn config process and tooling, I think that's a completely reasonable barrier to erect. In the past it has always ben the de facto process that spec authors create their own config spec by adding env vars and such where appropriate, it was just less formalized.

@marcalff
Copy link
Copy Markdown
Member

  • Helps drive consistency across language implementations, since its much harder to misinterpret / reinterpret a feature when there's a config schema spec to adhere to.

+1 here

@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 25, 2026
@marcalff marcalff removed the Stale label Mar 25, 2026
@jack-berg
Copy link
Copy Markdown
Member Author

@open-telemetry/technical-committee please take a look. Since this is a point of process, I think this is primarily a TC concern. I don't believe there are any blockers since I opened #4935 to decouple the conversation about whether the configuration data model should be merged into the spec.

Comment thread CONTRIBUTING.md Outdated
@carlosalberto
Copy link
Copy Markdown
Contributor

Approving as I think this is the right direction - whether the config repository is merged into the Specification is something we can tune if/when needed.

@jack-berg jack-berg added Skip Changelog Label to skip the changelog check and removed Skip Changelog Label to skip the changelog check labels Apr 3, 2026
@jack-berg
Copy link
Copy Markdown
Member Author

Will merge after the 4/7 spec SIG if there are no additional comments.

@jack-berg
Copy link
Copy Markdown
Member Author

Added 9b916d5 to update the PR template, which was a good recommendation @dashpole made in the 4/7 spec SIG

@jack-berg jack-berg enabled auto-merge April 7, 2026 18:23
@jack-berg jack-berg added this pull request to the merge queue Apr 7, 2026
Merged via the queue into open-telemetry:main with commit 93493bb Apr 7, 2026
9 checks passed
@jack-berg jack-berg deleted the declarative-configuration-first branch April 7, 2026 18:48
vitorvasc pushed a commit to vitorvasc/opentelemetry-specification that referenced this pull request Apr 8, 2026
…metry#4916)

With declarative configuration stable (open-telemetry#4374), I propose adjusting the
spec contribution process to be "declarative config first".

**What this means:** If a spec PR is proposing changes to an SDK
component's configuration surface area, it should include a reference to
an PR against `opentelemetry-configuration` to propose corresponding
changes to the declarative config schema.

**Why this is important:**

- Ensures spec PRs are evaluated holistically. The declarative config
schema is on track to become a crucial cross-language user facing API
for the whole project. Operators can't or don't want to modify source
code to use the programmatic API, and env vars are insufficient for
non-trivial setups. By doing this, we add UX evaluation criteria in
addition to the existing conceptual criteria.
- Ensures declarative config schema stays in sync with the spec.
- Helps drive consistency across language implementations, since its
much harder to misinterpret / reinterpret a feature when there's a
config schema spec to adhere to.
- Further incentivizes the remaining languages to implement declarative
config, helping the project achieve its mission of [telemetry concepts
being universal across
languages](https://opentelemetry.io/community/mission/#telemetry-should-be-universal).

cc @open-telemetry/configuration-approvers

Signed-off-by: Vitor Vasconcellos <vvasconcellos1@gmail.com>
@carlosalberto carlosalberto mentioned this pull request Apr 15, 2026
pull Bot pushed a commit to MC-MAGA/opentelemetry-specification that referenced this pull request Apr 20, 2026
### Context

- Align environment variable context propagation name restrictions with
POSIX.1-2024
  and define normalization behavior.

([open-telemetry#4944](open-telemetry#4944))
- Decouple the responsibilities of the environment variable propagation
carrier.

([open-telemetry#4961](open-telemetry#4961))
- Remove misleading implementation approach the environment variable
propagation.

([open-telemetry#5003](open-telemetry#5003))
- Change Environment Variables as Context Propagation Carriers document
status to Beta.

([open-telemetry#5020](open-telemetry#5020))

### Traces

- Stabilize Tracer `enabled` operation

([open-telemetry#4941](open-telemetry#4941))
- Stabilize `AlwaysRecord` sampler.

([open-telemetry#4934](open-telemetry#4934))

### Metrics

- Add development `maxExportBatchSize` parameter to Periodic exporting
MetricReader.

([open-telemetry#4895](open-telemetry#4895))

### Logs

- Add event to span event bridge.

([open-telemetry#5006](open-telemetry#5006))

### Resource

- Clarify that a Resource describes the observed entity, not the
component
  that technically emits telemetry.

([open-telemetry#4905](open-telemetry#4905))

### Compatibility

- Deprecate OpenTracing compatibility requirements in the specification.

([open-telemetry#4938](open-telemetry#4938))
- Stabilize sections of Prometheus and OpenMetrics Compatibility.
- Stabilize Prometheus Classic Histogram to OTLP Explicit Histogram
transformation.

([open-telemetry#4874](open-telemetry#4874))
  - Stabilize Prometheus Timestamp and Start timestamp transformation.

([open-telemetry#4953](open-telemetry#4953))
- Clarify Prometheus Native Histogram to OTLP Exponential Histogram
conversion,
add conversion rules for Native Histograms with Custom Buckets (NHCB) to
OTLP
    Histogram.

([open-telemetry#4898](open-telemetry#4898))
  - Stabilize Prometheus Dropped Types transformation.

([open-telemetry#4952](open-telemetry#4952))
- Stabilize OpenTelemetry Attributes to Prometheus labels
transformation.

([open-telemetry#4963](open-telemetry#4963))
- Stabilize Prometheus Exemplar to OpenTelemetry Exemplar
transformation.

([open-telemetry#4962](open-telemetry#4962))
  - Stabilize Prometheus Metadata transformation.

([open-telemetry#4954](open-telemetry#4954))
- Stabilize OpenTelemetry Metric Metadata to Prometheus metric metadata.

([open-telemetry#4966](open-telemetry#4966))
- Stabilize OpenTelemetry Exemplar to Prometheus Exemplar
transformation.

([open-telemetry#4964](open-telemetry#4964))
- Stabilize sections of Prometheus Metrics Exporter.
  - Stabilize host configuration.

([open-telemetry#5025](open-telemetry#5025))

### SDK Configuration

- Declarative configuration: add in-development guidance for exposing
the
  effective `Resource` returned by `Create`.

([open-telemetry#4949](open-telemetry#4949))
- Require spec changes to consider declarative config schema

([open-telemetry#4916](open-telemetry#4916))
- Add strict YAML parsing guidance to configuration supplementary
guidelines.

([open-telemetry#4878](open-telemetry#4878))

### OTEPs

- Process Context: Sharing Resource Attributes with External Readers.

([open-telemetry#4719](open-telemetry#4719))
- Support multiple Resources within an SDK.

([open-telemetry#4665](open-telemetry#4665))

---------

Co-authored-by: Jack Berg <34418638+jack-berg@users.noreply.github.com>
hilmarf pushed a commit to apeirora/opentelemetry-specification that referenced this pull request Apr 22, 2026
### Context

- Align environment variable context propagation name restrictions with
POSIX.1-2024
  and define normalization behavior.

([open-telemetry#4944](open-telemetry#4944))
- Decouple the responsibilities of the environment variable propagation
carrier.

([open-telemetry#4961](open-telemetry#4961))
- Remove misleading implementation approach the environment variable
propagation.

([open-telemetry#5003](open-telemetry#5003))
- Change Environment Variables as Context Propagation Carriers document
status to Beta.

([open-telemetry#5020](open-telemetry#5020))

### Traces

- Stabilize Tracer `enabled` operation

([open-telemetry#4941](open-telemetry#4941))
- Stabilize `AlwaysRecord` sampler.

([open-telemetry#4934](open-telemetry#4934))

### Metrics

- Add development `maxExportBatchSize` parameter to Periodic exporting
MetricReader.

([open-telemetry#4895](open-telemetry#4895))

### Logs

- Add event to span event bridge.

([open-telemetry#5006](open-telemetry#5006))

### Resource

- Clarify that a Resource describes the observed entity, not the
component
  that technically emits telemetry.

([open-telemetry#4905](open-telemetry#4905))

### Compatibility

- Deprecate OpenTracing compatibility requirements in the specification.

([open-telemetry#4938](open-telemetry#4938))
- Stabilize sections of Prometheus and OpenMetrics Compatibility.
- Stabilize Prometheus Classic Histogram to OTLP Explicit Histogram
transformation.

([open-telemetry#4874](open-telemetry#4874))
  - Stabilize Prometheus Timestamp and Start timestamp transformation.

([open-telemetry#4953](open-telemetry#4953))
- Clarify Prometheus Native Histogram to OTLP Exponential Histogram
conversion,
add conversion rules for Native Histograms with Custom Buckets (NHCB) to
OTLP
    Histogram.

([open-telemetry#4898](open-telemetry#4898))
  - Stabilize Prometheus Dropped Types transformation.

([open-telemetry#4952](open-telemetry#4952))
- Stabilize OpenTelemetry Attributes to Prometheus labels
transformation.

([open-telemetry#4963](open-telemetry#4963))
- Stabilize Prometheus Exemplar to OpenTelemetry Exemplar
transformation.

([open-telemetry#4962](open-telemetry#4962))
  - Stabilize Prometheus Metadata transformation.

([open-telemetry#4954](open-telemetry#4954))
- Stabilize OpenTelemetry Metric Metadata to Prometheus metric metadata.

([open-telemetry#4966](open-telemetry#4966))
- Stabilize OpenTelemetry Exemplar to Prometheus Exemplar
transformation.

([open-telemetry#4964](open-telemetry#4964))
- Stabilize sections of Prometheus Metrics Exporter.
  - Stabilize host configuration.

([open-telemetry#5025](open-telemetry#5025))

### SDK Configuration

- Declarative configuration: add in-development guidance for exposing
the
  effective `Resource` returned by `Create`.

([open-telemetry#4949](open-telemetry#4949))
- Require spec changes to consider declarative config schema

([open-telemetry#4916](open-telemetry#4916))
- Add strict YAML parsing guidance to configuration supplementary
guidelines.

([open-telemetry#4878](open-telemetry#4878))

### OTEPs

- Process Context: Sharing Resource Attributes with External Readers.

([open-telemetry#4719](open-telemetry#4719))
- Support multiple Resources within an SDK.

([open-telemetry#4665](open-telemetry#4665))

---------

Co-authored-by: Jack Berg <34418638+jack-berg@users.noreply.github.com>
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.

8 participants