feat(openfeature): add agentless EVP fallback - #19868
Conversation
🎉 All green!🧪 All tests passed 🔗 Commit SHA: cf3e0e2 | Docs | View more details | Give us feedback! |
Dependency direction analysis
|
Codeowners resolved asResolved from the full PR diff against |
Circular import analysis
|
BenchmarksBenchmark execution time: 2026-08-26 09:14:00 Comparing candidate commit 045318c in PR branch Found 0 performance improvements and 9 performance regressions! Performance is the same for 577 metrics, 10 unstable metrics, 2 known flaky benchmarks, 16 flaky benchmarks without significant changes.
|
Keep the fallback transport focused on routing and API-key authentication; fingerprinting remains an independent feature. Environment: Datadog workspace
Keep the direct-intake diff free of fingerprint-only formatting changes. Environment: Datadog workspace
Treat an ambiguous local delivery as terminal for the current batch while routing later batches through direct intake. Environment: Datadog workspace
Reject URL and IDNA authority confusion before adding DD-API-KEY. Environment: Datadog workspace
Motivation
Python agentless Feature Flags must deliver exposure and flag-evaluation EVP payloads when no compatible local Agent EVP proxy route is available.
Linear: FFL-1487
Changes
/infoon the first event flush, preferring EVP v4 and then v2 before selecting direct intake.DD-API-KEYand honor HTTPS proxy andNO_PROXYconfiguration.DD_SITEas a bounded ASCII DNS name and verify the exact direct-intake hostname before attaching credentials.Decisions
Validation
The Python agentless system-test definition and enablement are in DataDog/system-tests#7592.
Ran the agentless direct exposure test against the freshly built branch artifact:
TEST_LIBRARY=python ./run.sh FEATURE_FLAGGING_AND_EXPERIMENTATION_AGENTLESS_DIRECT -F tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_DirectThe system test exercised config delivery and evaluation, then verified
/api/v2/exposuresused direct intake with the expected host, response status, API-key header, and route exclusion. The recorded local run covered the direct exposure row; it did not cover the sidecar or flag-evaluation rows.