diff --git a/.github/workflows/run-end-to-end.yml b/.github/workflows/run-end-to-end.yml index 18a202bf6a0..5500def5d8a 100644 --- a/.github/workflows/run-end-to-end.yml +++ b/.github/workflows/run-end-to-end.yml @@ -302,6 +302,21 @@ jobs: - name: Run FEATURE_FLAGGING_AND_EXPERIMENTATION scenario if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_AND_EXPERIMENTATION"') run: ./run.sh FEATURE_FLAGGING_AND_EXPERIMENTATION + - name: Run FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT scenario + if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT"') + run: ./run.sh FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT + - name: Run FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED scenario + if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED"') + run: ./run.sh FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED + - name: Run FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED scenario + if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED"') + run: ./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED + - name: Run FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE scenario + if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE"') + run: ./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE + - name: Run FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE scenario + if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE"') + run: ./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE - name: Run FEATURE_FLAGGING_AND_EXPERIMENTATION_AGENTLESS scenario if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"FEATURE_FLAGGING_AND_EXPERIMENTATION_AGENTLESS"') run: ./run.sh FEATURE_FLAGGING_AND_EXPERIMENTATION_AGENTLESS diff --git a/docs/understand/weblogs/end-to-end_weblog.md b/docs/understand/weblogs/end-to-end_weblog.md index 967040e6cdf..7a8b3e62ba6 100644 --- a/docs/understand/weblogs/end-to-end_weblog.md +++ b/docs/understand/weblogs/end-to-end_weblog.md @@ -1141,11 +1141,21 @@ accept a JSON body with these fields: - `variationType`: the expected variation type. - `defaultValue`: the value to return when evaluation cannot resolve the flag. - `targetingKey`: the evaluation subject key. -- `attributes`: flat scalar targeting attributes. +- `attributes`: targeting attributes, including invalid values used to exercise SDK context validation. The response must be JSON and include at least `value` and `reason`. Error responses should also include `errorCode` and `errorMessage`. +Go and Java experimentation opt-out tests also require these public SDK details: + +- `variant`: the selected variant, or null/empty when absent. +- `flagMetadata`: the SDK flag metadata as a JSON object; `{}` when absent. +- `allocationKey`: the allocation key from SDK metadata, when present. +- `count`: the number of evaluations performed by the request. + +The endpoint must copy these values from the public evaluation result. It must not infer +an error, reason, variant, or allocation from the returned flag value. + ### GET /healthcheck Returns a JSON dict, with those values : diff --git a/manifests/c.yml b/manifests/c.yml index 416336889bb..06dbdc87f2c 100644 --- a/manifests/c.yml +++ b/manifests/c.yml @@ -4,6 +4,8 @@ manifest: tests/ai_guard/: irrelevant (dd-trace-c does not implement AI Guard) tests/appsec/: irrelevant (dd-trace-c does not implement AppSec or IAST) tests/cws/test_thread_context_sharing.py::Test_ThreadContextSharing: missing_feature (missing /security/thread_context_sharing endpoint on weblog) + tests/ffe/test_evaluation_telemetry_opt_out.py: incomplete_test_app (The Perl Mojolicious workload does not provide the /ffe endpoint) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/integrations/test_dbm.py: incomplete_test_app (The Perl Mojolicious workload does not provide database endpoints) tests/parametric/otel_env_vars/test_otel_exporter_otlp_compression.py::Test_OTEL_EXPORTER_OTLP_COMPRESSION: missing_feature tests/parametric/otel_env_vars/test_otel_exporter_otlp_headers.py::Test_OTEL_EXPORTER_OTLP_HEADERS: missing_feature diff --git a/manifests/cpp.yml b/manifests/cpp.yml index fddd915329b..1e1e30f39ef 100644 --- a/manifests/cpp.yml +++ b/manifests/cpp.yml @@ -22,6 +22,8 @@ manifest: tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot: missing_feature (Not yet implemented) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (only parametric tests are run for cpp) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_flag_eval_evp.py: irrelevant (only parametric tests are run for cpp) tests/integration_frameworks/llm/anthropic/test_anthropic_llmobs.py::TestAnthropicLlmObsMessages::test_create_error: bug (MLOB-1234) tests/integrations/crossed_integrations/test_sqs.py::Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: irrelevant (Localstack SQS does not support AWS Xray Header parsing) diff --git a/manifests/cpp_httpd.yml b/manifests/cpp_httpd.yml index 47030f0bcc9..198c4bc6d36 100644 --- a/manifests/cpp_httpd.yml +++ b/manifests/cpp_httpd.yml @@ -54,6 +54,8 @@ manifest: tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) tests/ffe/test_agentless_configuration.py: missing_feature (C++ is not in scope for v1 agentless server SDK coverage; FFL-2731 tracks the system-tests contract) tests/ffe/test_dynamic_evaluation.py: missing_feature + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (C++ does not implement per-subject evaluation telemetry opt-out) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: missing_feature (Not yet implemented) tests/ffe/test_exposures_datadog_agent.py: missing_feature tests/ffe/test_flag_eval_evp.py: missing_feature (FFL-2446) diff --git a/manifests/cpp_nginx.yml b/manifests/cpp_nginx.yml index 30648f6498b..b4b660e7f9c 100644 --- a/manifests/cpp_nginx.yml +++ b/manifests/cpp_nginx.yml @@ -287,6 +287,8 @@ manifest: tests/docker_ssi/test_docker_ssi_appsec.py::TestDockerSSIAppsecFeatures::test_telemetry_source_ssi: missing_feature tests/ffe/test_agentless_configuration.py: missing_feature (C++ is not in scope for v1 agentless server SDK coverage; FFL-2731 tracks the system-tests contract) tests/ffe/test_dynamic_evaluation.py: missing_feature + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (C++ does not implement per-subject evaluation telemetry opt-out) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: missing_feature (Not yet implemented) tests/ffe/test_exposures_datadog_agent.py: missing_feature tests/ffe/test_flag_eval_evp.py: missing_feature (FFL-2446) diff --git a/manifests/dotnet.yml b/manifests/dotnet.yml index cbd41d62906..40a6183f36a 100644 --- a/manifests/dotnet.yml +++ b/manifests/dotnet.yml @@ -822,6 +822,9 @@ manifest: weblog: [poc, uds] - declaration: bug (FFL-2184) excluded_weblog: [poc, uds] + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_evaluation_telemetry_opt_out.py::Test_FFE_Evaluation_Telemetry_Opt_Out_EVP: missing_feature (Requires a release containing dd-trace-dotnet#9351; FFL-2446) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: v3.36.0 tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_Direct: missing_feature (Not yet implemented) tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_Direct_Shutdown: missing_feature (Not yet implemented) diff --git a/manifests/golang.yml b/manifests/golang.yml index d4b4e0e1934..6fbba49d64a 100644 --- a/manifests/golang.yml +++ b/manifests/golang.yml @@ -1728,6 +1728,8 @@ manifest: weblog: [echo, gin, chi, net-http-orchestrion, net-http, uds-echo] - declaration: bug (FFL-2182) excluded_weblog: [echo, gin, chi, net-http-orchestrion, net-http, uds-echo] + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: v2.6.0-dev # Easy win for chi, echo, gin, net-http, net-http-orchestrion, uds-echo and version 2.5.0 tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_Direct: v2.12.0-dev tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_Direct_Shutdown: diff --git a/manifests/java.yml b/manifests/java.yml index 6f7fcc2d46f..e4b46a6a397 100644 --- a/manifests/java.yml +++ b/manifests/java.yml @@ -3479,6 +3479,8 @@ manifest: weblog: [spring-boot] - declaration: bug (FFL-2184) excluded_weblog: [spring-boot] + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: - weblog_declaration: "*": irrelevant diff --git a/manifests/java_lambda.yml b/manifests/java_lambda.yml index 83478d4eba8..01c75d391bd 100644 --- a/manifests/java_lambda.yml +++ b/manifests/java_lambda.yml @@ -61,6 +61,8 @@ manifest: tests/appsec/waf/test_blocking.py::Test_Blocking: missing_feature tests/appsec/waf/test_blocking.py::Test_Blocking_strip_response_headers: missing_feature tests/appsec/waf/test_blocking.py::Test_CustomBlockingResponse: missing_feature + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) + tests/ffe/test_experimentation_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) tests/ffe/test_flag_eval_evp.py: irrelevant (server-side FFE EVP weblog scenario is not applicable to lambda) tests/test_resource_renaming.py: missing_feature tests/test_rum_injection.py: irrelevant (RUM injection only supported for Java) diff --git a/manifests/java_otel.yml b/manifests/java_otel.yml index 0652748e59d..c8704d54c3b 100644 --- a/manifests/java_otel.yml +++ b/manifests/java_otel.yml @@ -12,6 +12,8 @@ manifest: tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot: missing_feature (Not yet implemented) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) + tests/ffe/test_experimentation_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) tests/ffe/test_flag_eval_evp.py: irrelevant (OpenTelemetry test library does not implement server-side FFE EVP) tests/integration_frameworks/llm/anthropic/test_anthropic_llmobs.py::TestAnthropicLlmObsMessages::test_create_error: bug (MLOB-1234) tests/integrations/crossed_integrations/test_sqs.py::Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: irrelevant (Localstack SQS does not support AWS Xray Header parsing) diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index 94b6334410c..a37bb0d201b 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -1871,6 +1871,8 @@ manifest: weblog: [express5] - declaration: bug (FFL-2182) excluded_weblog: [express5] + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: - weblog_declaration: "*": incomplete_test_app diff --git a/manifests/nodejs_lambda.yml b/manifests/nodejs_lambda.yml index f1ff3b763b9..f0bbf8a0c30 100644 --- a/manifests/nodejs_lambda.yml +++ b/manifests/nodejs_lambda.yml @@ -171,6 +171,8 @@ manifest: tests/appsec/waf/test_blocking.py::Test_Blocking: missing_feature tests/appsec/waf/test_blocking.py::Test_Blocking_strip_response_headers: missing_feature tests/appsec/waf/test_blocking.py::Test_CustomBlockingResponse: missing_feature + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) + tests/ffe/test_experimentation_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) tests/ffe/test_flag_eval_evp.py: irrelevant (server-side FFE EVP weblog scenario is not applicable to lambda) tests/test_resource_renaming.py: missing_feature tests/test_rum_injection.py: irrelevant diff --git a/manifests/nodejs_otel.yml b/manifests/nodejs_otel.yml index 0852007bf5d..84559f4d083 100644 --- a/manifests/nodejs_otel.yml +++ b/manifests/nodejs_otel.yml @@ -11,6 +11,8 @@ manifest: tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot: missing_feature (Not yet implemented) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) + tests/ffe/test_experimentation_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) tests/ffe/test_flag_eval_evp.py: irrelevant (OpenTelemetry test library does not implement server-side FFE EVP) tests/integration_frameworks/llm/anthropic/test_anthropic_llmobs.py::TestAnthropicLlmObsMessages::test_create_error: bug (MLOB-1234) tests/integrations/crossed_integrations/test_sqs.py::Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: irrelevant (Localstack SQS does not support AWS Xray Header parsing) diff --git a/manifests/php.yml b/manifests/php.yml index c99643f4dc8..b0ba61395df 100644 --- a/manifests/php.yml +++ b/manifests/php.yml @@ -1240,6 +1240,8 @@ manifest: "*": v1.21.0-dev laravel11x: incomplete_test_app symfony7x: incomplete_test_app + tests/ffe/test_evaluation_telemetry_opt_out.py: incomplete_test_app (Deferred until the PHP OpenFeature test-app foundation is available) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: - weblog_declaration: "*": v1.21.0-dev diff --git a/manifests/python.yml b/manifests/python.yml index f4bfd171bad..236f7217a69 100644 --- a/manifests/python.yml +++ b/manifests/python.yml @@ -2229,6 +2229,8 @@ manifest: flask-poc: v4.14.0 tests/ffe/test_dynamic_evaluation.py::Test_FFE_RC_Down_From_Start: v4.0.0 tests/ffe/test_dynamic_evaluation.py::Test_FFE_RC_Unavailable: flaky (FFL-1622) + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: v4.2.0-dev tests/ffe/test_exposure_egress.py::Test_FFE_Exposure_Egress_Agentless_Direct: - weblog_declaration: diff --git a/manifests/python_lambda.yml b/manifests/python_lambda.yml index 39432f50af5..30e3e38b700 100644 --- a/manifests/python_lambda.yml +++ b/manifests/python_lambda.yml @@ -305,6 +305,8 @@ manifest: tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot: missing_feature (Not yet implemented) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) + tests/ffe/test_experimentation_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) tests/ffe/test_flag_eval_evp.py: irrelevant (server-side FFE EVP weblog scenario is not applicable to lambda) tests/integration_frameworks/llm/anthropic/test_anthropic_llmobs.py::TestAnthropicLlmObsMessages::test_create_error: bug (MLOB-1234) tests/integrations/crossed_integrations/test_sqs.py::Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: irrelevant (Localstack SQS does not support AWS Xray Header parsing) diff --git a/manifests/python_otel.yml b/manifests/python_otel.yml index 241d0d3c919..f26622deeee 100644 --- a/manifests/python_otel.yml +++ b/manifests/python_otel.yml @@ -11,6 +11,8 @@ manifest: tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot: missing_feature (Not yet implemented) tests/debugger/test_debugger_probe_snapshot.py::Test_Debugger_Line_Probe_Snaphots::test_process_tags_snapshot_svc: missing_feature (Not yet implemented) + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) + tests/ffe/test_experimentation_opt_out.py: irrelevant (OpenTelemetry test library does not implement Datadog feature flag providers) tests/ffe/test_flag_eval_evp.py: irrelevant (OpenTelemetry test library does not implement server-side FFE EVP) tests/integration_frameworks/llm/anthropic/test_anthropic_llmobs.py::TestAnthropicLlmObsMessages::test_create_error: bug (MLOB-1234) tests/integrations/crossed_integrations/test_sqs.py::Test_SQS_PROPAGATION_VIA_AWS_XRAY_HEADERS: irrelevant (Localstack SQS does not support AWS Xray Header parsing) diff --git a/manifests/ruby.yml b/manifests/ruby.yml index 5a7cf90a6ae..4a8386259c1 100644 --- a/manifests/ruby.yml +++ b/manifests/ruby.yml @@ -2137,6 +2137,8 @@ manifest: - weblog_declaration: "*": irrelevant rails72: v2.23.0-dev + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: - weblog_declaration: "*": irrelevant diff --git a/manifests/ruby_lambda.yml b/manifests/ruby_lambda.yml index 89f6602b30a..6f7da5277e1 100644 --- a/manifests/ruby_lambda.yml +++ b/manifests/ruby_lambda.yml @@ -85,4 +85,6 @@ manifest: tests/appsec/waf/test_blocking.py::Test_Blocking::test_html_template_v2: missing_feature tests/appsec/waf/test_blocking.py::Test_Blocking_strip_response_headers: v3.30.0 tests/appsec/waf/test_blocking.py::Test_CustomBlockingResponse: v3.29.0 + tests/ffe/test_evaluation_telemetry_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) + tests/ffe/test_experimentation_opt_out.py: irrelevant (This server weblog scenario does not apply to Lambda) tests/ffe/test_flag_eval_evp.py: irrelevant (server-side FFE EVP weblog scenario is not applicable to lambda) diff --git a/manifests/rust.yml b/manifests/rust.yml index 67215ed811e..9ca0d970a6d 100644 --- a/manifests/rust.yml +++ b/manifests/rust.yml @@ -23,6 +23,8 @@ manifest: tests/docker_ssi/test_docker_ssi_appsec.py::TestDockerSSIAppsecFeatures::test_telemetry_source_ssi: missing_feature tests/ffe/test_agentless_configuration.py: missing_feature (Rust is not in scope for v1 agentless server SDK coverage; FFL-2731 tracks the system-tests contract) tests/ffe/test_dynamic_evaluation.py: missing_feature + tests/ffe/test_evaluation_telemetry_opt_out.py: missing_feature (Provisional per-subject evaluation telemetry opt-out coverage; enable after the SDK release) + tests/ffe/test_experimentation_opt_out.py: missing_feature (Provisional experimentation activation-cutoff coverage; enable after the SDK release) tests/ffe/test_exposure_egress.py: missing_feature (Not yet implemented) tests/ffe/test_exposures_datadog_agent.py: missing_feature tests/ffe/test_flag_eval_evp.py: missing_feature (FFL-2446) diff --git a/tests/ffe/README.md b/tests/ffe/README.md index b1d8151715a..2c4b5ed6539 100644 --- a/tests/ffe/README.md +++ b/tests/ffe/README.md @@ -11,6 +11,8 @@ This directory contains system tests for the Feature Flags & Experimentation (FF | `test_exposures_datadog_agent.py` | Flag exposure tracking and reporting through the Datadog Agent | | `test_flag_eval_metrics.py` | Evaluation metrics (OTel counter) | | `test_flag_eval_evp.py` | Server-side EVP flagevaluation payloads, aggregation, and bounds | +| `test_evaluation_telemetry_opt_out.py` | Per-subject evaluation telemetry opt-out, default-off behavior, and unchanged exposures | +| `test_experimentation_opt_out.py` | Experimentation activation cutoff, configuration updates, holdout assignments, and exposure delivery | ## Running FFE Tests @@ -18,14 +20,176 @@ This directory contains system tests for the Feature Flags & Experimentation (FF ./run.sh FEATURE_FLAGGING_AND_EXPERIMENTATION --library ``` +## Per-subject evaluation telemetry opt-out + +All four test classes report under [#649: Per-subject evaluation telemetry opt-out](https://feature-parity.us1.prod.dog/#/?feature=649). + +Candidate SDK implementations must pass the applicable local checks before delivery. +Released-version CI activation is a separate step. Both scenarios are excluded from the default +`all`, `end_to_end`, and `tracer_release` groups. They remain selectable by name or through the `ffe` group. +When activating released versions in manifests, restore the default scenario groups too. +Otherwise tracer CI that selects only `tracer_release` does not run these tests. +Manifests mark unsupported SDK versions as expected failures; this does not prevent their setup from running. +Use a local candidate SDK and force these tests to validate unreleased changes: + +```bash +./run.sh FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT tests/ffe/test_evaluation_telemetry_opt_out.py \ + -F tests/ffe/test_evaluation_telemetry_opt_out.py +./run.sh FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED tests/ffe/test_evaluation_telemetry_opt_out.py \ + -F tests/ffe/test_evaluation_telemetry_opt_out.py +``` + +The enabled scenario sets `DD_FEATURE_FLAGS_EVALUATION_TELEMETRY_PER_SUBJECT_OPT_OUT_ENABLED=true`. +The disabled scenario leaves the setting absent. Both use the same requests. + +| Context value | Enabled | Disabled | +| --- | --- | --- | +| Boolean `true` | No evaluation telemetry | Evaluation telemetry remains | +| Boolean `false`, missing, `null`, string `"true"`, or number `1` | Evaluation telemetry remains | Evaluation telemetry remains | + +The SDK reads the attribute on every evaluation. A subject stays opted out only while each evaluation context carries it. +Set the attribute in the context supplied to the evaluation call. +These tests do not cover opt-outs added by application hooks; SDK behavior differs for those hooks. + +Separate tests check exact EVP counts, evaluation metric presence, and automatic trace annotations. +Metric checks accept delta exports and repeated cumulative exports. Opted-out flags must have no nonzero metric points. +Each test includes allowed subjects as positive controls. +Mixed subjects evaluate the same flag to detect a flag-scoped opt-out decision. +EVP counts match both the flag and the subject's raw or hashed targeting key. +Shared-flag subjects receive the same value from distinct fixture allocations. +Metric assertions use the allocation tags to check each subject separately, without adding subject tags to metrics. +One rule targets the opt-out attribute to verify that it remains available for evaluation. +One subject opts out, then removes the attribute; later evaluations must emit telemetry again. +Missing flags test suppression on the error path and return the application default. +Configured flags must return the same flag value for every request. +Exposures must retain their context attributes and ordinary deduplication for an unchanged context. +After an attribute changes, exposure deduplication can differ between SDKs; these tests do not check it. +Validation reads final captures after the scenario stops its application and drains the Agent. +Remote Configuration and evaluation-request errors are reported during validation, without aborting the remaining setups. + +PHP coverage is deferred until its OpenFeature test-app foundation is available. +.NET EVP coverage requires a tracer release containing [dd-trace-dotnet#9351](https://github.com/DataDog/dd-trace-dotnet/pull/9351). +For older candidates without that producer, exclude the EVP class with `-k 'not EVP'`. +Browser and mobile SDKs are outside this server harness and retain their repository integration tests. + +### Release activation and follow-up coverage + +Replace each provisional manifest entry with the first released SDK version containing its opt-out implementation. +For Node.js, this must include [dd-trace-js#10776](https://github.com/DataDog/dd-trace-js/pull/10776); a merged PR is not a released version. +.NET needs a tracer release containing [dd-trace-dotnet#9426](https://github.com/DataDog/dd-trace-dotnet/pull/9426) +and a weblog using `Datadog.FeatureFlags.OpenFeature` 2.3.3 or later. +Its EVP class has a separate dependency on #9351. The tracer manifest does not gate the NuGet provider version. + +These scenarios activate opt-out through the process environment only. +Coverage for other configuration sources, such as `application_monitoring.yaml`, is separate follow-up work. + +### Local .NET candidate packages + +Put the `Datadog.Trace` and `Datadog.FeatureFlags.OpenFeature` packages in `binaries/`. +Also supply the matching tracer archive (`datadog-dotnet-apm-*.tar.gz`) or extracted tracer files. +For the `poc` weblog, pass exact NuGet version ranges through the Docker build arguments: + +```bash +./build.sh dotnet -w poc --extra-docker-args \ + "--build-arg DD_TRACE_PACKAGE_VERSION=[] --build-arg DD_OPENFEATURE_PACKAGE_VERSION=[]" +``` + +Brackets require that exact version. A plain version is a minimum; NuGet can select a higher version with warning NU1603. +Use unique candidate versions that are not published on nuget.org, so only `binaries/` can supply them. +Verify the resolved packages before reporting local validation. These arguments do not select the installed tracer binary. +The `uds` weblog does not support these build arguments or the local package source. + +## Per-subject experimentation opt-out + +The tests report under [#650: Per-subject experimentation opt-out](https://feature-parity.us1.prod.dog/#/?feature=650). +They extend the [shared evaluator fixtures](https://github.com/DataDog/ffe-system-test-data/pull/52) +with Remote Config and captured EVP requests from a running SDK. +The Go and Java weblogs expose public OpenFeature evaluation details for these tests. + +| Scenario suffix | `DD_FEATURE_FLAGS_EXPERIMENTATION_OPT_OUT_MODE` | Expected behavior with a valid subject cutoff | +| --- | --- | --- | +| `DISABLED` | Unset | All allocations remain eligible. | +| `IMMEDIATE` | `immediate` | Skip exposure-logging allocations; continue ordinary delivery. | +| `FUTURE` | `future_experiments_only` | Keep older allocations; skip equal, newer, or unknown activation. | + +All three scenarios enable the independent evaluation-telemetry opt-out control. +Each scenario starts a separate SDK process. The tests cover: + +- Cutoff equality, offsets, fractions, unknown activation, invalid preferences, and absent preferences. +- Ordinary allocation fallback and the application default when no allocation matches. +- Concurrent subjects on one flag, with positive controls and repeated evaluations. +- Configuration edits that retain activation, followed by a new allocation with a new activation. +- Unchanged 10/90 holdout assignments for eligible subjects. This tests delivery, not downstream holdout analysis. +- Deduplicated exposures for eligible allocations, no exposures for skipped allocations, and independent evaluation telemetry. + +Manifests keep this coverage provisional until supported SDK versions are known. +All three scenarios have explicit steps in `run-end-to-end.yml`. +They remain selectable by name or through `ffe`, but not through `all`, `end_to_end`, or `tracer_release`. +Setup errors are reported during validation without aborting the remaining setups. +Load the exact candidate SDK commit with the [binary override](../../docs/execute/binaries.md), +then build the weblog and force the selected tests: + +```bash +./build.sh golang -w net-http +./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED tests/ffe/test_experimentation_opt_out.py \ + -F tests/ffe/test_experimentation_opt_out.py +./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE tests/ffe/test_experimentation_opt_out.py \ + -F tests/ffe/test_experimentation_opt_out.py +./run.sh FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE tests/ffe/test_experimentation_opt_out.py \ + -F tests/ffe/test_experimentation_opt_out.py +``` + +### Lean policy coverage + +The [pinned contract](https://github.com/DataDog/ffe-system-test-data/tree/f8a4176cd8360b12b56a8b6ec6ef215e2cc21077/contracts/experimentation-opt-out) +provides the policy expectations. The generator checks its source hashes, compiles its Lean proofs, +audits the policy theorem axioms, and executes the policy oracle. + +The snapshot contains all 90 policy cases and 252 runtime cases. Each mode runs 84 cases with +both evaluation-telemetry states. Each subject receives three evaluations, with four concurrent workers. +The generated cases cover: + +- Disabled, immediate, and future modes; absent, valid, and invalid subject cutoffs. +- Missing, null, invalid, earlier, equal, and later allocation activation timestamps. +- Exposure-logging and ordinary allocations, fallback allocation, and application default. +- Invalid activation behind an earlier ordinary allocation, including error precedence. +- Invalid context types and retained targeting rules, including attribute-based matches and misses. + +Candidate, fallback, and default values are identical. Assertions therefore also require the public +error code, reason, variant, and allocation key. Complete intake captures must contain exactly the +expected exposures and evaluation counts for each subject. Suppressed subjects retain the same assignment +and exposure behavior. Four sequences reuse each subject after an opt-out or invalid context. +They verify recovery without stale policy or lost exposures. Nine additional Lean-generated cases check +invalid-context precedence over missing-flag errors, with a valid flag as a readiness control. +Assertion controls reject missing, duplicate, +misattributed, and leaked events. + +The generator binds policy outputs to Remote Config fixtures. This binding is reviewed code, not a +formal proof of the SDK or transport. Native runs verify the API details and delivery behavior. +Browser timestamp grammar, mobile acknowledgements, compiler rules, and operation counts remain outside +this suite. Java runs use the legacy provider through Remote Config; standalone transport is separate. + +Regenerate the snapshot from the pinned contract checkout with Lean 4.19.0: + +```bash +python utils/scripts/generate_ffe_opt_out_contract.py \ + --contract-root /path/to/ffe-system-test-data/contracts/experimentation-opt-out \ + --lean /path/to/lean-4.19.0/bin/lean --check +``` + +Omit `--check` to write generated files. Review the source and generated differences before updating +`SOURCE_SHA256` in `tests/ffe/utils/lean_experimentation_opt_out.py`. The generator does not update this acceptance pin. + ## Test-contract self-tests -The self-tests in `tests/test_the_test/test_ffe_tests.py` validate the FFE assertions using synthetic -captures. They do not run SDKs or contact an intake. They are part of the -`TEST_THE_TEST` scenario, which runs on every PR: +The self-tests in `tests/test_the_test/test_ffe_tests.py` and the two opt-out contract files +validate the FFE assertions using synthetic captures. They do not run SDKs or contact an intake. +They are part of the `TEST_THE_TEST` scenario, which runs on every PR: ```bash -./run.sh TEST_THE_TEST tests/test_the_test/test_ffe_tests.py +./run.sh TEST_THE_TEST tests/test_the_test/test_ffe_tests.py \ + tests/test_the_test/test_ffe_evaluation_telemetry_opt_out_contract.py \ + tests/test_the_test/test_ffe_experimentation_opt_out_contract.py ``` Framework mock-backend and lifecycle tests stay in `tests/test_the_test/`. diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/SOURCE.json b/tests/ffe/fixtures/experimentation-opt-out-lean/SOURCE.json new file mode 100644 index 00000000000..e7661faf5f5 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/SOURCE.json @@ -0,0 +1,53 @@ +{ + "repository": "https://github.com/DataDog/ffe-system-test-data", + "commit": "f8a4176cd8360b12b56a8b6ec6ef215e2cc21077", + "manifest_sha256": "15f68a067872c0f11dd494586eab32116b6dddae42754a2870375f85b55327f4", + "contract_path": "contracts/experimentation-opt-out", + "policy_case_count": 90, + "runtime_case_count": 252, + "theorems": [ + "disabled_preserves_evaluation", + "absent_preserves_evaluation", + "invalid_context_precedes_activation", + "immediate_ignores_activation", + "invalid_activation_fails_future_flag_even_without_logging", + "only_future_cutoff_needs_activation", + "before_cutoff_retains_experiment", + "equality_excludes_experiment", + "missing_excludes_experiment", + "ordinary_allocation_never_excluded" + ], + "lookup_theorems": [ + "invalid_context_precedes_lookup", + "disabled_ignores_invalid_attribute" + ], + "lookup_case_count": 9, + "decision_revisions": { + "D002": 1, + "D004": 2, + "D010": 1, + "D011": 1, + "D016": 1 + }, + "source_files": { + "lean/Contract.lean": "4e6fb44f6aa3354dc264c6e74a9cf6239e9273ef19b61e90cd36d6e6288a88c8", + "lean/Proofs.lean": "842c4d2bbd95fa259eca266d93495bcd638d4263452a1b3ecdb5b17a67602ef5", + "lean/Oracle.lean": "f8133b0a96eeb3a3b9d368b727ed0247cfc3c2da19177beca2c573aca8b43786", + "lean/Review.lean": "e8778f0911e114b675af7d9d061c4b44611140e812489c0742767eaeb521bfa7", + "corpus/browser-proposal.jsonl": "c4a1b9c9eed7197b8d66c1d3e46fcaaa4ec70143a2583b31baa04086c8f652dd" + }, + "files": { + "runtime-cases.json": "c47cf29d64d176b418c916229208875b904cb871ed43a78c57a3838987911226", + "policy-oracle.jsonl": "435fcb0a47386bba8c5a025a757d199076b3db13bbc0b821bb02b2996f29613b", + "policy-axioms.txt": "e5d1d2744b68bdaff1812dc411cb1221a48fbd4da51f1fa701d5fd2f50d92f16", + "lookup-oracle.jsonl": "467ed9254b3ba3d47366c3d0b249b281859cd8ce242fc847f74f84c74d8d91f1", + "lookup-cases.json": "2538e44437c075adba6a58b354a307d6d67901f1b653daeaf3898fe5d5104961", + "lean/LookupOracle.lean": "3cbbaefe84d87d5d3eac76e6d542c283ca4fcac8d8176e6e28fc4d7657f7ea3c", + "lean/Contract.lean": "4e6fb44f6aa3354dc264c6e74a9cf6239e9273ef19b61e90cd36d6e6288a88c8", + "lean/Proofs.lean": "842c4d2bbd95fa259eca266d93495bcd638d4263452a1b3ecdb5b17a67602ef5", + "lean/Oracle.lean": "f8133b0a96eeb3a3b9d368b727ed0247cfc3c2da19177beca2c573aca8b43786", + "lean/Review.lean": "e8778f0911e114b675af7d9d061c4b44611140e812489c0742767eaeb521bfa7", + "corpus/browser-proposal.jsonl": "c4a1b9c9eed7197b8d66c1d3e46fcaaa4ec70143a2583b31baa04086c8f652dd" + }, + "limits": "Policy outputs come from Lean. UFC/context materialization, public API details, transport, telemetry and lifecycle require native execution. Browser timestamp grammar, acknowledgement, compiler and operation-count profiles are not asserted." +} diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/corpus/browser-proposal.jsonl b/tests/ffe/fixtures/experimentation-opt-out-lean/corpus/browser-proposal.jsonl new file mode 100644 index 00000000000..ab557ed07d4 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/corpus/browser-proposal.jsonl @@ -0,0 +1,313 @@ +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/utc", "input": "2026-01-01T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/lower-t", "input": "2026-01-01t00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/lower-z", "input": "2026-01-01T00:00:00z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/lower-both", "input": "2026-01-01t00:00:00z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/nanos", "input": "2026-10-19T12:00:00.123456789Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/ten-digits-zero", "input": "2026-10-19T12:00:00.1234567890Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/ten-digits-nine", "input": "2026-10-19T12:00:00.1234567899Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/twelve-digits", "input": "2026-10-19T12:00:00.123456789999Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/fraction-zero", "input": "2026-01-01T00:00:00.000000000000Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 100000000, "seconds": 1767225600}, "id": "timestamp/fraction-one", "input": "2026-01-01T00:00:00.1Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/offset-negative", "input": "2026-10-19T08:00:00.123456789-04:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 123456789, "seconds": 1792411200}, "id": "timestamp/offset-positive", "input": "2026-10-19T14:00:00.123456789+02:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767225600}, "id": "timestamp/offset-negative-zero", "input": "2026-01-01T00:00:00-00:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 1767139260}, "id": "timestamp/offset-max", "input": "2026-01-01T00:00:00+23:59", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/space", "input": "2026-01-01 00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/comma", "input": "2026-01-01T00:00:00,123Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/leap-second", "input": "2016-12-31T23:59:60Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/unicode-minus", "input": "2026-01-01T00:00:00\u221205:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/offset-compact", "input": "2026-01-01T00:00:00+0000", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/named-zone", "input": "2026-01-01T00:00:00 UTC", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/offset-hour24", "input": "2026-01-01T00:00:00+24:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/offset-minute60", "input": "2026-01-01T00:00:00+01:60", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/one-digit-hour", "input": "2026-01-01T0:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": -62167219200}, "id": "timestamp/year-zero", "input": "0000-01-01T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/utc-year-underflow", "input": "0000-01-01T00:00:00+01:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 999999999, "seconds": 253402300799}, "id": "timestamp/year-max", "input": "9999-12-31T23:59:59.999999999Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/utc-year-overflow", "input": "9999-12-31T23:59:59-01:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/julian-leap", "input": "1500-02-29T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": -12219724800}, "id": "timestamp/gregorian-cutover", "input": "1582-10-10T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 951782400}, "id": "timestamp/leap-2000", "input": "2000-02-29T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/nonleap-1900", "input": "1900-02-29T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/bad-month", "input": "2026-13-01T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/bad-day", "input": "2026-04-31T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/hour24", "input": "2026-01-01T24:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/empty-fraction", "input": "2026-01-01T00:00:00.Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/leading-space", "input": " 2026-01-01T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/trailing-space", "input": "2026-01-01T00:00:00Z ", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/trailing-newline", "input": "2026-01-01T00:00:00Z\n", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/no-zone", "input": "2026-01-01T00:00:00", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/empty", "input": "", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": false}, "id": "timestamp/null", "input": null, "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 0, "seconds": 0}, "id": "timestamp/epoch", "input": "1970-01-01T00:00:00Z", "kind": "timestamp"} +{"decision_ids": ["D005", "D006", "D007"], "expected": {"accepted": true, "nanos": 999999999, "seconds": -1}, "id": "timestamp/pre-epoch-nanos", "input": "1969-12-31T23:59:59.999999999Z", "kind": "timestamp"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/absent/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/valid/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": false, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": true, "mode": "disabled"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/disabled/invalid/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/absent/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/valid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/immediate/valid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/valid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/immediate/valid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/valid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/immediate/valid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/valid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/immediate/valid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/immediate/valid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/immediate/valid/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": false, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": true, "mode": "immediate"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/immediate/invalid/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "absent", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "absent", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "absent", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "absent", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "absent", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/absent/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/valid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "valid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/future_experiments_only/valid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "PARSE_ERROR", "exclude": false}, "id": "policy/future_experiments_only/valid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "valid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "PARSE_ERROR", "exclude": false}, "id": "policy/future_experiments_only/valid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/valid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "valid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/valid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/valid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "valid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/future_experiments_only/valid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": false}, "id": "policy/future_experiments_only/valid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "valid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "NONE", "exclude": true}, "id": "policy/future_experiments_only/valid/after/1", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/missing/0", "kind": "policy"} +{"args": {"activation": "missing", "attribute": "invalid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/missing/1", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/invalid/0", "kind": "policy"} +{"args": {"activation": "invalid", "attribute": "invalid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/invalid/1", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/before/0", "kind": "policy"} +{"args": {"activation": "before", "attribute": "invalid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/before/1", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/equal/0", "kind": "policy"} +{"args": {"activation": "equal", "attribute": "invalid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/equal/1", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": false, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/after/0", "kind": "policy"} +{"args": {"activation": "after", "attribute": "invalid", "doLog": true, "mode": "future_experiments_only"}, "decision_ids": ["D002", "D004", "D010", "D011"], "expected": {"error": "INVALID_CONTEXT", "exclude": false}, "id": "policy/future_experiments_only/invalid/after/1", "kind": "policy"} +{"args": {"attribute": "absent", "coreError": "NONE", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/disabled/absent/NONE", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "INVALID_CONTEXT", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "INVALID_CONTEXT"}, "id": "pending/disabled/absent/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PARSE_ERROR", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/disabled/absent/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PROVIDER_NOT_READY", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/disabled/absent/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "NONE", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/disabled/valid/NONE", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "INVALID_CONTEXT", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "INVALID_CONTEXT"}, "id": "pending/disabled/valid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PARSE_ERROR", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/disabled/valid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PROVIDER_NOT_READY", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/disabled/valid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "NONE", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/disabled/invalid/NONE", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "INVALID_CONTEXT", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "INVALID_CONTEXT"}, "id": "pending/disabled/invalid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PARSE_ERROR", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/disabled/invalid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PROVIDER_NOT_READY", "mode": "disabled"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/disabled/invalid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "NONE", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/immediate/absent/NONE", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "INVALID_CONTEXT", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/immediate/absent/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PARSE_ERROR", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/immediate/absent/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PROVIDER_NOT_READY", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/immediate/absent/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "NONE", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/immediate/valid/NONE", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "INVALID_CONTEXT", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/immediate/valid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PARSE_ERROR", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/immediate/valid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PROVIDER_NOT_READY", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/immediate/valid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "NONE", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/immediate/invalid/NONE", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "INVALID_CONTEXT", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "INVALID_CONTEXT"}, "id": "pending/immediate/invalid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PARSE_ERROR", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/immediate/invalid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PROVIDER_NOT_READY", "mode": "immediate"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/immediate/invalid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "NONE", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/future_experiments_only/absent/NONE", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "INVALID_CONTEXT", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/future_experiments_only/absent/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PARSE_ERROR", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/future_experiments_only/absent/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "absent", "coreError": "PROVIDER_NOT_READY", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/future_experiments_only/absent/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "NONE", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/future_experiments_only/valid/NONE", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "INVALID_CONTEXT", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/future_experiments_only/valid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PARSE_ERROR", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/future_experiments_only/valid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "valid", "coreError": "PROVIDER_NOT_READY", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/future_experiments_only/valid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "NONE", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "NONE"}, "id": "pending/future_experiments_only/invalid/NONE", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "INVALID_CONTEXT", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "INVALID_CONTEXT"}, "id": "pending/future_experiments_only/invalid/INVALID_CONTEXT", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PARSE_ERROR", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PARSE_ERROR"}, "id": "pending/future_experiments_only/invalid/PARSE_ERROR", "kind": "pending"} +{"args": {"attribute": "invalid", "coreError": "PROVIDER_NOT_READY", "mode": "future_experiments_only"}, "decision_ids": ["D001", "D002"], "expected": {"error": "PROVIDER_NOT_READY"}, "id": "pending/future_experiments_only/invalid/PROVIDER_NOT_READY", "kind": "pending"} +{"args": {"attribute": "absent", "mode": "disabled"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": false, "send": true}, "id": "request/disabled/absent", "kind": "request"} +{"args": {"attribute": "valid", "mode": "disabled"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": false, "send": true}, "id": "request/disabled/valid", "kind": "request"} +{"args": {"attribute": "invalid", "mode": "disabled"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": false, "send": true}, "id": "request/disabled/invalid", "kind": "request"} +{"args": {"attribute": "absent", "mode": "immediate"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": false, "send": true}, "id": "request/immediate/absent", "kind": "request"} +{"args": {"attribute": "valid", "mode": "immediate"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": true, "send": true}, "id": "request/immediate/valid", "kind": "request"} +{"args": {"attribute": "invalid", "mode": "immediate"}, "decision_ids": ["D002", "D014"], "expected": {"error": "INVALID_CONTEXT", "options": false, "send": false}, "id": "request/immediate/invalid", "kind": "request"} +{"args": {"attribute": "absent", "mode": "future_experiments_only"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": false, "send": true}, "id": "request/future_experiments_only/absent", "kind": "request"} +{"args": {"attribute": "valid", "mode": "future_experiments_only"}, "decision_ids": ["D002", "D014"], "expected": {"error": "NONE", "options": true, "send": true}, "id": "request/future_experiments_only/valid", "kind": "request"} +{"args": {"attribute": "invalid", "mode": "future_experiments_only"}, "decision_ids": ["D002", "D014"], "expected": {"error": "INVALID_CONTEXT", "options": false, "send": false}, "id": "request/future_experiments_only/invalid", "kind": "request"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/missing/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/missing/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/missing/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/missing/missing/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/missing/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/future/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/future/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/future/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/missing/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/false/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/false/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/false/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/false/missing/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/none/false/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/future/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/future/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/future/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/false/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/missing/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "missing", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "immediate", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/future/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/future/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/future/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "future", "policy": "none"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/none/true/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/missing/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/future/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/future/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/future/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/missing/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/missing/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/future/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/future/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/future/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/false/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/missing/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "missing", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "immediate", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/immediate/true/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/true/future/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/true/future/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/true/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/true/future/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "future", "policy": "immediate"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/immediate/true/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/missing/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "missing", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/future/missing", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equal", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/missing/future/equal", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "equivalent", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/missing/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "different", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/future/different", "kind": "ack"} +{"args": {"acknowledged": "missing", "cutoff": "invalid", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/missing/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/missing/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "missing", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/future/missing", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equal", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/false/future/equal", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "equivalent", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/false/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "different", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/future/different", "kind": "ack"} +{"args": {"acknowledged": "false", "cutoff": "invalid", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/false/future/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/missing/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/missing/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/missing/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/missing/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "missing", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/missing/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/immediate/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/immediate/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/immediate/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/immediate/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "immediate", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/immediate/invalid", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "missing", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/future/missing", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equal", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/true/future/equal", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "equivalent", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": true}, "id": "ack/future/true/future/equivalent", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "different", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/future/different", "kind": "ack"} +{"args": {"acknowledged": "true", "cutoff": "invalid", "mode": "future", "policy": "future"}, "decision_ids": ["D008"], "expected": {"accepted": false}, "id": "ack/future/true/future/invalid", "kind": "ack"} diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Contract.lean b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Contract.lean new file mode 100644 index 00000000000..f8b934e1903 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Contract.lean @@ -0,0 +1,173 @@ +import Std + +namespace PR423 + +/-- Strict is the historical a96b572 policy; proposal is final JS 38d611c behavior. + Neither constructor asserts fleet approval. -/ +inductive Profile where + | strict | proposal + deriving BEq, DecidableEq, Repr + +structure Instant where + seconds : Int + nanos : Nat + deriving BEq, DecidableEq, Repr + +def asciiDigit (c : Char) : Bool := '0' ≤ c && c ≤ '9' +def decimal (chars : List Char) : Nat := + chars.foldl (fun n c => n * 10 + (c.toNat - '0'.toNat)) 0 + +def firstNanos (fraction : List Char) : List Char := fraction.take 9 + +def fractionNanos (fraction : List Char) : Nat := + let kept := firstNanos fraction + decimal kept * 10 ^ (9 - kept.length) + +def field (chars : List Char) (start width : Nat) : Option Nat := do + let digits := (chars.drop start).take width + if digits.length != width || !digits.all asciiDigit then none + else some (decimal digits) + +def charAt (chars : List Char) (index : Nat) : Char := chars[index]?.getD '\x00' + +def leap (year : Nat) : Bool := year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) + +def daysInMonth (year month : Nat) : Nat := + if month == 2 then if leap year then 29 else 28 + else if month == 4 || month == 6 || month == 9 || month == 11 then 30 else 31 + +/-- Proleptic Gregorian arithmetic includes leap year zero. -/ +def daysBeforeYear (year : Nat) : Nat := + 365 * year + (year + 3) / 4 - (year + 99) / 100 + (year + 399) / 400 + +def daysBeforeMonth (year month : Nat) : Nat := + ((List.range (month - 1)).map (fun i => daysInMonth year (i + 1))).foldl (· + ·) 0 + +def utcSeconds (year month day hour minute second : Nat) (offset : Int) : Int := + ((Int.ofNat (daysBeforeYear year + daysBeforeMonth year month + day - 1) - 719528) * 86400) + + Int.ofNat (hour * 3600 + minute * 60 + second) - offset + +def parseOffset (profile : Profile) (zone : List Char) : Option Int := do + if zone == ['Z'] || (profile == .proposal && zone == ['z']) then return 0 + if zone.length != 6 || (charAt zone 0 != '+' && charAt zone 0 != '-') || charAt zone 3 != ':' then none + else do + let hours ← field zone 1 2 + let minutes ← field zone 4 2 + if hours > 23 || minutes > 59 then none + else + let seconds := Int.ofNat (hours * 3600 + minutes * 60) + some (if charAt zone 0 == '-' then -seconds else seconds) + +/-- The grammar is explicit: ASCII digits, full fields, exact separators and no whitespace. + Epoch seconds are calculated without a host date parser. -/ +def parseTimestamp (profile : Profile) (input : String) : Option Instant := do + let chars := input.toList + if chars.length < 20 || charAt chars 4 != '-' || charAt chars 7 != '-' || + (charAt chars 10 != 'T' && !(profile == .proposal && charAt chars 10 == 't')) || + charAt chars 13 != ':' || charAt chars 16 != ':' then none + else do + let year ← field chars 0 4 + let month ← field chars 5 2 + let day ← field chars 8 2 + let hour ← field chars 11 2 + let minute ← field chars 14 2 + let second ← field chars 17 2 + if month < 1 || month > 12 || day < 1 || day > daysInMonth year month || + hour > 23 || minute > 59 || second > 59 then none + else do + let suffix := chars.drop 19 + let (fraction, zone) ← if charAt suffix 0 == '.' then do + let digits := (suffix.drop 1).takeWhile asciiDigit + if digits.isEmpty || (profile == .strict && digits.length > 9) then none + else some (digits, (suffix.drop 1).drop digits.length) + else some ([], suffix) + let offset ← parseOffset profile zone + let seconds := utcSeconds year month day hour minute second offset + if seconds < -62167219200 || seconds > 253402300799 then none + else some { seconds, nanos := fractionNanos fraction } + +inductive Mode where + | disabled | immediate | future + deriving BEq, DecidableEq, Repr +inductive Attribute where + | absent | valid | invalid + deriving BEq, DecidableEq, Repr +inductive Activation where + | missing | invalid | before | equal | after + deriving BEq, DecidableEq, Repr +inductive Error where + | none | invalidContext | parseError | providerNotReady + deriving BEq, DecidableEq, Repr +structure PolicyResult where + error : Error + exclude : Bool + deriving BEq, DecidableEq, Repr + +def normal : PolicyResult := ⟨.none, false⟩ + +/-- Activation is the flag's relevant validity/boundary state. Invalid metadata may be + on an unreachable allocation: future mode validates the affected flag up front. -/ +def policy (mode : Mode) (attr : Attribute) (activation : Activation) + (doLog : Bool) : PolicyResult := + match mode, attr with + | .disabled, _ => normal + | _, .absent => normal + | _, .invalid => ⟨.invalidContext, false⟩ + | .immediate, .valid => ⟨.none, doLog⟩ + | .future, .valid => + match activation with + | .invalid => ⟨.parseError, false⟩ + | .before => normal + | .missing | .equal | .after => ⟨.none, doLog⟩ + +/-- Browser online-provider error remapping. Provider status is a separate concern. -/ +def pending (mode : Mode) (attr : Attribute) (coreError : Error) : Error := + if mode != .disabled && attr != .invalid && coreError == .invalidContext + then .providerNotReady else coreError + +structure RequestResult where + send : Bool + options : Bool + error : Error + deriving BEq, DecidableEq, Repr + +/-- Fetch validation uses the effective subject policy: an enabled mode alone does + not add evaluation_options when the attribute is absent. -/ +def request (mode : Mode) (attr : Attribute) : RequestResult := + match mode, attr with + | .disabled, _ => ⟨true, false, .none⟩ + | _, .absent => ⟨true, false, .none⟩ + | _, .invalid => ⟨false, false, .invalidContext⟩ + | _, .valid => ⟨true, true, .none⟩ + +inductive AckPolicy where + | none | immediate | future + deriving BEq, DecidableEq, Repr +inductive AckBoolean where + | missing | no | yes + deriving BEq, DecidableEq, Repr +inductive AckMode where + | missing | immediate | future + deriving BEq, DecidableEq, Repr +inductive AckCutoff where + | missing | equal | equivalent | different | invalid + deriving BEq, DecidableEq, Repr + +/-- The response acknowledgement helper's well-typed metadata domain. The policy is + effective: an enabled mode with an absent subject attribute still has policy none. + Equivalent cutoff means the same normalized instant, including timezone spelling. -/ +def acknowledges (effective : AckPolicy) (ack : AckBoolean) (mode : AckMode) + (cutoff : AckCutoff) : Bool := + match effective with + | .none => match ack, mode with + | .yes, _ => false + | _, .missing => true + | _, _ => false + | .immediate => match ack, mode with + | .yes, .missing | .yes, .immediate => true + | _, _ => false + | .future => match mode, cutoff with + | .future, .equal | .future, .equivalent => true + | _, _ => false + +end PR423 diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lean/LookupOracle.lean b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/LookupOracle.lean new file mode 100644 index 00000000000..4a3a1fb61ed --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/LookupOracle.lean @@ -0,0 +1,16 @@ +import Lean +import Review +open Lean PR423 GoReview + +def main : IO Unit := do + let stdout ← IO.getStdout + for (modeName, mode) in [("disabled", Mode.disabled), ("immediate", Mode.immediate), + ("future_experiments_only", Mode.future)] do + for (attributeName, attr) in [("absent", Attribute.absent), ("valid", Attribute.valid), + ("invalid", Attribute.invalid)] do + let error := match resolveReady mode attr false with + | .invalidContext => "INVALID_CONTEXT" + | .flagNotFound => "FLAG_NOT_FOUND" + | .evaluate => "NONE" + stdout.putStrLn ((Json.mkObj [("mode", toJson modeName), ("attribute", toJson attributeName), + ("error", toJson error)]).compress) diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Oracle.lean b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Oracle.lean new file mode 100644 index 00000000000..afd7cec4064 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Oracle.lean @@ -0,0 +1,125 @@ +import Lean +import Contract + +open Lean PR423 + +namespace Oracle + +def readMode (j : Json) : Except String Mode := do + match ← j.getObjValAs? String "mode" with + | "disabled" => return .disabled + | "immediate" => return .immediate + | "future_experiments_only" => return .future + | other => throw s!"Unknown mode: {other}" + +def readAttribute (j : Json) : Except String Attribute := do + match ← j.getObjValAs? String "attribute" with + | "absent" => return .absent + | "valid" => return .valid + | "invalid" => return .invalid + | other => throw s!"Unknown attribute state: {other}" + +def readActivation (j : Json) : Except String Activation := do + match ← j.getObjValAs? String "activation" with + | "missing" => return .missing + | "invalid" => return .invalid + | "before" => return .before + | "equal" => return .equal + | "after" => return .after + | other => throw s!"Unknown activation state: {other}" + +def readError (j : Json) : Except String PR423.Error := do + match ← j.getObjValAs? String "coreError" with + | "NONE" => return .none + | "INVALID_CONTEXT" => return .invalidContext + | "PARSE_ERROR" => return .parseError + | "PROVIDER_NOT_READY" => return .providerNotReady + | other => throw s!"Unknown core error: {other}" + +def errorName : PR423.Error → String + | .none => "NONE" + | .invalidContext => "INVALID_CONTEXT" + | .parseError => "PARSE_ERROR" + | .providerNotReady => "PROVIDER_NOT_READY" + +def timestampResult (request : Json) : Except String Json := do + let profile ← match ← request.getObjValAs? String "profile" with + | "strict" => pure Profile.strict + | "proposal" => pure Profile.proposal + | other => throw s!"Unknown profile: {other}" + let input ← request.getObjVal? "input" + let result := input.getStr?.toOption.bind (parseTimestamp profile) + return match result with + | none => Json.mkObj [("accepted", toJson false)] + | some instant => Json.mkObj [("accepted", toJson true), + ("seconds", toJson instant.seconds), ("nanos", toJson instant.nanos)] + +def policyResult (request : Json) : Except String Json := do + let args ← request.getObjVal? "args" + let result := policy (← readMode args) (← readAttribute args) + (← readActivation args) (← args.getObjValAs? Bool "doLog") + return Json.mkObj [("error", toJson (errorName result.error)), ("exclude", toJson result.exclude)] + +def pendingResult (request : Json) : Except String Json := do + let args ← request.getObjVal? "args" + let result := pending (← readMode args) (← readAttribute args) (← readError args) + return Json.mkObj [("error", toJson (errorName result))] + +def requestResult (input : Json) : Except String Json := do + let args ← input.getObjVal? "args" + let result := PR423.request (← readMode args) (← readAttribute args) + return Json.mkObj [("send", toJson result.send), ("options", toJson result.options), + ("error", toJson (errorName result.error))] + +def acknowledgementResult (input : Json) : Except String Json := do + let args ← input.getObjVal? "args" + let effective ← match ← args.getObjValAs? String "policy" with + | "none" => pure AckPolicy.none + | "immediate" => pure AckPolicy.immediate + | "future" => pure AckPolicy.future + | other => throw s!"Unknown acknowledgement policy: {other}" + let ack ← match ← args.getObjValAs? String "acknowledged" with + | "missing" => pure AckBoolean.missing + | "false" => pure AckBoolean.no + | "true" => pure AckBoolean.yes + | other => throw s!"Unknown acknowledgement boolean state: {other}" + let mode ← match ← args.getObjValAs? String "mode" with + | "missing" => pure AckMode.missing + | "immediate" => pure AckMode.immediate + | "future" => pure AckMode.future + | other => throw s!"Unknown acknowledgement mode: {other}" + let cutoff ← match ← args.getObjValAs? String "cutoff" with + | "missing" => pure AckCutoff.missing + | "equal" => pure AckCutoff.equal + | "equivalent" => pure AckCutoff.equivalent + | "different" => pure AckCutoff.different + | "invalid" => pure AckCutoff.invalid + | other => throw s!"Unknown acknowledgement cutoff: {other}" + return Json.mkObj [("accepted", toJson (acknowledges effective ack mode cutoff))] + +def dispatch (request : Json) : Except String Json := do + let id ← request.getObjVal? "id" + let result ← match ← request.getObjValAs? String "kind" with + | "timestamp" => timestampResult request + | "policy" => policyResult request + | "pending" => pendingResult request + | "request" => requestResult request + | "ack" => acknowledgementResult request + | other => throw s!"Unknown request kind: {other}" + return Json.mkObj [("id", id), ("observed", result)] + +end Oracle + +def main : IO Unit := do + let stdin ← IO.getStdin + let stdout ← IO.getStdout + repeat + let line ← stdin.getLine + if line.isEmpty then break + let request ← match Json.parse line with + | .ok value => pure value + | .error message => throw (IO.userError s!"Invalid JSON request: {message}") + let response ← match Oracle.dispatch request with + | .ok value => pure value + | .error message => throw (IO.userError s!"Invalid oracle request: {message}") + stdout.putStrLn response.compress diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Proofs.lean b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Proofs.lean new file mode 100644 index 00000000000..51b2dd8a155 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Proofs.lean @@ -0,0 +1,127 @@ +import Contract + +namespace PR423 + +theorem disabled_preserves_evaluation (a : Attribute) (t : Activation) (logging : Bool) : + policy .disabled a t logging = normal := by cases a <;> rfl + +theorem absent_preserves_evaluation (m : Mode) (t : Activation) (logging : Bool) : + policy m .absent t logging = normal := by cases m <;> rfl + +theorem invalid_context_precedes_activation (m : Mode) (t : Activation) (logging : Bool) + (enabled : m ≠ .disabled) : + policy m .invalid t logging = ⟨.invalidContext, false⟩ := by + cases m <;> simp_all [policy] + +theorem immediate_ignores_activation (t : Activation) (logging : Bool) : + policy .immediate .valid t logging = ⟨.none, logging⟩ := by rfl + +theorem invalid_activation_fails_future_flag_even_without_logging (logging : Bool) : + policy .future .valid .invalid logging = ⟨.parseError, false⟩ := by rfl + +theorem only_future_cutoff_needs_activation (m : Mode) (a : Attribute) + (t : Activation) (logging : Bool) : + (policy m a t logging).error = .parseError ↔ + m = .future ∧ a = .valid ∧ t = .invalid := by + cases m <;> cases a <;> cases t <;> simp [policy, normal] + +theorem before_cutoff_retains_experiment (logging : Bool) : + policy .future .valid .before logging = normal := by rfl + +theorem equality_excludes_experiment : + policy .future .valid .equal true = ⟨.none, true⟩ := by rfl + +theorem missing_excludes_experiment : + policy .future .valid .missing true = ⟨.none, true⟩ := by rfl + +theorem ordinary_allocation_never_excluded (m : Mode) (a : Attribute) (t : Activation) : + (policy m a t false).exclude = false := by + cases m <;> cases a <;> cases t <;> rfl + +theorem disabled_never_remaps_error (a : Attribute) (e : Error) : + pending .disabled a e = e := by cases a <;> cases e <;> rfl + +theorem malformed_context_never_remaps_error (m : Mode) (e : Error) : + pending m .invalid e = e := by cases m <;> cases e <;> rfl + +theorem parse_error_is_preserved (m : Mode) (a : Attribute) : + pending m a .parseError = .parseError := by + cases m <;> cases a <;> rfl + +theorem enabled_valid_context_is_not_invalid (m : Mode) (a : Attribute) + (enabled : m ≠ .disabled) (valid : a ≠ .invalid) : + pending m a .invalidContext = .providerNotReady := by + cases m <;> cases a + all_goals first | exact (enabled rfl).elim | exact (valid rfl).elim | rfl + +theorem truncation_at_most_nine_digits (xs : List Char) : + (firstNanos xs).length ≤ 9 := by + simp [firstNanos, List.length_take, Nat.min_le_left] + +theorem truncation_is_idempotent (xs : List Char) : + firstNanos (firstNanos xs) = firstNanos xs := by + simp [firstNanos, List.take_take] + +theorem subnanosecond_digits_do_not_round (xs : List Char) : + fractionNanos (firstNanos xs) = fractionNanos xs := by + simp only [fractionNanos, truncation_is_idempotent] + +theorem absent_fraction_is_zero : fractionNanos [] = 0 := by rfl + +theorem unix_epoch_is_zero : utcSeconds 1970 1 1 0 0 0 0 = 0 := by decide + +theorem first_supported_instant : utcSeconds 0 1 1 0 0 0 0 = -62167219200 := by decide + +theorem last_supported_second : + utcSeconds 9999 12 31 23 59 59 0 = 253402300799 := by decide + +theorem absent_request_omits_options (m : Mode) : + request m .absent = ⟨true, false, .none⟩ := by cases m <;> rfl + +theorem disabled_request_ignores_attribute (a : Attribute) : + request .disabled a = ⟨true, false, .none⟩ := by cases a <;> rfl + +theorem invalid_enabled_request_is_not_sent (m : Mode) (enabled : m ≠ .disabled) : + request m .invalid = ⟨false, false, .invalidContext⟩ := by + cases m <;> simp_all [request] + +theorem no_policy_rejects_filtered_boolean (mode : AckMode) (cutoff : AckCutoff) : + acknowledges .none .yes mode cutoff = false := by cases mode <;> rfl + +theorem no_policy_rejects_filtered_mode (ack : AckBoolean) (mode : AckMode) + (cutoff : AckCutoff) (filtered : mode ≠ .missing) : + acknowledges .none ack mode cutoff = false := by + cases ack <;> cases mode + all_goals first | exact (filtered rfl).elim | rfl + +theorem ordinary_unmarked_response_accepted (cutoff : AckCutoff) : + acknowledges .none .missing .missing cutoff = true := by rfl + +theorem immediate_legacy_acknowledgement_accepted (cutoff : AckCutoff) : + acknowledges .immediate .yes .missing cutoff = true := by rfl + +theorem future_requires_mode_and_matching_instant (ack : AckBoolean) (mode : AckMode) + (cutoff : AckCutoff) : + acknowledges .future ack mode cutoff = true ↔ + mode = .future ∧ (cutoff = .equal ∨ cutoff = .equivalent) := by + cases ack <;> cases mode <;> cases cutoff <;> simp [acknowledges] + +theorem boolean_alone_is_insufficient_for_future (cutoff : AckCutoff) : + acknowledges .future .yes .missing cutoff = false := by cases cutoff <;> rfl + +#print axioms no_policy_rejects_filtered_boolean +#print axioms no_policy_rejects_filtered_mode +#print axioms ordinary_unmarked_response_accepted +#print axioms immediate_legacy_acknowledgement_accepted +#print axioms future_requires_mode_and_matching_instant +#print axioms boolean_alone_is_insufficient_for_future +#print axioms absent_request_omits_options +#print axioms disabled_request_ignores_attribute +#print axioms invalid_enabled_request_is_not_sent +#print axioms only_future_cutoff_needs_activation +#print axioms enabled_valid_context_is_not_invalid +#print axioms truncation_is_idempotent +#print axioms subnanosecond_digits_do_not_round +#print axioms last_supported_second + +end PR423 diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Review.lean b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Review.lean new file mode 100644 index 00000000000..847824b2f42 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lean/Review.lean @@ -0,0 +1,60 @@ +import Contract + +namespace GoReview +open PR423 + +/-- D015 proposal: provider disablement precedes optional mode validation. + This is a proposed ordering, not an observation of the Go constructor. -/ +inductive Construction where + | noop | start | invalidMode + deriving DecidableEq, Repr + +def construct (providerEnabled modeValid : Bool) : Construction := + if !providerEnabled then .noop else if modeValid then .start else .invalidMode + +theorem disabled_provider_wins (valid : Bool) : construct false valid = .noop := by + cases valid <;> rfl + +theorem enabled_invalid_mode_rejects : construct true false = .invalidMode := by rfl + +/-- D016 observed ordering only after provider readiness and targeting-key checks. + Flag lookup errors include FLAG_NOT_FOUND; earlier errors are outside this model. -/ +inductive Resolution where + | evaluate | invalidContext | flagNotFound + deriving DecidableEq, Repr + +def resolveReady (m : Mode) (a : Attribute) (flagExists : Bool) : Resolution := + if m != .disabled && a == .invalid then .invalidContext + else if flagExists then .evaluate else .flagNotFound + +theorem invalid_context_precedes_lookup (m : Mode) (flagExists : Bool) + (enabled : m ≠ .disabled) : resolveReady m .invalid flagExists = .invalidContext := by + cases m + case disabled => exact (enabled rfl).elim + case immediate => rfl + case future => rfl + +theorem disabled_ignores_invalid_attribute (flagExists : Bool) : + resolveReady .disabled .invalid flagExists = resolveReady .disabled .absent flagExists := by rfl + +/-- Reviewer alternative for D004: invalid activation becomes missing. + The browser proposal retains invalid and missing as distinct states. -/ +def invalidAsMissing (m : Mode) (a : Attribute) (activation : Activation) + (logging : Bool) : PolicyResult := + policy m a (if activation == .invalid then .missing else activation) logging + +theorem activation_alternatives_disagree : + policy .future .valid .invalid true ≠ invalidAsMissing .future .valid .invalid true := by + decide + +/-- Directly records the case conflict: global quarantine cannot preserve disabled mode. -/ +theorem disabled_invalid_activation_is_not_parse_error : + (policy .disabled .valid .invalid true).error ≠ .parseError := by decide + +#print axioms disabled_provider_wins +#print axioms enabled_invalid_mode_rejects +#print axioms invalid_context_precedes_lookup +#print axioms disabled_ignores_invalid_attribute +#print axioms activation_alternatives_disagree +#print axioms disabled_invalid_activation_is_not_parse_error +end GoReview diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-cases.json b/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-cases.json new file mode 100644 index 00000000000..6446b3e01f5 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-cases.json @@ -0,0 +1,185 @@ +[ + { + "id": "lookup/disabled/absent", + "decision_ids": [ + "D016" + ], + "mode": "disabled", + "flag": "lean-missing-disabled-absent", + "subject": "subject-lean-missing-disabled-absent", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/disabled/valid", + "decision_ids": [ + "D016" + ], + "mode": "disabled", + "flag": "lean-missing-disabled-valid", + "subject": "subject-lean-missing-disabled-valid", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/disabled/invalid", + "decision_ids": [ + "D016" + ], + "mode": "disabled", + "flag": "lean-missing-disabled-invalid", + "subject": "subject-lean-missing-disabled-invalid", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/immediate/absent", + "decision_ids": [ + "D016" + ], + "mode": "immediate", + "flag": "lean-missing-immediate-absent", + "subject": "subject-lean-missing-immediate-absent", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/immediate/valid", + "decision_ids": [ + "D016" + ], + "mode": "immediate", + "flag": "lean-missing-immediate-valid", + "subject": "subject-lean-missing-immediate-valid", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/immediate/invalid", + "decision_ids": [ + "D016" + ], + "mode": "immediate", + "flag": "lean-missing-immediate-invalid", + "subject": "subject-lean-missing-immediate-invalid", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/future_experiments_only/absent", + "decision_ids": [ + "D016" + ], + "mode": "future_experiments_only", + "flag": "lean-missing-future_experiments_only-absent", + "subject": "subject-lean-missing-future_experiments_only-absent", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/future_experiments_only/valid", + "decision_ids": [ + "D016" + ], + "mode": "future_experiments_only", + "flag": "lean-missing-future_experiments_only-valid", + "subject": "subject-lean-missing-future_experiments_only-valid", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "FLAG_NOT_FOUND", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + }, + { + "id": "lookup/future_experiments_only/invalid", + "decision_ids": [ + "D016" + ], + "mode": "future_experiments_only", + "flag": "lean-missing-future_experiments_only-invalid", + "subject": "subject-lean-missing-future_experiments_only-invalid", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + } + } +] diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-oracle.jsonl b/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-oracle.jsonl new file mode 100644 index 00000000000..6ecedc42dce --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/lookup-oracle.jsonl @@ -0,0 +1,9 @@ +{"mode":"disabled","error":"FLAG_NOT_FOUND","attribute":"absent"} +{"mode":"disabled","error":"FLAG_NOT_FOUND","attribute":"valid"} +{"mode":"disabled","error":"FLAG_NOT_FOUND","attribute":"invalid"} +{"mode":"immediate","error":"FLAG_NOT_FOUND","attribute":"absent"} +{"mode":"immediate","error":"FLAG_NOT_FOUND","attribute":"valid"} +{"mode":"immediate","error":"INVALID_CONTEXT","attribute":"invalid"} +{"mode":"future_experiments_only","error":"FLAG_NOT_FOUND","attribute":"absent"} +{"mode":"future_experiments_only","error":"FLAG_NOT_FOUND","attribute":"valid"} +{"mode":"future_experiments_only","error":"INVALID_CONTEXT","attribute":"invalid"} diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/policy-axioms.txt b/tests/ffe/fixtures/experimentation-opt-out-lean/policy-axioms.txt new file mode 100644 index 00000000000..0f9054fc1ed --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/policy-axioms.txt @@ -0,0 +1,12 @@ +'PR423.disabled_preserves_evaluation' does not depend on any axioms +'PR423.absent_preserves_evaluation' does not depend on any axioms +'PR423.invalid_context_precedes_activation' depends on axioms: [propext] +'PR423.immediate_ignores_activation' does not depend on any axioms +'PR423.invalid_activation_fails_future_flag_even_without_logging' does not depend on any axioms +'PR423.only_future_cutoff_needs_activation' depends on axioms: [propext] +'PR423.before_cutoff_retains_experiment' does not depend on any axioms +'PR423.equality_excludes_experiment' does not depend on any axioms +'PR423.missing_excludes_experiment' does not depend on any axioms +'PR423.ordinary_allocation_never_excluded' does not depend on any axioms +'GoReview.invalid_context_precedes_lookup' does not depend on any axioms +'GoReview.disabled_ignores_invalid_attribute' does not depend on any axioms diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/policy-oracle.jsonl b/tests/ffe/fixtures/experimentation-opt-out-lean/policy-oracle.jsonl new file mode 100644 index 00000000000..e1837c502d6 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/policy-oracle.jsonl @@ -0,0 +1,90 @@ +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/missing/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/invalid/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/equal/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/after/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/absent/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/missing/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/invalid/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/equal/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/after/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/valid/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/missing/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/invalid/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/equal/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/after/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/disabled/invalid/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/missing/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/invalid/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/equal/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/after/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/absent/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/valid/missing/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/immediate/valid/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/valid/invalid/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/immediate/valid/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/valid/before/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/immediate/valid/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/valid/equal/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/immediate/valid/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/immediate/valid/after/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/immediate/valid/after/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/missing/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/missing/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/invalid/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/invalid/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/before/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/before/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/equal/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/equal/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/after/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/immediate/invalid/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/missing/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/missing/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/invalid/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/equal/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/after/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/absent/after/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/valid/missing/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/future_experiments_only/valid/missing/1"} +{"observed":{"exclude":false,"error":"PARSE_ERROR"},"id":"policy/future_experiments_only/valid/invalid/0"} +{"observed":{"exclude":false,"error":"PARSE_ERROR"},"id":"policy/future_experiments_only/valid/invalid/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/valid/before/0"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/valid/before/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/valid/equal/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/future_experiments_only/valid/equal/1"} +{"observed":{"exclude":false,"error":"NONE"},"id":"policy/future_experiments_only/valid/after/0"} +{"observed":{"exclude":true,"error":"NONE"},"id":"policy/future_experiments_only/valid/after/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/missing/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/missing/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/invalid/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/invalid/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/before/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/before/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/equal/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/equal/1"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/after/0"} +{"observed":{"exclude":false,"error":"INVALID_CONTEXT"},"id":"policy/future_experiments_only/invalid/after/1"} diff --git a/tests/ffe/fixtures/experimentation-opt-out-lean/runtime-cases.json b/tests/ffe/fixtures/experimentation-opt-out-lean/runtime-cases.json new file mode 100644 index 00000000000..fc8ff6d1634 --- /dev/null +++ b/tests/ffe/fixtures/experimentation-opt-out-lean/runtime-cases.json @@ -0,0 +1,15962 @@ +[ + { + "id": "policy/disabled/absent/missing/0/fallback", + "oracle_case_id": "policy/disabled/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-missing-0-fallback", + "subject": "subject-lean-opt-out-disabled-absent-missing-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/missing/0/no-fallback", + "oracle_case_id": "policy/disabled/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-missing-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-missing-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/missing/0/null-activation", + "oracle_case_id": "policy/disabled/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-absent-missing-0-null-activation", + "subject": "subject-lean-opt-out-disabled-absent-missing-0-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/missing/1/fallback", + "oracle_case_id": "policy/disabled/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-missing-1-fallback", + "subject": "subject-lean-opt-out-disabled-absent-missing-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/missing/1/no-fallback", + "oracle_case_id": "policy/disabled/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-missing-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-missing-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/disabled/absent/missing/1/null-activation", + "oracle_case_id": "policy/disabled/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-absent-missing-1-null-activation", + "subject": "subject-lean-opt-out-disabled-absent-missing-1-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/0/fallback", + "oracle_case_id": "policy/disabled/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-invalid-0-fallback", + "subject": "subject-lean-opt-out-disabled-absent-invalid-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/0/no-fallback", + "oracle_case_id": "policy/disabled/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-invalid-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/0/unreachable-activation", + "oracle_case_id": "policy/disabled/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-absent-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-absent-invalid-0-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/1/fallback", + "oracle_case_id": "policy/disabled/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-invalid-1-fallback", + "subject": "subject-lean-opt-out-disabled-absent-invalid-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/1/no-fallback", + "oracle_case_id": "policy/disabled/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-invalid-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/absent/invalid/1/unreachable-activation", + "oracle_case_id": "policy/disabled/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-absent-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-absent-invalid-1-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/absent/before/0/fallback", + "oracle_case_id": "policy/disabled/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-before-0-fallback", + "subject": "subject-lean-opt-out-disabled-absent-before-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/before/0/no-fallback", + "oracle_case_id": "policy/disabled/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-before-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-before-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/absent/before/1/fallback", + "oracle_case_id": "policy/disabled/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-before-1-fallback", + "subject": "subject-lean-opt-out-disabled-absent-before-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/before/1/no-fallback", + "oracle_case_id": "policy/disabled/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-before-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-before-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/absent/equal/0/fallback", + "oracle_case_id": "policy/disabled/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-equal-0-fallback", + "subject": "subject-lean-opt-out-disabled-absent-equal-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/equal/0/no-fallback", + "oracle_case_id": "policy/disabled/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-equal-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-equal-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/absent/equal/1/fallback", + "oracle_case_id": "policy/disabled/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-equal-1-fallback", + "subject": "subject-lean-opt-out-disabled-absent-equal-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/equal/1/no-fallback", + "oracle_case_id": "policy/disabled/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-equal-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-equal-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/absent/after/0/fallback", + "oracle_case_id": "policy/disabled/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-after-0-fallback", + "subject": "subject-lean-opt-out-disabled-absent-after-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/after/0/no-fallback", + "oracle_case_id": "policy/disabled/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-after-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-after-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/disabled/absent/after/1/fallback", + "oracle_case_id": "policy/disabled/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-absent-after-1-fallback", + "subject": "subject-lean-opt-out-disabled-absent-after-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/absent/after/1/no-fallback", + "oracle_case_id": "policy/disabled/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-absent-after-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-absent-after-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-absent-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/0/fallback", + "oracle_case_id": "policy/disabled/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-missing-0-fallback", + "subject": "subject-lean-opt-out-disabled-valid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/0/no-fallback", + "oracle_case_id": "policy/disabled/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/0/null-activation", + "oracle_case_id": "policy/disabled/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-valid-missing-0-null-activation", + "subject": "subject-lean-opt-out-disabled-valid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/1/fallback", + "oracle_case_id": "policy/disabled/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-missing-1-fallback", + "subject": "subject-lean-opt-out-disabled-valid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/1/no-fallback", + "oracle_case_id": "policy/disabled/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/disabled/valid/missing/1/null-activation", + "oracle_case_id": "policy/disabled/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-valid-missing-1-null-activation", + "subject": "subject-lean-opt-out-disabled-valid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/0/fallback", + "oracle_case_id": "policy/disabled/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-invalid-0-fallback", + "subject": "subject-lean-opt-out-disabled-valid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/0/no-fallback", + "oracle_case_id": "policy/disabled/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/disabled/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-valid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-valid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/1/fallback", + "oracle_case_id": "policy/disabled/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-invalid-1-fallback", + "subject": "subject-lean-opt-out-disabled-valid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/1/no-fallback", + "oracle_case_id": "policy/disabled/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/valid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/disabled/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-valid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-valid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/valid/before/0/fallback", + "oracle_case_id": "policy/disabled/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-before-0-fallback", + "subject": "subject-lean-opt-out-disabled-valid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/before/0/no-fallback", + "oracle_case_id": "policy/disabled/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-before-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/before/1/fallback", + "oracle_case_id": "policy/disabled/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-before-1-fallback", + "subject": "subject-lean-opt-out-disabled-valid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/before/1/no-fallback", + "oracle_case_id": "policy/disabled/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-before-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/before/1/targeting-match", + "oracle_case_id": "policy/disabled/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "targeting-match", + "flag": "lean-opt-out-disabled-valid-before-1-targeting-match", + "subject": "subject-lean-opt-out-disabled-valid-before-1-targeting-match", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "TARGETING_MATCH", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-1-targeting-match", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "2026-02-01T00:00:00.000000002Z" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/before/1/targeting-miss", + "oracle_case_id": "policy/disabled/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "targeting-miss", + "flag": "lean-opt-out-disabled-valid-before-1-targeting-miss", + "subject": "subject-lean-opt-out-disabled-valid-before-1-targeting-miss", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-before-1-targeting-miss", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "different" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/equal/0/fallback", + "oracle_case_id": "policy/disabled/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-equal-0-fallback", + "subject": "subject-lean-opt-out-disabled-valid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/equal/0/no-fallback", + "oracle_case_id": "policy/disabled/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/equal/1/fallback", + "oracle_case_id": "policy/disabled/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-equal-1-fallback", + "subject": "subject-lean-opt-out-disabled-valid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/equal/1/no-fallback", + "oracle_case_id": "policy/disabled/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/after/0/fallback", + "oracle_case_id": "policy/disabled/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-after-0-fallback", + "subject": "subject-lean-opt-out-disabled-valid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/after/0/no-fallback", + "oracle_case_id": "policy/disabled/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-after-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/disabled/valid/after/1/fallback", + "oracle_case_id": "policy/disabled/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-valid-after-1-fallback", + "subject": "subject-lean-opt-out-disabled-valid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/valid/after/1/no-fallback", + "oracle_case_id": "policy/disabled/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-valid-after-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-valid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-valid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/0/fallback", + "oracle_case_id": "policy/disabled/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-missing-0-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/0/no-fallback", + "oracle_case_id": "policy/disabled/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/0/null-activation", + "oracle_case_id": "policy/disabled/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-invalid-missing-0-null-activation", + "subject": "subject-lean-opt-out-disabled-invalid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/1/fallback", + "oracle_case_id": "policy/disabled/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-missing-1-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/1/no-fallback", + "oracle_case_id": "policy/disabled/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/disabled/invalid/missing/1/null-activation", + "oracle_case_id": "policy/disabled/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "null-activation", + "flag": "lean-opt-out-disabled-invalid-missing-1-null-activation", + "subject": "subject-lean-opt-out-disabled-invalid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/0/fallback", + "oracle_case_id": "policy/disabled/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-invalid-0-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/0/no-fallback", + "oracle_case_id": "policy/disabled/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/disabled/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-invalid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/1/fallback", + "oracle_case_id": "policy/disabled/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-invalid-1-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/1/no-fallback", + "oracle_case_id": "policy/disabled/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/invalid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/disabled/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "unreachable-activation", + "flag": "lean-opt-out-disabled-invalid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-disabled-invalid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/0/fallback", + "oracle_case_id": "policy/disabled/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-before-0-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/0/no-fallback", + "oracle_case_id": "policy/disabled/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-before-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/fallback", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-before-1-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/no-fallback", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-before-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-null", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-null", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-null", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-null", + "attributes": { + "dd_experimentation_opt_out_at": null + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-null", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-true", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-true", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-true", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-true", + "attributes": { + "dd_experimentation_opt_out_at": true + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-true", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-false", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-false", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-false", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-false", + "attributes": { + "dd_experimentation_opt_out_at": false + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-false", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-zero", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-zero", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-zero", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-zero", + "attributes": { + "dd_experimentation_opt_out_at": 0 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-zero", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-one", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-one", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-one", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-one", + "attributes": { + "dd_experimentation_opt_out_at": 1 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-one", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-float", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-float", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-float", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-float", + "attributes": { + "dd_experimentation_opt_out_at": 1.5 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-float", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-array", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-array", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-array", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-array", + "attributes": { + "dd_experimentation_opt_out_at": [ + "2026-02-01T00:00:00.000000002Z" + ] + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-array", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-object", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-object", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-object", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-object", + "attributes": { + "dd_experimentation_opt_out_at": { + "timestamp": "2026-02-01T00:00:00.000000002Z" + } + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-object", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-empty", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-empty", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-empty", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-empty", + "attributes": { + "dd_experimentation_opt_out_at": "" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-empty", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/before/1/invalid-type-whitespace", + "oracle_case_id": "policy/disabled/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "invalid-type-whitespace", + "flag": "lean-opt-out-disabled-invalid-before-1-invalid-type-whitespace", + "subject": "subject-lean-opt-out-disabled-invalid-before-1-invalid-type-whitespace", + "attributes": { + "dd_experimentation_opt_out_at": " 2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-before-1-invalid-type-whitespace", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/equal/0/fallback", + "oracle_case_id": "policy/disabled/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-equal-0-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/equal/0/no-fallback", + "oracle_case_id": "policy/disabled/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/equal/1/fallback", + "oracle_case_id": "policy/disabled/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-equal-1-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/equal/1/no-fallback", + "oracle_case_id": "policy/disabled/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/after/0/fallback", + "oracle_case_id": "policy/disabled/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-after-0-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/after/0/no-fallback", + "oracle_case_id": "policy/disabled/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-after-0-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/disabled/invalid/after/1/fallback", + "oracle_case_id": "policy/disabled/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "fallback", + "flag": "lean-opt-out-disabled-invalid-after-1-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/disabled/invalid/after/1/no-fallback", + "oracle_case_id": "policy/disabled/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "disabled", + "shape": "no-fallback", + "flag": "lean-opt-out-disabled-invalid-after-1-no-fallback", + "subject": "subject-lean-opt-out-disabled-invalid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-disabled-invalid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/0/fallback", + "oracle_case_id": "policy/immediate/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-missing-0-fallback", + "subject": "subject-lean-opt-out-immediate-absent-missing-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/0/no-fallback", + "oracle_case_id": "policy/immediate/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-missing-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-missing-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/0/null-activation", + "oracle_case_id": "policy/immediate/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-absent-missing-0-null-activation", + "subject": "subject-lean-opt-out-immediate-absent-missing-0-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/1/fallback", + "oracle_case_id": "policy/immediate/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-missing-1-fallback", + "subject": "subject-lean-opt-out-immediate-absent-missing-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/1/no-fallback", + "oracle_case_id": "policy/immediate/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-missing-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-missing-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/immediate/absent/missing/1/null-activation", + "oracle_case_id": "policy/immediate/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-absent-missing-1-null-activation", + "subject": "subject-lean-opt-out-immediate-absent-missing-1-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/0/fallback", + "oracle_case_id": "policy/immediate/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-invalid-0-fallback", + "subject": "subject-lean-opt-out-immediate-absent-invalid-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/0/no-fallback", + "oracle_case_id": "policy/immediate/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-invalid-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/0/unreachable-activation", + "oracle_case_id": "policy/immediate/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-absent-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-absent-invalid-0-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/1/fallback", + "oracle_case_id": "policy/immediate/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-invalid-1-fallback", + "subject": "subject-lean-opt-out-immediate-absent-invalid-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/1/no-fallback", + "oracle_case_id": "policy/immediate/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-invalid-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/absent/invalid/1/unreachable-activation", + "oracle_case_id": "policy/immediate/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-absent-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-absent-invalid-1-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/absent/before/0/fallback", + "oracle_case_id": "policy/immediate/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-before-0-fallback", + "subject": "subject-lean-opt-out-immediate-absent-before-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/before/0/no-fallback", + "oracle_case_id": "policy/immediate/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-before-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-before-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/before/1/fallback", + "oracle_case_id": "policy/immediate/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-before-1-fallback", + "subject": "subject-lean-opt-out-immediate-absent-before-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/before/1/no-fallback", + "oracle_case_id": "policy/immediate/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-before-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-before-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/equal/0/fallback", + "oracle_case_id": "policy/immediate/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-equal-0-fallback", + "subject": "subject-lean-opt-out-immediate-absent-equal-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/equal/0/no-fallback", + "oracle_case_id": "policy/immediate/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-equal-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-equal-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/equal/1/fallback", + "oracle_case_id": "policy/immediate/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-equal-1-fallback", + "subject": "subject-lean-opt-out-immediate-absent-equal-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/equal/1/no-fallback", + "oracle_case_id": "policy/immediate/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-equal-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-equal-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/after/0/fallback", + "oracle_case_id": "policy/immediate/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-after-0-fallback", + "subject": "subject-lean-opt-out-immediate-absent-after-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/after/0/no-fallback", + "oracle_case_id": "policy/immediate/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-after-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-after-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/absent/after/1/fallback", + "oracle_case_id": "policy/immediate/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-absent-after-1-fallback", + "subject": "subject-lean-opt-out-immediate-absent-after-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/absent/after/1/no-fallback", + "oracle_case_id": "policy/immediate/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-absent-after-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-absent-after-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-immediate-absent-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/0/fallback", + "oracle_case_id": "policy/immediate/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-missing-0-fallback", + "subject": "subject-lean-opt-out-immediate-valid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/0/no-fallback", + "oracle_case_id": "policy/immediate/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/0/null-activation", + "oracle_case_id": "policy/immediate/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-valid-missing-0-null-activation", + "subject": "subject-lean-opt-out-immediate-valid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/1/fallback", + "oracle_case_id": "policy/immediate/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-missing-1-fallback", + "subject": "subject-lean-opt-out-immediate-valid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/1/no-fallback", + "oracle_case_id": "policy/immediate/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/immediate/valid/missing/1/null-activation", + "oracle_case_id": "policy/immediate/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-valid-missing-1-null-activation", + "subject": "subject-lean-opt-out-immediate-valid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/0/fallback", + "oracle_case_id": "policy/immediate/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-invalid-0-fallback", + "subject": "subject-lean-opt-out-immediate-valid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/0/no-fallback", + "oracle_case_id": "policy/immediate/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/immediate/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-valid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-valid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/1/fallback", + "oracle_case_id": "policy/immediate/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-invalid-1-fallback", + "subject": "subject-lean-opt-out-immediate-valid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/1/no-fallback", + "oracle_case_id": "policy/immediate/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/valid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/immediate/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-valid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-valid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/valid/before/0/fallback", + "oracle_case_id": "policy/immediate/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-before-0-fallback", + "subject": "subject-lean-opt-out-immediate-valid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/before/0/no-fallback", + "oracle_case_id": "policy/immediate/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-before-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/before/1/fallback", + "oracle_case_id": "policy/immediate/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-before-1-fallback", + "subject": "subject-lean-opt-out-immediate-valid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/before/1/no-fallback", + "oracle_case_id": "policy/immediate/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-before-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/before/1/targeting-match", + "oracle_case_id": "policy/immediate/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "targeting-match", + "flag": "lean-opt-out-immediate-valid-before-1-targeting-match", + "subject": "subject-lean-opt-out-immediate-valid-before-1-targeting-match", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-1-targeting-match", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "2026-02-01T00:00:00.000000002Z" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/before/1/targeting-miss", + "oracle_case_id": "policy/immediate/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "targeting-miss", + "flag": "lean-opt-out-immediate-valid-before-1-targeting-miss", + "subject": "subject-lean-opt-out-immediate-valid-before-1-targeting-miss", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-before-1-targeting-miss", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "different" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/equal/0/fallback", + "oracle_case_id": "policy/immediate/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-equal-0-fallback", + "subject": "subject-lean-opt-out-immediate-valid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/equal/0/no-fallback", + "oracle_case_id": "policy/immediate/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/equal/1/fallback", + "oracle_case_id": "policy/immediate/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-equal-1-fallback", + "subject": "subject-lean-opt-out-immediate-valid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/equal/1/no-fallback", + "oracle_case_id": "policy/immediate/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/after/0/fallback", + "oracle_case_id": "policy/immediate/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-after-0-fallback", + "subject": "subject-lean-opt-out-immediate-valid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/after/0/no-fallback", + "oracle_case_id": "policy/immediate/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-after-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/valid/after/1/fallback", + "oracle_case_id": "policy/immediate/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-valid-after-1-fallback", + "subject": "subject-lean-opt-out-immediate-valid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/valid/after/1/no-fallback", + "oracle_case_id": "policy/immediate/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-valid-after-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-valid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-valid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/0/fallback", + "oracle_case_id": "policy/immediate/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-missing-0-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/0/no-fallback", + "oracle_case_id": "policy/immediate/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/0/null-activation", + "oracle_case_id": "policy/immediate/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-invalid-missing-0-null-activation", + "subject": "subject-lean-opt-out-immediate-invalid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/1/fallback", + "oracle_case_id": "policy/immediate/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-missing-1-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/1/no-fallback", + "oracle_case_id": "policy/immediate/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/immediate/invalid/missing/1/null-activation", + "oracle_case_id": "policy/immediate/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "null-activation", + "flag": "lean-opt-out-immediate-invalid-missing-1-null-activation", + "subject": "subject-lean-opt-out-immediate-invalid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/0/fallback", + "oracle_case_id": "policy/immediate/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-invalid-0-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/0/no-fallback", + "oracle_case_id": "policy/immediate/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/immediate/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-invalid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/1/fallback", + "oracle_case_id": "policy/immediate/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-invalid-1-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/1/no-fallback", + "oracle_case_id": "policy/immediate/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/invalid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/immediate/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "unreachable-activation", + "flag": "lean-opt-out-immediate-invalid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-immediate-invalid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/0/fallback", + "oracle_case_id": "policy/immediate/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-before-0-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/0/no-fallback", + "oracle_case_id": "policy/immediate/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-before-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/fallback", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-before-1-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/no-fallback", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-before-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-null", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-null", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-null", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-null", + "attributes": { + "dd_experimentation_opt_out_at": null + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-null", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-true", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-true", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-true", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-true", + "attributes": { + "dd_experimentation_opt_out_at": true + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-true", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-false", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-false", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-false", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-false", + "attributes": { + "dd_experimentation_opt_out_at": false + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-false", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-zero", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-zero", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-zero", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-zero", + "attributes": { + "dd_experimentation_opt_out_at": 0 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-zero", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-one", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-one", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-one", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-one", + "attributes": { + "dd_experimentation_opt_out_at": 1 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-one", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-float", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-float", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-float", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-float", + "attributes": { + "dd_experimentation_opt_out_at": 1.5 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-float", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-array", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-array", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-array", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-array", + "attributes": { + "dd_experimentation_opt_out_at": [ + "2026-02-01T00:00:00.000000002Z" + ] + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-array", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-object", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-object", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-object", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-object", + "attributes": { + "dd_experimentation_opt_out_at": { + "timestamp": "2026-02-01T00:00:00.000000002Z" + } + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-object", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-empty", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-empty", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-empty", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-empty", + "attributes": { + "dd_experimentation_opt_out_at": "" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-empty", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/before/1/invalid-type-whitespace", + "oracle_case_id": "policy/immediate/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "invalid-type-whitespace", + "flag": "lean-opt-out-immediate-invalid-before-1-invalid-type-whitespace", + "subject": "subject-lean-opt-out-immediate-invalid-before-1-invalid-type-whitespace", + "attributes": { + "dd_experimentation_opt_out_at": " 2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-before-1-invalid-type-whitespace", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/equal/0/fallback", + "oracle_case_id": "policy/immediate/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-equal-0-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/equal/0/no-fallback", + "oracle_case_id": "policy/immediate/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/equal/1/fallback", + "oracle_case_id": "policy/immediate/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-equal-1-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/equal/1/no-fallback", + "oracle_case_id": "policy/immediate/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/after/0/fallback", + "oracle_case_id": "policy/immediate/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-after-0-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/after/0/no-fallback", + "oracle_case_id": "policy/immediate/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-after-0-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/immediate/invalid/after/1/fallback", + "oracle_case_id": "policy/immediate/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "fallback", + "flag": "lean-opt-out-immediate-invalid-after-1-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/immediate/invalid/after/1/no-fallback", + "oracle_case_id": "policy/immediate/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "immediate", + "shape": "no-fallback", + "flag": "lean-opt-out-immediate-invalid-after-1-no-fallback", + "subject": "subject-lean-opt-out-immediate-invalid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-immediate-invalid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/0/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-missing-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-missing-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/0/null-activation", + "oracle_case_id": "policy/future_experiments_only/absent/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-absent-missing-0-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-0-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/1/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-missing-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-missing-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/missing/1/null-activation", + "oracle_case_id": "policy/future_experiments_only/absent/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-absent-missing-1-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-absent-missing-1-null-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/0/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/0/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-0-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/1/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/invalid/1/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/absent/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-absent-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-absent-invalid-1-unreachable-activation", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/before/0/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-before-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-before-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/before/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-before-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-before-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/before/1/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-before-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-before-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/before/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-before-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-before-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/equal/0/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-equal-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-equal-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/equal/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-equal-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-equal-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/equal/1/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-equal-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-equal-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/equal/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-equal-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-equal-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/after/0/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-after-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-after-0-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/after/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-after-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-after-0-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/after/1/fallback", + "oracle_case_id": "policy/future_experiments_only/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-absent-after-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-after-1-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/absent/after/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/absent/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-absent-after-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-absent-after-1-no-fallback", + "attributes": {}, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-absent-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/0/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-missing-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/0/null-activation", + "oracle_case_id": "policy/future_experiments_only/valid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-valid-missing-0-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/1/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-missing-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/missing/1/null-activation", + "oracle_case_id": "policy/future_experiments_only/valid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-valid-missing-1-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-valid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/0/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/1/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/valid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-valid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-valid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "PARSE_ERROR", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/0/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-before-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-before-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/1/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-before-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-before-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/1/targeting-match", + "oracle_case_id": "policy/future_experiments_only/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "targeting-match", + "flag": "lean-opt-out-future_experiments_only-valid-before-1-targeting-match", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-1-targeting-match", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "TARGETING_MATCH", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": true + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-1-targeting-match", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "2026-02-01T00:00:00.000000002Z" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/before/1/targeting-miss", + "oracle_case_id": "policy/future_experiments_only/valid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "targeting-miss", + "flag": "lean-opt-out-future_experiments_only-valid-before-1-targeting-miss", + "subject": "subject-lean-opt-out-future_experiments_only-valid-before-1-targeting-miss", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-before-1-targeting-miss", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [ + { + "conditions": [ + { + "attribute": "dd_experimentation_opt_out_at", + "operator": "ONE_OF", + "value": [ + "different" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/equal/0/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-equal-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/equal/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/equal/1/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-equal-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/equal/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/after/0/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-after-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/after/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-after-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "candidate-variant", + "allocationKey": "candidate", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/after/1/fallback", + "oracle_case_id": "policy/future_experiments_only/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-valid-after-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "STATIC", + "variant": "ordinary-variant", + "allocationKey": "ordinary", + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/valid/after/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/valid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-valid-after-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-valid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": null, + "reason": "DEFAULT", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-valid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/0/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/0/null-activation", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-0-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-0-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-0-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/1/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/missing/1/null-activation", + "oracle_case_id": "policy/future_experiments_only/invalid/missing/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "null-activation", + "flag": "lean-opt-out-future_experiments_only-invalid-missing-1-null-activation", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-missing-1-null-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-missing-1-null-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": null + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/0/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/0/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-0-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-0-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-0-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/1/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/invalid/1/unreachable-activation", + "oracle_case_id": "policy/future_experiments_only/invalid/invalid/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "unreachable-activation", + "flag": "lean-opt-out-future_experiments_only-invalid-invalid-1-unreachable-activation", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-invalid-1-unreachable-activation", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-invalid-1-unreachable-activation", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + }, + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "not-a-date" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/0/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-before-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/before/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-before-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-null", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-null", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-null", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-null", + "attributes": { + "dd_experimentation_opt_out_at": null + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-null", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-true", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-true", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-true", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-true", + "attributes": { + "dd_experimentation_opt_out_at": true + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-true", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-false", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-false", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-false", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-false", + "attributes": { + "dd_experimentation_opt_out_at": false + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-false", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-zero", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-zero", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-zero", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-zero", + "attributes": { + "dd_experimentation_opt_out_at": 0 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-zero", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-one", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-one", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-one", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-one", + "attributes": { + "dd_experimentation_opt_out_at": 1 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-one", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-float", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-float", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-float", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-float", + "attributes": { + "dd_experimentation_opt_out_at": 1.5 + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-float", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-array", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-array", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-array", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-array", + "attributes": { + "dd_experimentation_opt_out_at": [ + "2026-02-01T00:00:00.000000002Z" + ] + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-array", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-object", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-object", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-object", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-object", + "attributes": { + "dd_experimentation_opt_out_at": { + "timestamp": "2026-02-01T00:00:00.000000002Z" + } + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-object", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-empty", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-empty", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-empty", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-empty", + "attributes": { + "dd_experimentation_opt_out_at": "" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-empty", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/before/1/invalid-type-whitespace", + "oracle_case_id": "policy/future_experiments_only/invalid/before/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "invalid-type-whitespace", + "flag": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-whitespace", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-whitespace", + "attributes": { + "dd_experimentation_opt_out_at": " 2026-02-01T00:00:00.000000002Z" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-before-1-invalid-type-whitespace", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000001Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/equal/0/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-equal-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-equal-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-equal-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/equal/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/equal/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-equal-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-equal-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-equal-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/equal/1/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-equal-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-equal-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-equal-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/equal/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/equal/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-equal-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-equal-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-equal-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000002Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/after/0/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-after-0-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-after-0-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-after-0-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/after/0/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/after/0", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-after-0-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-after-0-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-after-0-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": false, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/after/1/fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-after-1-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-after-1-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-after-1-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + }, + { + "key": "ordinary", + "rules": [], + "splits": [ + { + "variationKey": "ordinary-variant", + "shards": [], + "serialId": 102 + } + ], + "doLog": false + } + ] + } + }, + { + "id": "policy/future_experiments_only/invalid/after/1/no-fallback", + "oracle_case_id": "policy/future_experiments_only/invalid/after/1", + "decision_ids": [ + "D002", + "D004", + "D010", + "D011" + ], + "mode": "future_experiments_only", + "shape": "no-fallback", + "flag": "lean-opt-out-future_experiments_only-invalid-after-1-no-fallback", + "subject": "subject-lean-opt-out-future_experiments_only-invalid-after-1-no-fallback", + "attributes": { + "dd_experimentation_opt_out_at": "not-a-date" + }, + "defaultValue": "same-value", + "expected": { + "value": "same-value", + "errorCode": "INVALID_CONTEXT", + "reason": "ERROR", + "variant": null, + "allocationKey": null, + "exposure": false + }, + "configuration": { + "key": "lean-opt-out-future_experiments_only-invalid-after-1-no-fallback", + "enabled": true, + "variationType": "STRING", + "variations": { + "candidate-variant": { + "key": "candidate-variant", + "value": "same-value" + }, + "ordinary-variant": { + "key": "ordinary-variant", + "value": "same-value" + } + }, + "allocations": [ + { + "key": "candidate", + "rules": [], + "splits": [ + { + "variationKey": "candidate-variant", + "shards": [], + "serialId": 101 + } + ], + "doLog": true, + "randomizationActivatedAt": "2026-02-01T00:00:00.000000003Z" + } + ] + } + } +] diff --git a/tests/ffe/test_evaluation_telemetry_opt_out.py b/tests/ffe/test_evaluation_telemetry_opt_out.py new file mode 100644 index 00000000000..bf0239c1faf --- /dev/null +++ b/tests/ffe/test_evaluation_telemetry_opt_out.py @@ -0,0 +1,281 @@ +"""Per-subject opt-out suppresses evaluation telemetry, not flag results or exposures. + +Run the same assertions with support disabled (the default) and +enabled. Each signal has its own class so manifests can describe SDK support. +Validation reads the final captures after the scenario flushes and stops its +containers. Positive controls prevent missing telemetry from passing as opt-out. +""" + +from concurrent.futures import ThreadPoolExecutor +from typing import Any, Literal, TypedDict, cast + +from tests.ffe.utils.evaluation_telemetry import ( + assert_count, + assert_evaluation_responses, + assert_opt_out_exposure_attribute, + assert_metric_activity, + assert_setup_succeeded, + evaluation_count, + evaluation_setup_error, +) +from tests.ffe.utils.exposures import exposure_events_from_data +from tests.ffe.utils.fixtures import make_ufc_fixture +from utils import HttpResponse, context, features, interfaces, remote_config as rc, rfc, scenarios, weblog + + +ATTRIBUTE = "dd_evaluation_telemetry_opt_out" +RFC = "https://docs.google.com/document/d/153tRlj46l-XfBGCA2X_NvxW4vwYObaH8zm2moP_AqMk/edit" +ATTRIBUTES: dict[str, dict[str, Any]] = { + "true": {ATTRIBUTE: True}, + "false": {ATTRIBUTE: False}, + "missing": {}, + "string-true": {ATTRIBUTE: "true"}, + "number-one": {ATTRIBUTE: 1}, + "null": {ATTRIBUTE: None}, +} +ANNOTATIONS = {"ffe_flags_enc", "ffe_subjects_enc", "ffe_runtime_defaults"} + + +class EvaluationCase(TypedDict): + flag: str + subject: str + allocation_key: str | None + attributes: dict[str, Any] + expected_count: int + expected_value: str + check_exposure: bool + responses: list[HttpResponse] + + +class _TelemetryContract: + cases: list[EvaluationCase] + + def prepare(self, signal: str) -> None: + self.setup_error = evaluation_setup_error(lambda: self._prepare(signal)) + + def _prepare(self, signal: str) -> None: + enabled = context.scenario == scenarios.feature_flagging_evaluation_telemetry_opt_out + self.cases = [] + fixture = make_ufc_fixture(f"opt-out-{signal}-true", serial_id=101) + fixture["flags"] = {} # Keep only the envelope; flags are added below. + for index, (label, attributes) in enumerate(ATTRIBUTES.items()): + flag = f"opt-out-{signal}-{label}" + fixture["flags"].update(make_ufc_fixture(flag, serial_id=101 + index)["flags"]) + if label == "true": + allocations = fixture["flags"][flag]["allocations"] + allocations[0]["rules"] = [ + {"conditions": [{"attribute": ATTRIBUTE, "operator": "ONE_OF", "value": ["true"]}]} + ] + # Removing the attribute before evaluation selects off-value, + # even if the original context is retained for exposure logging. + allocations.extend( + make_ufc_fixture(flag, "off", allocation_key="fallback", serial_id=201)["flags"][flag][ + "allocations" + ] + ) + self.cases.append( + EvaluationCase( + flag=flag, + subject=f"subject-{signal}-{label}", + allocation_key="default-allocation", + attributes=attributes, + expected_count=0 if enabled and label == "true" else 3, + expected_value="on-value", + check_exposure=True, + responses=[], + ) + ) + + # Absent flags return the application default without an allocation. + self.cases.extend( + EvaluationCase( + flag=f"opt-out-{signal}-missing-flag-{label}", + subject=f"subject-{signal}-missing-flag-{label}", + allocation_key=None, + attributes={ATTRIBUTE: opted_out}, + expected_count=0 if enabled and opted_out else 3, + expected_value="default", + check_exposure=False, + responses=[], + ) + for label, opted_out in [("true", True), ("false", False)] + ) + independent_cases = list(self.cases) + shared_flag = f"opt-out-{signal}-shared" + fixture["flags"].update(make_ufc_fixture(shared_flag)["flags"]) + fixture["flags"][shared_flag]["allocations"] = [] + shared_cases = [ + EvaluationCase( + flag=shared_flag, + subject=f"subject-{signal}-shared-{label}", + allocation_key=f"shared-{label}", + attributes={ATTRIBUTE: opted_out, "test_subject": f"subject-{signal}-shared-{label}"}, + expected_count=0 if enabled and opted_out else 3, + expected_value="on-value", + check_exposure=True, + responses=[], + ) + for label, opted_out in [("true", True), ("false", False)] + ] + # Metrics do not contain subject identifiers. Distinct allocations let + # their existing tags identify each subject without changing the value. + for index, case in enumerate(shared_cases): + allocation = make_ufc_fixture( + shared_flag, allocation_key=cast("str", case["allocation_key"]), serial_id=110 + index + )["flags"][shared_flag]["allocations"][0] + allocation["rules"] = [ + {"conditions": [{"attribute": "test_subject", "operator": "ONE_OF", "value": [case["subject"]]}]} + ] + fixture["flags"][shared_flag]["allocations"].append(allocation) + self.cases.extend(shared_cases) + + # The same subject opts out, then removes the attribute. Suppression is + # per evaluation, not a permanent decision cached for the subject. + per_evaluation_flag = f"opt-out-{signal}-per-evaluation" + fixture["flags"].update(make_ufc_fixture(per_evaluation_flag, serial_id=120)["flags"]) + per_evaluation_cases = [ + EvaluationCase( + flag=per_evaluation_flag, + subject=f"subject-{signal}-per-evaluation", + allocation_key="default-allocation", + attributes=attributes, + expected_count=0 if enabled and attributes else 3, + expected_value="on-value", + # Exposure deduplication after an attribute change is SDK-defined. + check_exposure=False, + responses=[], + ) + for attributes in [{ATTRIBUTE: True}, {}] + ] + self.cases.extend(per_evaluation_cases) + + rc.tracer_rc_state.reset().set_config(f"datadog/2/FFE_FLAGS/opt-out-{signal}/config", fixture).apply() + + # Different subjects overlap. Repeated evaluations also exercise aggregation + # and the ordinary exposure cache without changing the targeting context. + def evaluate(case: EvaluationCase) -> None: + response = weblog.post( + "/ffe", + json={ + "flag": case["flag"], + "targetingKey": case["subject"], + "attributes": case["attributes"], + "variationType": "STRING", + "defaultValue": "default", + }, + ) + case["responses"].append(response) + + with ThreadPoolExecutor(max_workers=len(independent_cases)) as executor: + for _ in range(3): + list(executor.map(evaluate, independent_cases)) + + # Alternate subjects on one flag. A flag-scoped opt-out cache must not + # suppress the allowed subject or permit the opted-out subject. + for _ in range(3): + for case in shared_cases: + evaluate(case) + + for case in per_evaluation_cases: + for _ in range(3): + evaluate(case) + + def assert_evaluations(self) -> None: + assert_setup_succeeded(self.setup_error) + for case in self.cases: + assert_evaluation_responses(case["responses"], expected_count=3, expected_value=case["expected_value"]) + + def expected_totals(self, key: Literal["subject", "allocation_key"]) -> dict[tuple[str, str | None], int]: + # Sequential evaluations of the same subject share the exported series. + totals: dict[tuple[str, str | None], int] = {} + for case in self.cases: + group = (case["flag"], case[key]) + totals[group] = totals.get(group, 0) + case["expected_count"] + return totals + + +@scenarios.feature_flagging_evaluation_telemetry_opt_out_disabled +@scenarios.feature_flagging_evaluation_telemetry_opt_out +@features.feature_flags_evaluation_telemetry_opt_out +@rfc(RFC) +class Test_FFE_Evaluation_Telemetry_Opt_Out_EVP(_TelemetryContract): + def setup_counts(self) -> None: + self.prepare("evp") + + def test_counts(self) -> None: + self.assert_evaluations() + captures = list(interfaces.agent.get_data(path_filters="/api/v2/flagevaluation")) + for (flag, subject), expected_count in self.expected_totals("subject").items(): + assert subject is not None + assert_count( + evaluation_count(captures, flag, subject=subject), + expected_count, + f"{flag} ({subject})", + ) + + +@scenarios.feature_flagging_evaluation_telemetry_opt_out_disabled +@scenarios.feature_flagging_evaluation_telemetry_opt_out +@features.feature_flags_evaluation_telemetry_opt_out +@rfc(RFC) +class Test_FFE_Evaluation_Telemetry_Opt_Out_Metrics(_TelemetryContract): + def setup_counts(self) -> None: + self.prepare("metrics") + + def test_counts(self) -> None: + self.assert_evaluations() + metrics = [metric for _, metric in interfaces.agent.get_metrics()] + for (flag, allocation_key), expected_count in self.expected_totals("allocation_key").items(): + assert_metric_activity( + metrics, + flag, + allocation_key=allocation_key, + suppressed=expected_count == 0, + ) + + +@scenarios.feature_flagging_evaluation_telemetry_opt_out_disabled +@scenarios.feature_flagging_evaluation_telemetry_opt_out +@features.feature_flags_evaluation_telemetry_opt_out +@rfc(RFC) +class Test_FFE_Evaluation_Telemetry_Opt_Out_Exposures(_TelemetryContract): + def setup_unchanged(self) -> None: + self.prepare("exposures") + + def test_unchanged(self) -> None: + self.assert_evaluations() + captures = list(interfaces.agent.get_data(path_filters="/api/v2/exposures")) + for case in self.cases: + if not case["check_exposure"]: + continue + events = [ + event for data in captures for event in exposure_events_from_data(data, {case["flag"]}, case["subject"]) + ] + assert len(events) == 1, f"{case['flag']}: expected one deduplicated exposure, got {events}" + assert events[0]["variant"]["key"] == "on" + assert events[0]["allocation"]["key"] == case["allocation_key"] + attributes = events[0]["subject"].get("attributes", {}) + # Some providers also include targetingKey in exposure attributes. + # Check the customer input without forbidding that existing behavior. + assert_opt_out_exposure_attribute(attributes, case["attributes"], ATTRIBUTE) + + +@scenarios.feature_flagging_evaluation_telemetry_opt_out_disabled +@scenarios.feature_flagging_evaluation_telemetry_opt_out +@features.feature_flags_evaluation_telemetry_opt_out +@rfc(RFC) +class Test_FFE_Evaluation_Telemetry_Opt_Out_Trace_Annotations(_TelemetryContract): + def setup_annotations(self) -> None: + self.prepare("traces") + + def test_annotations(self) -> None: + self.assert_evaluations() + for case in self.cases: + for response in case["responses"]: + spans = [span for _, _, span in interfaces.library.get_spans(request=response, full_trace=True)] + assert spans, f"{case['flag']}: unrelated application tracing must remain enabled" + annotated = [span for span in spans if ANNOTATIONS.intersection(span.get("meta", {}))] + if case["expected_count"]: + assert annotated, f"{case['flag']}: missing positive-control flag annotation" + else: + assert not annotated, f"{case['flag']}: opted-out evaluation annotated a trace" diff --git a/tests/ffe/test_experimentation_opt_out.py b/tests/ffe/test_experimentation_opt_out.py new file mode 100644 index 00000000000..30fa4e9f4b9 --- /dev/null +++ b/tests/ffe/test_experimentation_opt_out.py @@ -0,0 +1,450 @@ +"""Exercise the activation cutoff through Remote Config, evaluations, and EVP delivery. + +Each scenario starts a separate SDK process with its configured mode. Assertions +read final captures after shutdown. These cases complement the shared evaluator +fixtures; they do not implement a second evaluator in the test harness. +""" + +from concurrent.futures import ThreadPoolExecutor +from copy import deepcopy +import json +from typing import Any + +from tests.ffe.utils.evaluation_telemetry import ( + assert_count, + assert_evaluation_responses, + assert_setup_succeeded, + evaluation_count, + evaluation_setup_error, +) +from tests.ffe.utils.experimentation_opt_out import ( + DEFAULT_VALUE as DEFAULT, + Evaluation, + Exposure, + assert_exposures, + evaluation_case, + opt_out_fixture, + run_evaluation, +) +from tests.ffe.utils.lean_experimentation_opt_out import ( + assert_details, + assert_evaluation_delivery, + load_lookup_cases, + load_runtime_cases, +) +from utils import context, features, interfaces, remote_config as rc, rfc, scenarios, weblog + + +ATTRIBUTE = "dd_experimentation_opt_out_at" +CUTOFF = "2026-02-01T00:00:00Z" +OLD = "2026-01-01T00:00:00Z" +NEW = "2026-03-01T00:00:00Z" +ON = "on-value" +OFF = "off-value" + + +@scenarios.feature_flagging_experimentation_opt_out_disabled +@scenarios.feature_flagging_experimentation_opt_out_immediate +@scenarios.feature_flagging_experimentation_opt_out_future +@features.feature_flags_experimentation_opt_out +@rfc( + "https://github.com/DataDog/ffe-system-test-data/blob/f8a4176cd8360b12b56a8b6ec6ef215e2cc21077/contracts/experimentation-opt-out/decision-history.md" +) +class Test_FFE_Experimentation_Opt_Out: + def setup_lean_policy_contract(self) -> None: + self.lean_policy_setup_error = evaluation_setup_error(self.prepare_lean_policy_contract) + + def prepare_lean_policy_contract(self) -> None: + # D002 r1, D004 r2, D010 r1, D011 r1. Expected policy results are + # generated by Oracle.lean; no SDK result supplies an expectation. + mode = ("disabled", "immediate", "future_experiments_only")[self.mode_index()] + selected = [case for case in load_runtime_cases() if case["mode"] == mode] + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {case["flag"]: case["configuration"] for case in selected} + self.lean_cases: list[dict[str, Any]] = [] + for source in selected: + # D009 is a native delivery obligation, outside the policy proof. + # Both subjects must keep identical assignments and exposure policy. + for suppressed in (False, True): + case = deepcopy(source) + case["subject"] += "-suppressed" if suppressed else "-observed" + case["attributes"]["dd_evaluation_telemetry_opt_out"] = suppressed + case["expected_evaluations"] = 0 if suppressed else 3 + case["responses"] = [] + self.lean_cases.append(case) + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/lean-opt-out/config", fixture).apply() + + def evaluate(case: dict[str, Any]) -> None: + case["responses"].append( + weblog.post( + "/ffe", + json={ + "flag": case["flag"], + "targetingKey": case["subject"], + "attributes": case["attributes"], + "variationType": "STRING", + "defaultValue": case["defaultValue"], + }, + ) + ) + + with ThreadPoolExecutor(max_workers=4) as executor: + for _ in range(3): + list(executor.map(evaluate, self.lean_cases)) + + def test_lean_policy_contract(self) -> None: + assert_setup_succeeded(self.lean_policy_setup_error) + assert len(self.lean_cases) == 168, "Every mode must execute all 84 materializations for both telemetry states" + assert len({case["oracle_case_id"] for case in self.lean_cases}) == 30 + expected_exposures: set[Exposure] = set() + for case in self.lean_cases: + assert_details(case["responses"], case) + if case["expected"]["exposure"]: + expected_exposures.add( + (case["flag"], case["subject"], case["expected"]["allocationKey"], case["expected"]["variant"]) + ) + assert_exposures( + interfaces.agent.get_data(path_filters="/api/v2/exposures"), + flags={case["flag"] for case in self.lean_cases}, + expected=expected_exposures, + ) + assert_evaluation_delivery(interfaces.agent.get_data(path_filters="/api/v2/flagevaluation"), self.lean_cases) + + def setup_lean_context_recovery(self) -> None: + self.lean_recovery_setup_error = evaluation_setup_error(self.prepare_lean_context_recovery) + + def prepare_lean_context_recovery(self) -> None: + # Native cache recovery obligation. Each stage uses a Lean policy result. + mode = ("disabled", "immediate", "future_experiments_only")[self.mode_index()] + source = {case["id"]: case for case in load_runtime_cases()} + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {} + self.lean_recovery: list[dict[str, Any]] = [] + for activation in ("before", "after"): + for preference in ("valid", "invalid"): + initial = deepcopy(source[f"policy/{mode}/{preference}/{activation}/1/fallback"]) + recovered = deepcopy(source[f"policy/{mode}/absent/{activation}/1/fallback"]) + flag = initial["flag"] + "-recovery" + configuration = initial["configuration"] + configuration["key"] = flag + fixture["flags"][flag] = configuration + for stage in (initial, recovered): + stage["flag"] = flag + stage["subject"] = "subject-" + flag + stage["responses"] = [] + stage["expected_evaluations"] = 6 + self.lean_recovery.append({"initial": initial, "recovered": recovered}) + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/lean-recovery/config", fixture).apply() + for sequence in self.lean_recovery: + for name in ("initial", "recovered"): + stage = sequence[name] + for _ in range(3): + stage["responses"].append( + weblog.post( + "/ffe", + json={ + "flag": stage["flag"], + "targetingKey": stage["subject"], + "attributes": stage["attributes"], + "variationType": "STRING", + "defaultValue": stage["defaultValue"], + }, + ) + ) + + def test_lean_context_recovery(self) -> None: + assert_setup_succeeded(self.lean_recovery_setup_error) + assert len(self.lean_recovery) == 4 + expected: set[Exposure] = set() + for sequence in self.lean_recovery: + for name in ("initial", "recovered"): + stage = sequence[name] + assert_details(stage["responses"], stage) + if stage["expected"]["exposure"]: + expected.add( + ( + stage["flag"], + stage["subject"], + stage["expected"]["allocationKey"], + stage["expected"]["variant"], + ) + ) + cases = [sequence["initial"] for sequence in self.lean_recovery] + assert_exposures( + interfaces.agent.get_data(path_filters="/api/v2/exposures"), + flags={case["flag"] for case in cases}, + expected=expected, + ) + assert_evaluation_delivery(interfaces.agent.get_data(path_filters="/api/v2/flagevaluation"), cases) + + def setup_lean_lookup_precedence(self) -> None: + self.lean_lookup_setup_error = evaluation_setup_error(self.prepare_lean_lookup_precedence) + + def prepare_lean_lookup_precedence(self) -> None: + # D016 r1: resolveReady validates malformed context before flag lookup. + mode = ("disabled", "immediate", "future_experiments_only")[self.mode_index()] + self.lean_lookup = [case for case in load_lookup_cases() if case["mode"] == mode] + control = next(case for case in load_runtime_cases() if case["id"] == f"policy/{mode}/absent/before/0/fallback") + control["flag"] += "-lookup-control" + control["subject"] += "-lookup-control" + control["configuration"]["key"] = control["flag"] + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {control["flag"]: control["configuration"]} + self.lean_lookup.append(control) + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/lean-lookup/config", fixture).apply() + for case in self.lean_lookup: + case["responses"] = [] + case["expected_evaluations"] = 3 + for _ in range(3): + case["responses"].append( + weblog.post( + "/ffe", + json={ + "flag": case["flag"], + "targetingKey": case["subject"], + "attributes": case["attributes"], + "variationType": "STRING", + "defaultValue": case["defaultValue"], + }, + ) + ) + + def test_lean_lookup_precedence(self) -> None: + assert_setup_succeeded(self.lean_lookup_setup_error) + assert len(self.lean_lookup) == 4 + for case in self.lean_lookup: + assert_details(case["responses"], case) + assert_exposures( + interfaces.agent.get_data(path_filters="/api/v2/exposures"), + flags={case["flag"] for case in self.lean_lookup}, + expected=set(), + ) + assert_evaluation_delivery(interfaces.agent.get_data(path_filters="/api/v2/flagevaluation"), self.lean_lookup) + + def mode_index(self) -> int: + return { + scenarios.feature_flagging_experimentation_opt_out_disabled.name: 0, + scenarios.feature_flagging_experimentation_opt_out_immediate.name: 1, + scenarios.feature_flagging_experimentation_opt_out_future.name: 2, + }[context.scenario.name] + + def assert_delivery(self, cases: list[Evaluation]) -> None: + expected: set[Exposure] = set() + for case in cases: + assert_evaluation_responses(case["responses"], expected_count=3, expected_value=case["value"]) + if case["exposure"]: + expected.add((case["flag"], case["subject"], case["allocation"], "on")) + assert_exposures( + interfaces.agent.get_data(path_filters="/api/v2/exposures"), + flags={case["flag"] for case in cases}, + expected=expected, + ) + + def setup_cutoff_matrix(self) -> None: + self.cutoff_matrix_setup_error = evaluation_setup_error(self.prepare_cutoff_matrix) + + def prepare_cutoff_matrix(self) -> None: + # Expected values are explicit: disabled, immediate, future-only. + rows: list[tuple[str, str | None, dict[str, Any], tuple[str, str, str]]] = [ + ("older", OLD, {ATTRIBUTE: CUTOFF}, (ON, OFF, ON)), + ("equal", CUTOFF, {ATTRIBUTE: CUTOFF}, (ON, OFF, OFF)), + ("newer", NEW, {ATTRIBUTE: CUTOFF}, (ON, OFF, OFF)), + ("missing-activation", None, {ATTRIBUTE: CUTOFF}, (ON, OFF, OFF)), + ("null-activation", None, {ATTRIBUTE: CUTOFF}, (ON, OFF, OFF)), + ("missing-preference", NEW, {}, (ON, ON, ON)), + ("invalid-preference", OLD, {ATTRIBUTE: "not-a-date"}, (ON, DEFAULT, DEFAULT)), + ("boolean-preference", OLD, {ATTRIBUTE: True}, (ON, DEFAULT, DEFAULT)), + ("ordinary", NEW, {ATTRIBUTE: CUTOFF}, (ON, ON, ON)), + ("invalid-ordinary", OLD, {ATTRIBUTE: "not-a-date"}, (ON, DEFAULT, DEFAULT)), + ("no-fallback", NEW, {ATTRIBUTE: CUTOFF}, (ON, DEFAULT, DEFAULT)), + ("offset-older", "2026-02-01T00:30:00+01:00", {ATTRIBUTE: CUTOFF}, (ON, OFF, ON)), + ("offset-equal", "2026-02-01T01:00:00+01:00", {ATTRIBUTE: CUTOFF}, (ON, OFF, OFF)), + ( + "microsecond-older", + "2026-02-01T00:00:00.000001Z", + {ATTRIBUTE: "2026-02-01T00:00:00.000002Z"}, + (ON, OFF, ON), + ), + # A future preference is a literal cutoff, not a scheduled change. + ("future-cutoff", NEW, {ATTRIBUTE: "2100-01-01T00:00:00Z"}, (ON, OFF, ON)), + ] + self.matrix: list[Evaluation] = [] + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {} + for label, activation, attributes, values in rows: + flag = f"experiment-opt-out-{label}" + experiment = label not in {"ordinary", "invalid-ordinary"} + fixture["flags"].update( + opt_out_fixture( + flag, + activation, + include_activation=label != "missing-activation", + experiment=experiment, + fallback=label != "no-fallback", + )["flags"] + ) + value = values[self.mode_index()] + self.matrix.append( + evaluation_case(flag, f"subject-{label}", attributes, value, exposure=experiment and value == ON) + ) + + # Alternate subjects on one flag to detect leaked per-subject decisions. + shared = "experiment-opt-out-shared" + fixture["flags"].update(opt_out_fixture(shared, NEW)["flags"]) + self.matrix.extend( + [ + evaluation_case(shared, "allowed", {}, ON, exposure=True), + evaluation_case( + shared, + "excluded", + {ATTRIBUTE: CUTOFF}, + (ON, OFF, OFF)[self.mode_index()], + exposure=self.mode_index() == 0, + ), + ] + ) + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/opt-out-matrix/config", fixture).apply() + with ThreadPoolExecutor(max_workers=4) as executor: + for _ in range(3): + list(executor.map(run_evaluation, self.matrix)) + + def test_cutoff_matrix(self) -> None: + assert_setup_succeeded(self.cutoff_matrix_setup_error) + self.assert_delivery(self.matrix) + + def setup_configuration_updates(self) -> None: + self.configuration_updates_setup_error = evaluation_setup_error(self.prepare_configuration_updates) + + def prepare_configuration_updates(self) -> None: + self.updates: list[Evaluation] = [] + flag = "experiment-opt-out-refresh" + path = "datadog/2/FFE_FLAGS/opt-out-refresh/config" + fixture = opt_out_fixture(flag, OLD) + # startAt and createdAt are deliberately newer than the preference. + # Neither field establishes when randomization was first activated. + fixture["flags"][flag]["allocations"][0]["startAt"] = "2026-03-01T00:00:00Z" + rc.tracer_rc_state.reset() + for stage, (created_at, activation, allocation, values) in enumerate( + [ + ("2026-04-01T00:00:00Z", OLD, "experiment", (ON, OFF, ON)), + ("2026-05-01T00:00:00Z", OLD, "experiment", (ON, OFF, ON)), + ("2026-06-01T00:00:00Z", NEW, "new-experiment", (ON, OFF, OFF)), + ] + ): + fixture["createdAt"] = created_at + first = fixture["flags"][flag]["allocations"][0] + first.update(key=allocation, randomizationActivatedAt=activation) + if stage == 2: + first["splits"][0]["serialId"] = 103 + rc.tracer_rc_state.set_config(path, fixture).apply() + value = values[self.mode_index()] + cases = [ + evaluation_case( + flag, "opted-out", {ATTRIBUTE: CUTOFF}, value, exposure=value == ON, allocation=allocation + ), + evaluation_case(flag, "positive-control", {}, ON, exposure=True, allocation=allocation), + ] + for _ in range(3): + for case in cases: + run_evaluation(case) + self.updates.extend(cases) + + def test_configuration_updates(self) -> None: + assert_setup_succeeded(self.configuration_updates_setup_error) + self.assert_delivery(self.updates) + + def setup_holdout_assignments(self) -> None: + self.holdout_assignments_setup_error = evaluation_setup_error(self.prepare_holdout_assignments) + + def prepare_holdout_assignments(self) -> None: + # The same salt and subject must retain the same 10/90 assignment. + # Distinct flags keep baseline exposures from hiding opted-out emissions. + self.holdouts: dict[str, list[Evaluation]] = {} + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {} + for label, activation in [("baseline", OLD), ("older", OLD), ("newer", NEW)]: + flag = f"experiment-opt-out-holdout-{label}" + config = opt_out_fixture(flag, activation)["flags"][flag] + config["variations"]["fallback"] = {"key": "fallback", "value": "fallback-value"} + holdout, ordinary = config["allocations"] + holdout["splits"] = [ + { + "variationKey": variant, + "serialId": serial, + "shards": [ + {"salt": "holdout-opt-out", "totalShards": 10000, "ranges": [{"start": start, "end": end}]} + ], + } + for variant, serial, start, end in [("on", 201, 0, 1000), ("off", 202, 1000, 10000)] + ] + ordinary["splits"][0]["variationKey"] = "fallback" + fixture["flags"][flag] = config + attributes = {} if label == "baseline" else {ATTRIBUTE: CUTOFF} + self.holdouts[label] = [ + evaluation_case(flag, f"holdout-subject-{index}", attributes, "", exposure=False) for index in range(64) + ] + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/opt-out-holdouts/config", fixture).apply() + cases = [case for group in self.holdouts.values() for case in group] + with ThreadPoolExecutor(max_workers=4) as executor: + for _ in range(3): + list(executor.map(run_evaluation, cases)) + + def test_holdout_assignments(self) -> None: + assert_setup_succeeded(self.holdout_assignments_setup_error) + expected: set[Exposure] = set() + baseline_values: set[str] = set() + for index, baseline in enumerate(self.holdouts["baseline"]): + assert baseline["responses"][0].status_code == 200 + value = json.loads(baseline["responses"][0].text)["value"] + assert value in {ON, OFF}, f"Baseline did not assign a holdout variant: {value!r}" + baseline_values.add(value) + for label, group in self.holdouts.items(): + case = group[index] + continues = ( + label == "baseline" or self.mode_index() == 0 or (label == "older" and self.mode_index() == 2) + ) + assert_evaluation_responses( + case["responses"], expected_count=3, expected_value=value if continues else "fallback-value" + ) + if continues: + expected.add((case["flag"], case["subject"], "experiment", "on" if value == ON else "off")) + assert baseline_values == {ON, OFF}, "Both holdout groups must have positive controls" + assert_exposures( + interfaces.agent.get_data(path_filters="/api/v2/exposures"), + flags={case["flag"] for group in self.holdouts.values() for case in group}, + expected=expected, + ) + + def setup_independent_telemetry_control(self) -> None: + self.independent_telemetry_setup_error = evaluation_setup_error(self.prepare_independent_telemetry_control) + + def prepare_independent_telemetry_control(self) -> None: + self.telemetry: list[Evaluation] = [] + fixture = opt_out_fixture("placeholder") + fixture["flags"] = {} + for experiment in (False, True): + for suppress in (False, True): + flag = f"experiment-opt-out-telemetry-{experiment}-{suppress}" + fixture["flags"].update(opt_out_fixture(flag, OLD, experiment=experiment)["flags"]) + value = OFF if experiment and self.mode_index() == 1 else ON + self.telemetry.append( + evaluation_case( + flag, + "subject", + {ATTRIBUTE: CUTOFF, "dd_evaluation_telemetry_opt_out": suppress}, + value, + exposure=experiment and value == ON, + ) + ) + rc.tracer_rc_state.reset().set_config("datadog/2/FFE_FLAGS/opt-out-telemetry/config", fixture).apply() + for _ in range(3): + for case in self.telemetry: + run_evaluation(case) + + def test_independent_telemetry_control(self) -> None: + assert_setup_succeeded(self.independent_telemetry_setup_error) + self.assert_delivery(self.telemetry) + captures = list(interfaces.agent.get_data(path_filters="/api/v2/flagevaluation")) + for case in self.telemetry: + expected = 0 if case["attributes"]["dd_evaluation_telemetry_opt_out"] else 3 + assert_count(evaluation_count(captures, case["flag"], subject=case["subject"]), expected, case["flag"]) diff --git a/tests/ffe/utils/evaluation_telemetry.py b/tests/ffe/utils/evaluation_telemetry.py new file mode 100644 index 00000000000..7a7b59f3ec4 --- /dev/null +++ b/tests/ffe/utils/evaluation_telemetry.py @@ -0,0 +1,82 @@ +"""Validate evaluation responses and telemetry after the scenario stops.""" + +import hashlib +import json +import traceback +from collections.abc import Callable, Iterable +from typing import Any + +from utils import HttpResponse + + +def evaluation_setup_error(operation: Callable[[], None]) -> str | None: + """Defer failures as serializable text for validation and replay.""" + try: + operation() + except Exception: # Report setup failures during the test phase. + return traceback.format_exc() + return None + + +def assert_setup_succeeded(error: str | None) -> None: + assert error is None, f"Evaluation setup failed:\n{error}" + + +def assert_evaluation_responses(responses: list[HttpResponse], *, expected_count: int, expected_value: str) -> None: + assert len(responses) == expected_count, f"Expected {expected_count} evaluation responses, got {len(responses)}" + for response in responses: + assert response.status_code == 200, response.text + assert json.loads(response.text)["value"] == expected_value, response.text + + +def assert_count(actual: float, expected: int, flag: str) -> None: + assert actual == expected, f"{flag}: expected {expected} evaluations, captured {actual}" + + +def assert_opt_out_exposure_attribute(actual: dict[str, Any], expected: dict[str, Any], attribute: str) -> None: + if attribute not in expected: + assert attribute not in actual, actual + elif expected[attribute] is None: + # SDKs may omit null attributes or retain them as null. + assert actual.get(attribute) is None, actual + else: + assert actual[attribute] == expected[attribute], actual + # Python considers 1 == True. Preserve bool-ness in both directions. + assert isinstance(actual[attribute], bool) == isinstance(expected[attribute], bool), actual + + +def assert_metric_activity( + metrics: Iterable[dict[str, Any]], flag: str, *, allocation_key: str | None, suppressed: bool +) -> None: + # Agent series do not retain the source OTel aggregation temporality. Check + # presence, not a sum that can count repeated cumulative exports twice. + # EVP assertions separately check exact evaluation counts. + values = [ + float(point["value"] if isinstance(point, dict) else point[1]) + for metric in metrics + if metric.get("metric") == "feature_flag.evaluations" + and f"feature_flag.key:{flag}" in metric.get("tags", []) + and (allocation_key is None or f"feature_flag.result.allocation_key:{allocation_key}" in metric.get("tags", [])) + for point in metric.get("points", []) + ] + if suppressed: + assert all(value == 0 for value in values), ( + f"{flag} ({allocation_key}): opted-out evaluation emitted metrics: {values}" + ) + else: + assert any(value > 0 for value in values), ( + f"{flag} ({allocation_key}): missing positive-control evaluation metric: {values}" + ) + + +def evaluation_count(captures: Iterable[dict[str, Any]], flag: str, *, subject: str) -> int: + subject_keys = {subject, "sha256_" + hashlib.sha256(subject.encode()).hexdigest()} + total = 0 + for data in captures: + content = data.get("request", {}).get("content", {}) + if not isinstance(content, dict): + continue + for event in content.get("flagEvaluations", []): + if event.get("flag", {}).get("key") == flag and event.get("targeting_key") in subject_keys: + total += event["evaluation_count"] + return total diff --git a/tests/ffe/utils/experimentation_opt_out.py b/tests/ffe/utils/experimentation_opt_out.py new file mode 100644 index 00000000000..f4500c49a5f --- /dev/null +++ b/tests/ffe/utils/experimentation_opt_out.py @@ -0,0 +1,89 @@ +"""Fixtures and exposure assertions for experimentation opt-out system tests.""" + +from collections import Counter +from collections.abc import Iterable +from typing import Any, TypedDict + +from tests.ffe.utils.exposures import exposure_events_from_data +from tests.ffe.utils.fixtures import make_ufc_fixture +from utils import HttpResponse, weblog + + +Exposure = tuple[str, str, str, str] # flag, subject, allocation, variant +DEFAULT_VALUE = "application-default" + + +class Evaluation(TypedDict): + flag: str + subject: str + attributes: dict[str, Any] + value: str + exposure: bool + allocation: str + responses: list[HttpResponse] + + +def evaluation_case( + flag: str, + subject: str, + attributes: dict[str, Any], + value: str, + *, + exposure: bool, + allocation: str = "experiment", +) -> Evaluation: + # The harness stores setup properties as JSON and restores them for replay. + return { + "flag": flag, + "subject": subject, + "attributes": attributes, + "value": value, + "exposure": exposure, + "allocation": allocation, + "responses": [], + } + + +def run_evaluation(case: Evaluation) -> None: + case["responses"].append( + weblog.post( + "/ffe", + json={ + "flag": case["flag"], + "targetingKey": case["subject"], + "attributes": case["attributes"], + "variationType": "STRING", + "defaultValue": DEFAULT_VALUE, + }, + ) + ) + + +def opt_out_fixture( + flag: str, + activation: str | None = "2026-01-01T00:00:00Z", + *, + include_activation: bool = True, + experiment: bool = True, + fallback: bool = True, +) -> dict[str, Any]: + fixture = make_ufc_fixture(flag, allocation_key="experiment", serial_id=101) + allocation = fixture["flags"][flag]["allocations"][0] + allocation["doLog"] = experiment + if include_activation: + allocation["randomizationActivatedAt"] = activation + if fallback: + ordinary = make_ufc_fixture(flag, "off", allocation_key="ordinary", serial_id=102) + ordinary["flags"][flag]["allocations"][0]["doLog"] = False + fixture["flags"][flag]["allocations"].extend(ordinary["flags"][flag]["allocations"]) + return fixture + + +def assert_exposures(captures: Iterable[dict[str, Any]], *, flags: set[str], expected: set[Exposure]) -> None: + """Require the complete exposure set, including positive controls and deduplication.""" + events = [event for data in captures for event in exposure_events_from_data(data, flags)] + actual = Counter( + (event["flag"]["key"], event["subject"]["id"], event["allocation"]["key"], event["variant"]["key"]) + for event in events + ) + assert actual == Counter(expected), f"Expected exposures {Counter(expected)}, got {actual}" diff --git a/tests/ffe/utils/lean_experimentation_opt_out.py b/tests/ffe/utils/lean_experimentation_opt_out.py new file mode 100644 index 00000000000..9f10ff08e2c --- /dev/null +++ b/tests/ffe/utils/lean_experimentation_opt_out.py @@ -0,0 +1,89 @@ +"""Load Lean-generated expectations and validate actual public SDK observations.""" + +from collections import Counter +from collections.abc import Iterable +import hashlib +import json +from pathlib import Path +from typing import Any + +from utils import HttpResponse + + +FIXTURES = Path(__file__).resolve().parents[1] / "fixtures/experimentation-opt-out-lean" +# Independently reviewed pin. Regeneration never rewrites this acceptance value. +SOURCE_SHA256 = "0407fb0330aefbeb086f16784aba0e5629f9e0241e80cd1416308146cbc9679d" + + +def verify_snapshot(root: Path) -> None: + source_bytes = (root / "SOURCE.json").read_bytes() + if hashlib.sha256(source_bytes).hexdigest() != SOURCE_SHA256: + raise ValueError("Unreviewed Lean runtime source manifest") + source = json.loads(source_bytes) + for name, expected in source["files"].items(): + path = Path(name) + if path.is_absolute() or ".." in path.parts: + raise ValueError("Contract path escapes its snapshot") + if hashlib.sha256((root / path).read_bytes()).hexdigest() != expected: + raise ValueError(f"Changed Lean runtime fixture: {name}") + + +def load_runtime_cases(root: Path = FIXTURES) -> list[dict[str, Any]]: + verify_snapshot(root) + cases: list[dict[str, Any]] = json.loads((root / "runtime-cases.json").read_text()) + if len(cases) != 252 or len({case["id"] for case in cases}) != 252: + raise ValueError("Lean runtime case inventory changed") + if len({case["oracle_case_id"] for case in cases}) != 90: + raise ValueError("Lean policy case omitted") + return cases + + +def load_lookup_cases(root: Path = FIXTURES) -> list[dict[str, Any]]: + verify_snapshot(root) + cases: list[dict[str, Any]] = json.loads((root / "lookup-cases.json").read_text()) + if len(cases) != 9 or len({case["id"] for case in cases}) != 9: + raise ValueError("Lean lookup case inventory changed") + return cases + + +def assert_details(responses: list[HttpResponse], case: dict[str, Any], *, expected_count: int = 3) -> None: + assert len(responses) == expected_count, (case["id"], "evaluation count", len(responses)) + expected = case["expected"] + for response in responses: + assert response.status_code == 200, (case["id"], response.text) + actual = json.loads(response.text) + assert actual["value"] == expected["value"], (case["id"], actual) + assert actual["count"] == 1, (case["id"], actual) + assert actual["reason"] == expected["reason"], (case["id"], actual) + assert (actual["errorCode"] or None) == expected["errorCode"], (case["id"], actual) + assert (actual["variant"] or None) == expected["variant"], (case["id"], actual) + assert (actual.get("allocationKey") or None) == expected["allocationKey"], (case["id"], actual) + assert isinstance(actual["flagMetadata"], dict), (case["id"], actual) + + +def assert_evaluation_delivery(captures: Iterable[dict[str, Any]], cases: list[dict[str, Any]]) -> None: + """Check exact hashed subjects and counts under the default evaluation-data policy.""" + flags = {case["flag"] for case in cases} + actual: Counter[tuple[str, str]] = Counter() + for capture in captures: + content = capture.get("request", {}).get("content", {}) + if not isinstance(content, dict): + continue + for event in content.get("flagEvaluations", []): + flag = event.get("flag", {}).get("key") + if flag in flags: + subject = event.get("targeting_key") + count = event["evaluation_count"] + assert type(count) is int, event + assert count > 0, event + actual[(flag, subject)] += count + expected = Counter( + { + (case["flag"], "sha256_" + hashlib.sha256(case["subject"].encode()).hexdigest()): case[ + "expected_evaluations" + ] + for case in cases + if case["expected_evaluations"] + } + ) + assert actual == expected, f"Expected evaluation delivery {expected}, got {actual}" diff --git a/tests/test_the_test/test_ffe_evaluation_telemetry_opt_out_contract.py b/tests/test_the_test/test_ffe_evaluation_telemetry_opt_out_contract.py new file mode 100644 index 00000000000..42efcc8e727 --- /dev/null +++ b/tests/test_the_test/test_ffe_evaluation_telemetry_opt_out_contract.py @@ -0,0 +1,263 @@ +"""Self-tests ensure the opt-out oracle rejects leaks and missing positive controls.""" + +import hashlib +import json +from concurrent.futures import ThreadPoolExecutor +from typing import Any +from tests.ffe.utils.evaluation_telemetry import ( + assert_count, + assert_evaluation_responses, + assert_opt_out_exposure_attribute, + assert_metric_activity, + assert_setup_succeeded, + evaluation_count, + evaluation_setup_error, +) +from utils import HttpResponse, features, pytest, scenarios + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("status_code", "text", "count", "passes"), + [ + (200, '{"value": "on-value"}', 3, True), + (500, '{"value": "on-value"}', 3, False), + (200, '{"value": "default"}', 3, False), + (200, "not JSON", 3, False), + (200, "{}", 3, False), + (200, '{"value": "on-value"}', 0, False), + (200, '{"value": "on-value"}', 2, False), + (200, '{"value": "on-value"}', 4, False), + ], +) +def test_evaluation_response_oracle(status_code: int, text: str, count: int, *, passes: bool) -> None: + response = HttpResponse( + { + "request": {"method": "POST", "url": "http://weblog/ffe", "params": None}, + "status_code": status_code, + "text": text, + "cookies": {}, + } + ) + responses = [response] * count + if passes: + assert_evaluation_responses(responses, expected_count=3, expected_value="on-value") + else: + with pytest.raises((AssertionError, ValueError, KeyError)): + assert_evaluation_responses(responses, expected_count=3, expected_value="on-value") + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("suppressed_count", "allowed_count", "passes"), + [(0, 3, True), (3, 0, False), (3, 3, False), (0, 0, False), (0, 6, False)], +) +@pytest.mark.parametrize("shared_flag", [False, True]) +@pytest.mark.parametrize("hashed_subject", [False, True]) +def test_opt_out_evp_oracle( + suppressed_count: int, allowed_count: int, *, shared_flag: bool, hashed_subject: bool, passes: bool +) -> None: + events = [ + { + "flag": {"key": "shared" if shared_flag else subject}, + "targeting_key": "sha256_" + hashlib.sha256(subject.encode()).hexdigest() if hashed_subject else subject, + "evaluation_count": count, + } + for subject, count in [("suppressed", suppressed_count), ("allowed", allowed_count)] + if count + ] + captures: list[dict[str, Any]] = [ + {"path": "/api/v2/flagevaluation", "request": {"content": {"flagEvaluations": events}}} + ] + + def validate() -> None: + for subject, expected in [("suppressed", 0), ("allowed", 3)]: + flag = "shared" if shared_flag else subject + assert_count(evaluation_count(captures, flag, subject=subject), expected, subject) + + if passes: + validate() + else: + with pytest.raises(AssertionError, match="expected.*evaluations"): + validate() + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("values", "suppressed", "passes"), + [ + ([3, 3, 3], False, True), # Repeated cumulative snapshots are not three separate counts. + ([1, 2, 3, 3], False, True), + ([1, 1, 1], False, True), # Delta exports are also valid. + ([], False, False), + ([0, 0], False, False), + ([], True, True), + ([0, 0], True, True), + ([1, 0], True, False), # A later zero does not hide earlier leaked telemetry. + ([3, 3, 3], True, False), + ([-1, 1], True, False), # Points must not cancel each other out. + ], +) +@pytest.mark.parametrize("point_format", ["dict", "list"]) +def test_opt_out_metric_oracle(values: list[int], point_format: str, *, suppressed: bool, passes: bool) -> None: + points = [ + {"timestamp": index, "value": value} if point_format == "dict" else [index, value] + for index, value in enumerate(values) + ] + metrics: list[dict[str, Any]] = [ + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:subject-flag", "feature_flag.result.allocation_key:subject-allocation"], + "points": points, + }, + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:other-flag", "feature_flag.result.allocation_key:subject-allocation"], + "points": [[1, 99]], + }, + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:subject-flag", "feature_flag.result.allocation_key:other-allocation"], + "points": [[1, 99]], + }, + { + "metric": "unrelated.metric", + "tags": ["feature_flag.key:subject-flag", "feature_flag.result.allocation_key:subject-allocation"], + "points": [[1, 99]], + }, + ] + if passes: + assert_metric_activity(metrics, "subject-flag", allocation_key="subject-allocation", suppressed=suppressed) + else: + with pytest.raises(AssertionError, match="subject-flag"): + assert_metric_activity(metrics, "subject-flag", allocation_key="subject-allocation", suppressed=suppressed) + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("suppressed_count", "allowed_count", "enabled", "passes"), + [ + (0, 3, True, True), + (3, 0, True, False), # Swapped subjects must not satisfy a shared-flag total. + (3, 3, True, False), + (0, 0, True, False), + (3, 3, False, True), # Default-disabled support preserves both subjects. + (0, 3, False, False), + (3, 0, False, False), + ], +) +def test_shared_flag_metric_oracle(suppressed_count: int, allowed_count: int, *, enabled: bool, passes: bool) -> None: + metrics: list[dict[str, Any]] = [ + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:shared", f"feature_flag.result.allocation_key:{allocation}"], + "points": [[1, count]], + } + for allocation, count in [("suppressed", suppressed_count), ("allowed", allowed_count)] + if count + ] + + def validate() -> None: + assert_metric_activity(metrics, "shared", allocation_key="suppressed", suppressed=enabled) + assert_metric_activity(metrics, "shared", allocation_key="allowed", suppressed=False) + + if passes: + validate() + else: + with pytest.raises(AssertionError, match="shared"): + validate() + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize("failure_source", ["remote-config", "worker-request"]) +def test_evaluation_setup_failure_is_deferred(failure_source: str) -> None: + error = TimeoutError(f"{failure_source} timed out") + completed: list[str] = [] + + def fail() -> None: + raise error + + def prepare() -> None: + if failure_source == "worker-request": + with ThreadPoolExecutor(max_workers=1) as executor: + list(executor.map(lambda _: fail(), [None])) + else: + fail() + + # Setup errors must not stop the next setup or its validation. + setup_error = evaluation_setup_error(prepare) + later_error = evaluation_setup_error(lambda: completed.append("later setup")) + assert completed == ["later setup"] + assert_setup_succeeded(later_error) + # Setup properties must survive the harness's JSON replay storage. + restored_error = json.loads(json.dumps(setup_error)) + assert f"TimeoutError: {failure_source} timed out" in restored_error + with pytest.raises(AssertionError, match=failure_source): + assert_setup_succeeded(restored_error) + + +@scenarios.test_the_test +@features.not_reported +def test_evaluation_setup_does_not_swallow_interrupts() -> None: + def interrupt() -> None: + raise KeyboardInterrupt + + with pytest.raises(KeyboardInterrupt): + evaluation_setup_error(interrupt) + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("actual", "expected", "passes"), + [ + ({"opt_out": True}, {"opt_out": True}, True), + ({"opt_out": 1}, {"opt_out": 1}, True), + ({"opt_out": 1}, {"opt_out": True}, False), + ({"opt_out": True}, {"opt_out": 1}, False), + ({"opt_out": "true"}, {"opt_out": "true"}, True), + ({"opt_out": True}, {"opt_out": "true"}, False), + ({"opt_out": None}, {"opt_out": None}, True), + ({}, {"opt_out": None}, True), + ({"opt_out": False}, {"opt_out": None}, False), + ({"opt_out": True}, {"opt_out": None}, False), + ({}, {}, True), + ({"opt_out": True}, {}, False), + ], +) +def test_opt_out_exposure_attribute_oracle(actual: dict[str, Any], expected: dict[str, Any], *, passes: bool) -> None: + if passes: + assert_opt_out_exposure_attribute(actual, expected, "opt_out") + else: + with pytest.raises(AssertionError): + assert_opt_out_exposure_attribute(actual, expected, "opt_out") + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("count", "suppressed", "passes"), [(3, False, True), (0, False, False), (0, True, True), (3, True, False)] +) +def test_opt_out_error_metric_oracle(count: int, *, suppressed: bool, passes: bool) -> None: + metrics: list[dict[str, Any]] = [ + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:missing-flag", "error.type:flag_not_found"], + "points": [[1, count]], + }, + { + "metric": "feature_flag.evaluations", + "tags": ["feature_flag.key:unrelated-flag"], + "points": [[1, 99]], + }, + ] + if passes: + assert_metric_activity(metrics, "missing-flag", allocation_key=None, suppressed=suppressed) + else: + with pytest.raises(AssertionError, match="missing-flag"): + assert_metric_activity(metrics, "missing-flag", allocation_key=None, suppressed=suppressed) diff --git a/tests/test_the_test/test_ffe_experimentation_opt_out_contract.py b/tests/test_the_test/test_ffe_experimentation_opt_out_contract.py new file mode 100644 index 00000000000..4ef02db7777 --- /dev/null +++ b/tests/test_the_test/test_ffe_experimentation_opt_out_contract.py @@ -0,0 +1,195 @@ +"""Check that exposure assertions reject leaks, loss, and duplicate events.""" + +from pathlib import Path +from copy import deepcopy +import json +import shutil +from types import SimpleNamespace +from typing import Any +from unittest.mock import Mock + +from tests.ffe.utils.experimentation_opt_out import assert_exposures, evaluation_case +from tests.ffe.utils.lean_experimentation_opt_out import ( + FIXTURES, + assert_details, + assert_evaluation_delivery, + load_runtime_cases, + load_lookup_cases, +) +from utils import HttpResponse, features, pytest, scenarios +from utils.properties_serialization import SetupProperties + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + ("subjects", "variant", "allocation", "passes"), + [ + (["allowed"], "on", "experiment", True), + ([], "on", "experiment", False), + (["allowed", "excluded"], "on", "experiment", False), + (["allowed", "allowed"], "on", "experiment", False), + (["allowed"], "off", "experiment", False), + (["allowed"], "on", "ordinary", False), + (["allowed"], "__dd_subject_opt_out", "experiment", False), + ], +) +def test_experimentation_exposure_oracle(subjects: list[str], variant: str, allocation: str, *, passes: bool) -> None: + events = [ + { + "flag": {"key": "flag"}, + "subject": {"id": subject}, + "variant": {"key": variant}, + "allocation": {"key": allocation}, + } + for subject in subjects + ] + captures: list[dict[str, Any]] = [{"path": "/api/v2/exposures", "request": {"content": {"exposures": events}}}] + + def validate() -> None: + assert_exposures(captures, flags={"flag"}, expected={("flag", "allowed", "experiment", "on")}) + + if passes: + validate() + else: + with pytest.raises(AssertionError, match="Expected exposures"): + validate() + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize("shape", ["list", "holdout-groups"]) +def test_evaluation_setup_replay(tmp_path: Path, shape: str) -> None: + case = evaluation_case( + "flag", "subject", {"dd_experimentation_opt_out_at": "2026-02-01T00:00:00Z"}, "on", exposure=True + ) + response = HttpResponse( + { + "request": {"method": "POST", "url": "http://weblog/ffe", "params": None}, + "status_code": 200, + "text": '{"value": "on"}', + "cookies": {}, + } + ) + case["responses"].append(response) + cases = [case] if shape == "list" else {"older": [case]} + source = Mock(nodeid="test-case", instance=SimpleNamespace(cases=cases)) + store = SetupProperties() + store.store_properties(source) + store.dump(str(tmp_path)) + + replay = SetupProperties() + replay.load(str(tmp_path)) + target = Mock(nodeid="test-case", instance=SimpleNamespace()) + replay.restore_properties(target) + restored = target.instance.cases[0] if shape == "list" else target.instance.cases["older"][0] + assert {key: value for key, value in restored.items() if key != "responses"} == { + key: value for key, value in case.items() if key != "responses" + } + assert len(restored["responses"]) == 1 + assert restored["responses"][0].status_code == response.status_code + assert restored["responses"][0].text == response.text + + +@scenarios.test_the_test +@features.not_reported +def test_lean_runtime_inventory() -> None: + cases = load_runtime_cases() + assert len(cases) == 252 + lookup = load_lookup_cases() + assert len(lookup) == 9 + assert {case["expected"]["errorCode"] for case in lookup} == {"INVALID_CONTEXT", "FLAG_NOT_FOUND"} + for mode in ["disabled", "immediate", "future_experiments_only"]: + selected = [case for case in cases if case["mode"] == mode] + assert len(selected) == 84 + assert len([case for case in lookup if case["mode"] == mode]) == 3 + assert len({case["oracle_case_id"] for case in selected}) == 30 + # Full oracle identity survives materialization; error and fallback values + # cannot distinguish these cases without the public detail assertions. + assert {case["expected"]["errorCode"] for case in cases} == {None, "INVALID_CONTEXT", "PARSE_ERROR"} + assert {case["expected"]["value"] for case in cases} == {"same-value"} + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + "name", + [ + "runtime-cases.json", + "policy-oracle.jsonl", + "lean/Contract.lean", + "SOURCE.json", + "lookup-cases.json", + "lean/Review.lean", + "lean/LookupOracle.lean", + ], +) +def test_lean_runtime_rejects_changed_snapshot(tmp_path: Path, name: str) -> None: + snapshot = tmp_path / "snapshot" + shutil.copytree(FIXTURES, snapshot) + changed = snapshot / name + changed.write_bytes(changed.read_bytes() + b" ") + with pytest.raises(ValueError, match="Changed Lean runtime fixture|Unreviewed Lean runtime source manifest"): + load_runtime_cases(snapshot) + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize("field", ["value", "reason", "errorCode", "variant", "allocationKey", "count"]) +def test_lean_details_reject_wrong_observation(field: str) -> None: + case = next(case for case in load_runtime_cases() if case["id"] == "policy/immediate/valid/before/1/fallback") + expected = case["expected"] + actual = {key: value for key, value in expected.items() if key != "exposure"} + actual.update(count=1, flagMetadata={}) + + def response(body: dict[str, Any]) -> HttpResponse: + return HttpResponse( + { + "request": {"method": "POST", "url": "http://weblog/ffe", "params": None}, + "status_code": 200, + "text": json.dumps(body), + "cookies": {}, + } + ) + + assert_details([response(actual)], case, expected_count=1) + incorrect = deepcopy(actual) + incorrect[field] = 2 if field == "count" else "wrong" + with pytest.raises(AssertionError): + assert_details([response(incorrect)], case, expected_count=1) + + +@scenarios.test_the_test +@features.not_reported +@pytest.mark.parametrize( + "mutation", + ["missing", "wrong-subject", "suppression-leak", "duplicate", "wrong-count", "raw-subject", "exposure-schema"], +) +def test_lean_evaluation_delivery_negative_controls(mutation: str) -> None: + cases: list[dict[str, Any]] = [ + {"flag": "flag", "subject": "observed", "expected_evaluations": 3}, + {"flag": "flag", "subject": "suppressed", "expected_evaluations": 0}, + ] + observed = "sha256_604cee807f644af47487bf2bbab442b94212ac5119f36f995f78e9e4694dae8c" + suppressed = "sha256_f63d5b6b4de4fca716f2be8a179211b92682dc2e030b7063aea1d4a210f40033" + event: dict[str, Any] = {"flag": {"key": "flag"}, "targeting_key": observed, "evaluation_count": 3} + content: dict[str, Any] = {"flagEvaluations": [event]} + captures: list[dict[str, Any]] = [{"request": {"content": content}}] + assert_evaluation_delivery(captures, cases) + if mutation == "missing": + content["flagEvaluations"] = [] + elif mutation == "wrong-subject": + event["targeting_key"] = suppressed + elif mutation == "suppression-leak": + content["flagEvaluations"].append({**event, "targeting_key": suppressed}) + elif mutation == "duplicate": + content["flagEvaluations"].append(deepcopy(event)) + elif mutation == "wrong-count": + event["evaluation_count"] = 2 + elif mutation == "raw-subject": + event["targeting_key"] = "observed" + else: + event.pop("targeting_key") + event["subject"] = {"id": "observed"} + with pytest.raises(AssertionError): + assert_evaluation_delivery(captures, cases) diff --git a/tests/test_the_test/test_group_rules.py b/tests/test_the_test/test_group_rules.py index e3bfd947705..4fc3eb563e8 100644 --- a/tests/test_the_test/test_group_rules.py +++ b/tests/test_the_test/test_group_rules.py @@ -2,7 +2,12 @@ # it means that we cannot b y design make some group part of another group # waiting for a clean solution to this problem, let's just test it -from utils import scenarios, scenario_groups +import json +from pathlib import Path + +import yaml + +from utils import pytest, scenarios, scenario_groups from utils._context._scenarios import get_all_scenarios @@ -17,6 +22,21 @@ def test_appsec(): def test_tracer_release(): # make an exclusion list + provisional_opt_out_scenarios = [ + scenarios.feature_flagging_evaluation_telemetry_opt_out, + scenarios.feature_flagging_evaluation_telemetry_opt_out_disabled, + scenarios.feature_flagging_experimentation_opt_out_disabled, + scenarios.feature_flagging_experimentation_opt_out_immediate, + scenarios.feature_flagging_experimentation_opt_out_future, + ] + for opt_out_scenario in provisional_opt_out_scenarios: + assert opt_out_scenario.github_workflow == "endtoend" + assert scenario_groups.ffe in opt_out_scenario.scenario_groups + assert opt_out_scenario in scenario_groups.ffe.scenarios + for group in (scenario_groups.all, scenario_groups.end_to_end, scenario_groups.tracer_release): + assert group not in opt_out_scenario.scenario_groups + assert opt_out_scenario not in group.scenarios + dormant_agentless_scenario = scenarios.feature_flagging_and_experimentation_agentless assert dormant_agentless_scenario.include_agent is False assert dormant_agentless_scenario.use_proxy is False @@ -45,6 +65,7 @@ def test_tracer_release(): scenarios.mock_the_test, scenarios.mock_the_test_2, scenarios.test_the_test, + *provisional_opt_out_scenarios, scenarios.todo, # targetting OTEL scenarios.otel_integrations, @@ -98,3 +119,30 @@ def test_tracer_release(): if scenario in not_in_tracer_release_group: assert scenario_groups.tracer_release not in scenario.scenario_groups + + +@scenarios.test_the_test +@pytest.mark.parametrize( + "scenario_name", + [ + "FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT", + "FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED", + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED", + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE", + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE", + ], +) +def test_opt_out_workflow_selection(scenario_name: str) -> None: + workflow = yaml.safe_load(Path(".github/workflows/run-end-to-end.yml").read_text()) + matching_steps = [ + step + for job in workflow["jobs"].values() + for step in job.get("steps", []) + if step.get("run") == f"./run.sh {scenario_name}" + ] + assert len(matching_steps) == 1, f"Expected one workflow step for {scenario_name}" + # Match the quoted JSON name, not a prefix shared with another scenario. + expected_guard = ( + f"steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '{json.dumps(scenario_name)}')" + ) + assert matching_steps[0]["if"] == expected_guard diff --git a/utils/_context/_scenarios/__init__.py b/utils/_context/_scenarios/__init__.py index 93bc91c89b7..3b71f6e4279 100644 --- a/utils/_context/_scenarios/__init__.py +++ b/utils/_context/_scenarios/__init__.py @@ -5,7 +5,7 @@ from utils.tools import update_environ_with_local_env from .aws_lambda import LambdaScenario -from .core import Scenario, scenario_groups +from .core import Scenario, ScenarioGroup, scenario_groups from .default import DefaultScenario from .agentless_endtoend import FeatureFlaggingAgentlessEndToEndScenario from .endtoend import ( @@ -62,6 +62,29 @@ "DD_APP_KEY": "mock_app_key", } +# Shared by the ordinary FFE scenario and both evaluation telemetry opt-out scenarios. +# Both opt-out scenarios also enable span enrichment; one enables the opt-out option. +_FFE_WEBLOG_ENV: dict[str, str | None] = { + "DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED": "true", + "DD_FEATURE_FLAGS_CONFIGURATION_SOURCE": "remote_config", + # Python's set_provider() waits for Remote Configuration, which arrives only + # after the weblog starts. The OpenFeature API has no nonblocking alternative. + # Fail initialization promptly so the weblog starts; the provider recovers + # when the tests supply Remote Configuration. + "DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS": "100", + "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS": "0.2", + "DD_METRICS_OTEL_ENABLED": "true", + "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL": "http/protobuf", + "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT": "http://agent:4318/v1/metrics", + "OTEL_METRIC_EXPORT_INTERVAL": "1000", +} + + +class _ProvisionalFeatureFlaggingScenario(DdTraceEndToEndScenario): + """Allow explicit FFE runs without scheduling unsupported SDKs in default CI.""" + + _default_scenario_groups: tuple[ScenarioGroup, ...] = () + class _Scenarios: todo = Scenario("TODO", doc="scenario that skips tests not yet executed", github_workflow=None) @@ -878,25 +901,73 @@ class _Scenarios: rc_api_enabled=True, # Allow final EVP batches to reach the backend after the weblog flushes and stops. agent_interface_timeout=15, + weblog_env=_FFE_WEBLOG_ENV, + doc="", + scenario_groups=[scenario_groups.ffe], + ) + + feature_flagging_evaluation_telemetry_opt_out = _ProvisionalFeatureFlaggingScenario( + "FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT", + rc_api_enabled=True, + agent_interface_timeout=15, weblog_env={ - "DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED": "true", - "DD_FEATURE_FLAGS_CONFIGURATION_SOURCE": "remote_config", - # set_provider() in Python blocks until we receive RC - # configuration for feature flags. But it is only sent - # after weblog sucessfully boots and tests start - # executing. Unfortunately, Python's OpenFeature SDK does - # not have "set provider and don't wait," so we reduce the - # timeout here, so that the provider initialization fails - # fast, weblog boots, and provider recovers when we set RC - # configuration later. - "DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS": "100", - "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS": "0.2", - "DD_METRICS_OTEL_ENABLED": "true", - "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL": "http/protobuf", - "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT": "http://agent:4318/v1/metrics", - "OTEL_METRIC_EXPORT_INTERVAL": "1000", + **_FFE_WEBLOG_ENV, + "DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED": "true", + "DD_FEATURE_FLAGS_EVALUATION_TELEMETRY_PER_SUBJECT_OPT_OUT_ENABLED": "true", }, - doc="", + doc="Per-subject evaluation telemetry opt-out, with unchanged assignments and exposures.", + scenario_groups=[scenario_groups.ffe], + ) + + feature_flagging_evaluation_telemetry_opt_out_disabled = _ProvisionalFeatureFlaggingScenario( + "FEATURE_FLAGGING_EVALUATION_TELEMETRY_OPT_OUT_DISABLED", + rc_api_enabled=True, + agent_interface_timeout=15, + weblog_env={ + **_FFE_WEBLOG_ENV, + "DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED": "true", + # Omit the opt-out option: an attribute must not activate the feature by itself. + }, + doc="Default-disabled control for per-subject evaluation telemetry opt-out.", + scenario_groups=[scenario_groups.ffe], + ) + + feature_flagging_experimentation_opt_out_disabled = _ProvisionalFeatureFlaggingScenario( + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_DISABLED", + rc_api_enabled=True, + agent_interface_timeout=15, + weblog_env={ + **_FFE_WEBLOG_ENV, + "DD_FEATURE_FLAGS_EXPERIMENTATION_OPT_OUT_MODE": None, + "DD_FEATURE_FLAGS_EVALUATION_TELEMETRY_PER_SUBJECT_OPT_OUT_ENABLED": "true", + }, + doc="An opt-out timestamp alone does not activate experimentation opt-out.", + scenario_groups=[scenario_groups.ffe], + ) + + feature_flagging_experimentation_opt_out_immediate = _ProvisionalFeatureFlaggingScenario( + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_IMMEDIATE", + rc_api_enabled=True, + agent_interface_timeout=15, + weblog_env={ + **_FFE_WEBLOG_ENV, + "DD_FEATURE_FLAGS_EXPERIMENTATION_OPT_OUT_MODE": "immediate", + "DD_FEATURE_FLAGS_EVALUATION_TELEMETRY_PER_SUBJECT_OPT_OUT_ENABLED": "true", + }, + doc="Immediate experimentation exclusion, ordinary delivery, and independent evaluation telemetry.", + scenario_groups=[scenario_groups.ffe], + ) + + feature_flagging_experimentation_opt_out_future = _ProvisionalFeatureFlaggingScenario( + "FEATURE_FLAGGING_EXPERIMENTATION_OPT_OUT_FUTURE", + rc_api_enabled=True, + agent_interface_timeout=15, + weblog_env={ + **_FFE_WEBLOG_ENV, + "DD_FEATURE_FLAGS_EXPERIMENTATION_OPT_OUT_MODE": "future_experiments_only", + "DD_FEATURE_FLAGS_EVALUATION_TELEMETRY_PER_SUBJECT_OPT_OUT_ENABLED": "true", + }, + doc="Allocation activation cutoff across Remote Config updates, with ordinary exposure delivery.", scenario_groups=[scenario_groups.ffe], ) diff --git a/utils/_features.py b/utils/_features.py index 4a5ce48125b..72074e9bfcb 100644 --- a/utils/_features.py +++ b/utils/_features.py @@ -2727,6 +2727,22 @@ def feature_flags_serial_id_metadata(test_object): """ return _mark_test_object(test_object, feature_id=648, owner=_Owner.ffe) + @staticmethod + def feature_flags_evaluation_telemetry_opt_out(test_object): + """Per-subject evaluation telemetry opt-out + + https://feature-parity.us1.prod.dog/#/?feature=649 + """ + return _mark_test_object(test_object, feature_id=649, owner=_Owner.ffe) + + @staticmethod + def feature_flags_experimentation_opt_out(test_object): + """Per-subject experimentation opt-out + + https://feature-parity.us1.prod.dog/#/?feature=650 + """ + return _mark_test_object(test_object, feature_id=650, owner=_Owner.ffe) + @staticmethod def appsec_extended_data_collection(test_object): """AppSec supports extended data collection including headers and body diff --git a/utils/build/docker/dotnet/poc.Dockerfile b/utils/build/docker/dotnet/poc.Dockerfile index 44884499673..79ae1fb9a4b 100644 --- a/utils/build/docker/dotnet/poc.Dockerfile +++ b/utils/build/docker/dotnet/poc.Dockerfile @@ -1,6 +1,10 @@ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-app WORKDIR /app +# Pass [version] to pin local SDK packages exactly; a plain version is a minimum. +ARG DD_TRACE_PACKAGE_VERSION=* +ARG DD_OPENFEATURE_PACKAGE_VERSION=* + # Copy binaries folder for local NuGet packages (for testing with local builds) COPY binaries/ /binaries/ RUN if ls /binaries/*.nupkg 1> /dev/null 2>&1; then \ @@ -9,11 +13,15 @@ RUN if ls /binaries/*.nupkg 1> /dev/null 2>&1; then \ # dotnet restore COPY utils/build/docker/dotnet/weblog/app.csproj app.csproj -RUN dotnet restore +RUN dotnet restore \ + -p:DatadogTracePackageVersion="$DD_TRACE_PACKAGE_VERSION" \ + -p:DatadogOpenFeaturePackageVersion="$DD_OPENFEATURE_PACKAGE_VERSION" # dotnet publish COPY utils/build/docker/dotnet/weblog/* . -RUN dotnet publish --no-restore -c Release -f net8.0 -o out +RUN dotnet publish --no-restore -c Release -f net8.0 -o out \ + -p:DatadogTracePackageVersion="$DD_TRACE_PACKAGE_VERSION" \ + -p:DatadogOpenFeaturePackageVersion="$DD_OPENFEATURE_PACKAGE_VERSION" ######### diff --git a/utils/build/docker/dotnet/weblog/Controllers/FeatureFlagEvaluatorController.cs b/utils/build/docker/dotnet/weblog/Controllers/FeatureFlagEvaluatorController.cs index 183cd1bcf9f..5aafeba2ff6 100644 --- a/utils/build/docker/dotnet/weblog/Controllers/FeatureFlagEvaluatorController.cs +++ b/utils/build/docker/dotnet/weblog/Controllers/FeatureFlagEvaluatorController.cs @@ -139,16 +139,22 @@ private static EvaluationContext CreateContext(EvaluateRequest request, string t { foreach (var attr in request.Attributes) { - // System.Text.Json deserializes to JsonElement, not string - var value = attr.Value switch + // Preserve primitive types so boolean context controls stay boolean. + switch (attr.Value) { - JsonElement jsonElement => jsonElement.ValueKind == JsonValueKind.String - ? jsonElement.GetString() - : jsonElement.ToString(), - string s => s, - _ => attr.Value?.ToString() - }; - builder.Set(attr.Key, value); + case JsonElement jsonElement when jsonElement.ValueKind is JsonValueKind.True or JsonValueKind.False: + builder.Set(attr.Key, jsonElement.GetBoolean()); + break; + case JsonElement jsonElement when jsonElement.ValueKind == JsonValueKind.Number: + builder.Set(attr.Key, jsonElement.GetDouble()); + break; + case JsonElement jsonElement when jsonElement.ValueKind == JsonValueKind.String: + builder.Set(attr.Key, jsonElement.GetString()); + break; + default: + builder.Set(attr.Key, attr.Value?.ToString()); + break; + } } } return builder.Build(); diff --git a/utils/build/docker/dotnet/weblog/app.csproj b/utils/build/docker/dotnet/weblog/app.csproj index 07e8575ae29..d141eec0841 100644 --- a/utils/build/docker/dotnet/weblog/app.csproj +++ b/utils/build/docker/dotnet/weblog/app.csproj @@ -8,6 +8,8 @@ false enable false + * + *