Skip to content

test: honor FFE evaluation case platform skip/include filters - #8159

Merged
leoromanovsky merged 3 commits into
leo/ffe-canonical-20261021from
evaluation-case-skip-include-20261023
Oct 26, 2026
Merged

leoromanovsky merged 3 commits into
leo/ffe-canonical-20261021from
evaluation-case-skip-include-20261023

Conversation

@typotter

@typotter typotter commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • use the existing system-tests SDK identity directly as the canonical FFE corpus platform
  • apply per-case _skip and _include annotations before Remote Config setup, provider startup, or evaluation
  • skip a case file before those side effects when no cases apply to the current platform
  • refresh the checked-in evaluator corpus from the commit used by feat: add evaluation case applicability controls ffe-system-test-data#56

Stack and dependency

Validation

  • ruff check tests/parametric/test_ffe/test_dynamic_evaluation.py
  • ruff format --check tests/parametric/test_ffe/test_dynamic_evaluation.py
  • mypy tests/parametric/test_ffe/test_dynamic_evaluation.py
  • focused Node.js parametric collection: 48 tests collected
  • existing updater tests under TEST_THE_TEST: 15 passed
  • corpus validator: 367 cases across 47 files
  • corpus validator unit tests: 17 passed
  • local assertions for default, _skip, and _include selection semantics
  • checked-in UFC and evaluation-case snapshot matches corpus commit caa6d1ac3e5fbda0ce57ef3ffff3772901f3f466

Caveats

  • This PR intentionally does not add evaluation-suite directories, feature activation, dependent-flag fixtures, or precomputed-assignment changes. Evaluation-suite support is deferred to the first dependent-flags change.
  • There are no existing direct unit tests for the dynamic evaluation runner, so this PR does not introduce a new runner-test framework.
  • Refreshing the complete canonical snapshot advances it from e5a64a8 to caa6d1ac; this includes intervening canonical corpus additions as well as the applicability annotations from AppSec addresses don't have semi-colons #56.
  • The focused parametric validation collected the runner but did not execute it against an SDK container.

Apply canonical _skip and _include annotations before Remote Config setup and refresh the checked-in corpus snapshot from ffe-system-test-data#56.

Environment: Datadog workspace

Co-Authored-By: Codex GPT-5 <noreply@localhost>
@github-actions

Copy link
Copy Markdown
Contributor

CODEOWNERS have been resolved as:

tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-experimentation-opt-out-do-log.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-experimentation-opt-out-future.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-split-features.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/SOURCE.md                @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-disabled-flag.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-empty-flag.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/evaluation-cases/test-case-experimentation-opt-out.json  @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/ffe-system-test-data/ufc-config.json          @DataDog/feature-flagging-and-experimentation-sdk
tests/parametric/test_ffe/test_dynamic_evaluation.py                    @DataDog/feature-flagging-and-experimentation-sdk

@typotter typotter changed the title test: honor FFE evaluation case platform filters test: honor FFE evaluation case platform skip/include filters Oct 23, 2026
Use the existing system-tests library identity directly for FFE corpus case selection instead of maintaining a redundant identity mapping.

Environment: Datadog workspace

Co-Authored-By: Codex GPT-5 <noreply@localhost>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The expanded shared configuration and corpus have not been exercised against SDK containers, leaving cross-SDK compatibility for human validation.

No open issues 🎉

What changed in this PR

This PR adds platform-aware case selection to the FFE dynamic evaluation runner and refreshes its canonical test corpus.

Changes:

  • Uses context.library.name to apply per-case _skip and _include filters before Remote Config setup, provider startup, or evaluation.
  • Skips case files when no cases apply to the current platform.
  • Updates the corpus to commit 5534027e, including split-feature and experimentation opt-out fixtures.
File Description
tests/​parametric/​test_ffe/​test_dynamic_evaluation.py Filters cases by SDK platform before setup and evaluation.
tests/​parametric/​test_ffe/​ffe-system-test-data/​ufc-config.json Adds activation timestamps and split-feature configurations.
tests/​parametric/​test_ffe/​ffe-system-test-data/​SOURCE.md Records the updated canonical source commit.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-split-features.json Adds split-feature destination and selection cases.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-experimentation-opt-out.json Adds platform exclusions and future-experiment opt-out expectations.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-experimentation-opt-out-future.json Adds opt-out cutoff and activation-time cases.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-experimentation-opt-out-do-log.json Adds opt-out cases for non-logging allocations.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-empty-flag.json Excludes PHP from empty-flag cases.
tests/​parametric/​test_ffe/​ffe-system-test-data/​evaluation-cases/​test-case-disabled-flag.json Excludes PHP from disabled-flag cases.

Review effort: Balanced

@typotter
typotter marked this pull request as ready for review October 23, 2026 19:34
@typotter
typotter requested a review from a team as a code owner October 23, 2026 19:34
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-23T19:38:32.674764Z ebc0b78 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebc0b78187

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +182 to +183
platform = context.library.name
test_cases = _filter_test_cases_for_platform(test_cases, platform)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Declare platform exclusions in manifests

When the corpus contains _skip or _include, this runtime branch silently omits cases based only on the library name—for example, the new PHP disabled/empty-flag cases and Python invalid-attribute cases—while the single pytest node can still report success. This conflicts with .cursor/rules/pr-review.mdc, which requires language-only exclusions to be represented as separately addressable tests with manifest entries so downstream activation/easy-win tooling does not infer that skipped behavior passes; parameterize cases into stable node IDs and record the exclusions in the corresponding manifests instead.

AGENTS.md reference: AGENTS.md:L34-L36

Useful? React with 👍 / 👎.

@leoromanovsky leoromanovsky left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

My understanding is we will remove these skips as support is added.

@leoromanovsky
leoromanovsky merged commit 1e5e179 into leo/ffe-canonical-20261021 Oct 26, 2026
1863 checks passed
@leoromanovsky
leoromanovsky deleted the evaluation-case-skip-include-20261023 branch October 26, 2026 17:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants