Skip to content

fix(openfeature): consume isolated malformed flags - #19626

Closed
leoromanovsky wants to merge 9 commits into
mainfrom
agent/isolate-malformed-flags
Closed

fix(openfeature): consume isolated malformed flags#19626
leoromanovsky wants to merge 9 commits into
mainfrom
agent/isolate-malformed-flags

Conversation

@leoromanovsky

Copy link
Copy Markdown
Contributor

Motivation

The canonical FFE corpus now verifies malformed-flag isolation and SemVer build-metadata precedence. Python should consume those shared fixes from libdatadog instead of duplicating evaluator behavior.

Changes

  • integrate the canonical fixture submodule and pin it to ea8b5cc5ce335109f11f3efbc5fd608f98a3ca54
  • pin all libdatadog native dependencies to a0f522622fc946c1079a384324a6e45573877ae6
  • regenerate the native Cargo lockfile
  • assert canonical error codes and remove the vendored fixture copy
  • add a release note for corrected SemVer build-metadata precedence

Decisions

  • keep Python's existing FFI error mapping unchanged
  • pin every libdatadog crate together to avoid duplicate revisions and shared-type conflicts
  • make fix(ffe): report malformed flags as parse errors libdatadog#2343 own malformed isolation, parse-error mapping, and SemVer precedence
  • keep the separate regex-fixture proposal in ffe-system-test-data#21 out of scope

Validation

  • OpenFeature suite after a forced native rebuild: 697 passed, 2 skipped
  • cargo fmt --all -- --check
  • cargo metadata --locked --no-deps
  • Python formatting, suitespec, release-note spelling, and diff checks

Depends on DataDog/libdatadog#2343.

@cit-pr-commenter-54b7da

Copy link
Copy Markdown

Dependency direction analysis

⚠️ Existing dependency direction violations

There are 256 dependency direction violations that already exist on the base branch and have not been changed by this PR.

Show existing violations (showing 5 of 256 highest severity)
ddtrace.internal.tracemethods -×-> ddtrace.trace  (internal-core -> product:tracing, score=134)
ddtrace.internal.opentelemetry.span -×-> ddtrace.trace  (product:opentelemetry -> product:tracing, score=132)
ddtrace.llmobs._telemetry -×-> ddtrace.trace  (product:llmobs -> product:tracing, score=132)
ddtrace.llmobs._integrations.pydantic_ai -×-> ddtrace.trace  (product:llmobs -> product:tracing, score=132)
ddtrace.llmobs._integrations.google_adk -×-> ddtrace.trace  (product:llmobs -> product:tracing, score=132)

To see all violations, download the layers-base.json and layers-pr.json artifacts from this CI job and run:

uv run --script scripts/import-analysis/layers.py compare layers-base.json layers-pr.json

@cit-pr-commenter-54b7da

Copy link
Copy Markdown

Circular import analysis

⚠️ Existing circular imports

There are 7 circular imports that already exist on the base branch and have not been changed by this PR.

Show existing cycles (showing 5 of 7 shortest)
ddtrace.appsec._common_module_patches -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches
ddtrace.contrib.internal.django.patch -> ddtrace.contrib.internal.django.response -> ddtrace.contrib.internal.django.patch
ddtrace.contrib.internal.pytorch._distributed -> ddtrace.contrib.internal.pytorch._rank_root -> ddtrace.contrib.internal.pytorch._distributed
ddtrace.aiguard._api_client -> ddtrace.aiguard._redaction -> ddtrace.aiguard._api_client
ddtrace.llmobs -> ddtrace.llmobs._evaluators -> ddtrace.llmobs._evaluators.format -> ddtrace.llmobs._experiment -> ddtrace.llmobs

To see all cycles, download the cycles-base.json and cycles-pr.json artifacts from this CI job and run:

uv run --script scripts/import-analysis/cycles.py compare cycles-base.json cycles-pr.json

@datadog-prod-us1-4

datadog-prod-us1-4 Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Pipelines  Tests

⚠️ Warnings

🚦 9 Pipeline jobs failed

DataDog/apm-reliability/dd-trace-py | build linux serverless: [amd64, cp315-cp315, v113741238-d2b8243-manylinux2014_x86_64, 1]   View in Datadog   GitLab

DataDog/apm-reliability/dd-trace-py | build linux serverless: [arm64, cp315-cp315, v113741357-d2b8243-manylinux2014_aarch64, 1]   View in Datadog   GitLab

DataDog/apm-reliability/dd-trace-py | build linux serverless: [arm64, cp315-cp315, v126532182-233089d-musllinux_1_2_aarch64, 1]   View in Datadog   GitLab

View all 9 failed jobs.

ℹ️ Info

No other issues found (see more)

🧪 All tests passed
❄️ No new flaky tests detected

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: b2c8cc9 | Docs | Datadog PR Page | Give us feedback!

@cit-pr-commenter-54b7da

Copy link
Copy Markdown

Codeowners resolved as

Resolved from the full PR diff against main using the target branch CODEOWNERS file.
CODEOWNERS team requests not listed below are not required by the current file set.

.github/dependabot.yml                                                  @DataDog/python-guild @DataDog/apm-core-python
.gitmodules                                                             @DataDog/apm-core-python
releasenotes/notes/openfeature-semver-build-metadata-6a5c429dcd884a36.yaml  @DataDog/apm-python
src/native/Cargo.lock                                                   @DataDog/apm-core-python
src/native/Cargo.toml                                                   @DataDog/apm-core-python
tests/openfeature/test_provider_fixtures.py                             @DataDog/feature-flagging-and-experimentation-sdk
tests/suitespec.yml                                                     @DataDog/python-guild

Copy link
Copy Markdown
Contributor Author

Superseded by #19627. The replacement keeps the same final tree on a clean non-merge history so Reno sees the release-note UID once, and it pins the already-green libdatadog contract fix from DataDog/libdatadog#2339.

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.

1 participant