From df81e98c3f7f7bdbb431f62c449887e2371b51d0 Mon Sep 17 00:00:00 2001 From: Vickie Boettcher Date: Thu, 29 Oct 2026 14:45:23 +0000 Subject: [PATCH 1/3] Enable validated Ruby and Python Agent flagevaluation cases Activate supported weblogs after forced evaluation and isolated accounting runs. Environment: Datadog workspace Co-Authored-By: Codex GPT-6 --- manifests/python.yml | 33 ++++++++++++++++++++++----------- manifests/ruby.yml | 7 ++++++- tests/ffe/README.md | 5 +++-- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/manifests/python.yml b/manifests/python.yml index dad2ff51d5b..9ce3145145b 100644 --- a/manifests/python.yml +++ b/manifests/python.yml @@ -2295,19 +2295,23 @@ manifest: excluded_weblog: [django-poc, uwsgi-poc, uds-flask, python3.12, django-py3.13, aiohttp, flask-poc, fastapi, tornado] tests/ffe/test_flag_eval_evp.py: v4.16.0-dev tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Basic: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Burst_Aggregation: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Context_Bounds: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Count: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Egress_Agentless_Direct: @@ -2325,31 +2329,38 @@ manifest: - declaration: missing_feature (FFL-2446) excluded_weblog: [django-poc, uwsgi-poc, uds-flask, python3.12, django-py3.13, aiohttp, flask-poc, fastapi, tornado] tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_High_Cardinality_Accounting: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_High_Cardinality_Aggregation: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Load_Aggregation: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_ObserveFullData_Absent_Hashed: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_ObserveFullData_False_Hashed: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_ObserveFullData_True_Unhashed: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Runtime_Default: - - declaration: missing_feature (FFL-2446) + - declaration: missing_feature (FFL-3509) + excluded_weblog: [flask-poc] - weblog_declaration: aiohttp: missing_feature (new weblog, tests are enabled with easy wins) tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_SDK_Identity: v4.16.0 diff --git a/manifests/ruby.yml b/manifests/ruby.yml index a52997ce7f9..4aa48bcad31 100644 --- a/manifests/ruby.yml +++ b/manifests/ruby.yml @@ -2163,7 +2163,12 @@ manifest: tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Caching_Serial_Id_Cycle: missing_feature (EX-3417) tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Caching_Serial_Id_Disappears: missing_feature (EX-3417) tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Serial_Id: missing_feature (EX-3417) - tests/ffe/test_flag_eval_evp.py: missing_feature (FFL-2446) + tests/ffe/test_flag_eval_evp.py: + - weblog_declaration: + "*": missing_feature (FFL-3509) + rails72: v2.43.0 + tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Egress_Agentless_Direct: missing_feature (Agentless activation is separate from FFL-3509) + tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Egress_Agentless_Sidecar: missing_feature (Agentless activation is separate from FFL-3509) tests/ffe/test_flag_eval_metrics.py: - weblog_declaration: "*": irrelevant diff --git a/tests/ffe/README.md b/tests/ffe/README.md index b813164dd61..d4826078d8b 100644 --- a/tests/ffe/README.md +++ b/tests/ffe/README.md @@ -38,8 +38,9 @@ The protobuf fixture `tests/parametric/test_ffe/rules-wire.json` comes from `ope `Test_FFE_EVP_Flagevaluation_SDK_Identity` checks SDK origin and version headers on Agent-to-intake captures while retaining the shared payload and evaluation-count checks. The case requires Agent 7.84+ and is enabled for Go 2.11.0+, Python 4.16.0+, and -Node.js express5 under its existing version gate. Other languages retain their -current exclusions. Event-level `source` is rejected: source identity belongs in +Node.js express5 under its existing version gate, and Ruby rails72 2.43.0+. +Python flask-poc also runs the remaining Agent-backed payload, context, privacy, +and aggregation cases from 4.16.0. Other weblogs retain their current exclusions. Event-level `source` is rejected: source identity belongs in the request headers. ## Per-subject evaluation telemetry opt-out From 7cc51707a966fb0ebcb28c87d01491d286b212a2 Mon Sep 17 00:00:00 2001 From: Vickie Boettcher Date: Thu, 29 Oct 2026 14:54:41 +0000 Subject: [PATCH 2/3] Activate validated Java 1.68.0 Agent flagevaluation coverage Enable spring-boot after passing evaluation and isolated accounting checks with matching released Java artifacts. Environment: Datadog workspace Co-Authored-By: Codex GPT-6 --- manifests/java.yml | 7 ++++++- tests/ffe/README.md | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/manifests/java.yml b/manifests/java.yml index 606ce5c9cbb..0a3510a52bb 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -3501,7 +3501,12 @@ manifest: tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Caching_Serial_Id_Cycle: missing_feature (EX-3415) tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Caching_Serial_Id_Disappears: missing_feature (EX-3415) tests/ffe/test_exposures_datadog_agent.py::Test_FFE_Exposure_Serial_Id: missing_feature (EX-3415) - tests/ffe/test_flag_eval_evp.py: missing_feature (FFL-2446) + tests/ffe/test_flag_eval_evp.py: + - weblog_declaration: + "*": missing_feature (FFL-3509) + spring-boot: v1.68.0 + tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Egress_Agentless_Direct: missing_feature (Agentless activation is separate from FFL-3509) + tests/ffe/test_flag_eval_evp.py::Test_FFE_EVP_Flagevaluation_Egress_Agentless_Sidecar: missing_feature (Agentless activation is separate from FFL-3509) tests/ffe/test_flag_eval_metrics.py: - weblog_declaration: "*": irrelevant diff --git a/tests/ffe/README.md b/tests/ffe/README.md index d4826078d8b..1c354c72852 100644 --- a/tests/ffe/README.md +++ b/tests/ffe/README.md @@ -38,7 +38,8 @@ The protobuf fixture `tests/parametric/test_ffe/rules-wire.json` comes from `ope `Test_FFE_EVP_Flagevaluation_SDK_Identity` checks SDK origin and version headers on Agent-to-intake captures while retaining the shared payload and evaluation-count checks. The case requires Agent 7.84+ and is enabled for Go 2.11.0+, Python 4.16.0+, and -Node.js express5 under its existing version gate, and Ruby rails72 2.43.0+. +Node.js express5 under its existing version gate, Ruby rails72 2.43.0+, and +Java spring-boot 1.68.0+. Python flask-poc also runs the remaining Agent-backed payload, context, privacy, and aggregation cases from 4.16.0. Other weblogs retain their current exclusions. Event-level `source` is rejected: source identity belongs in the request headers. From e199100bcde54d9675c123c0073e150e121e5a9d Mon Sep 17 00:00:00 2001 From: Vickie Boettcher Date: Fri, 30 Oct 2026 17:56:32 +0000 Subject: [PATCH 3/3] Allow ten seconds for the FFE stress batch request Give the 12000-evaluation batch time to complete on Ruby CI while preserving default timeouts for other requests. Environment: Datadog workspace Co-Authored-By: Codex GPT-6 --- tests/ffe/test_flag_eval_evp.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/ffe/test_flag_eval_evp.py b/tests/ffe/test_flag_eval_evp.py index 0ab0720d152..1a205d5fd64 100644 --- a/tests/ffe/test_flag_eval_evp.py +++ b/tests/ffe/test_flag_eval_evp.py @@ -61,6 +61,7 @@ def evaluate_flag( attributes: JSON | None = None, variation_type: str = "STRING", default_value: object = "default", + timeout: int | None = None, ) -> HttpResponse: payload = { "flag": flag_key, @@ -71,7 +72,7 @@ def evaluate_flag( } if targeting_keys is not None: payload["targetingKeys"] = targeting_keys - return weblog.post("/ffe", json=payload) + return weblog.post("/ffe", json=payload, timeout=timeout) def evp_flagevaluation_events_from_data( @@ -674,6 +675,7 @@ def setup_ffe_evp_flagevaluation_high_cardinality_accounting(self) -> None: targeting_key=targeting_keys[0], targeting_keys=targeting_keys, attributes={}, + timeout=10, ) ]