Add khepri predicate conformance tests for RulesEngineInternal#6822
Draft
ajpallares wants to merge 59 commits into
Draft
Add khepri predicate conformance tests for RulesEngineInternal#6822ajpallares wants to merge 59 commits into
ajpallares wants to merge 59 commits into
Conversation
16d04be to
a1f4d02
Compare
Member
Author
|
@RCGitBot please test run-rules-engine-conformance-tests |
|
🚀 Triggered run-rules-engine-conformance-tests → Pipeline #38046 |
Member
Author
|
@RCGitBot please test run-rules-engine-conformance-tests |
|
🚀 Triggered run-rules-engine-conformance-tests → Pipeline #38098 |
2a0a33c to
46d6925
Compare
f1587b1 to
9ab3623
Compare
46d6925 to
2a0a33c
Compare
9ab3623 to
f1587b1
Compare
…tures
Convert the hand-written operator unit tests for operators available at the
string+array level into declarative JSON predicate fixtures sharing khepri's
conformance format, run by a shared runner that auto-discovers every file in
PredicateFixtures/. `expected` is a khepri-compatible superset (Bool or
{ "error": ... }) plus optional `description` and `expectedWarnings`.
Adds a test-only Value: Decodable conformance so predicates and variables
decode straight into the engine's value model; production Value is unchanged.
Tests that can't be expressed as predicate->Bool stay in Swift; ValueTests
untouched. Test-only change.
Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit 40901e5)
2a0a33c to
df4b140
Compare
f1587b1 to
8830cf9
Compare
2 tasks
Load the in-repo fixtures once and feed the decoded cases straight into the parameterized test, instead of collecting IDs and re-reading every file to find the matching case per ID. PredicateConformanceFixtureCase gains Identifiable + Sendable (for the arguments) and a CustomTestStringConvertible extension so each case still displays by id. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…-logic-iteration-operators
Add var-fed cases (including the single-array-arg NaN gotcha), min fail-closed and empty-list fail-closed coverage. Collapse the two-pass NaN scan + extremum into a single reducing fold. Pinned fixture count 294 -> 301. Co-authored-by: Cursor <cursoragent@cursor.com>
…erators' into pallares/json-logic-min-max-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift
…ators' into pallares/json-logic-iteration-mapping-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # RulesEngineInternal/Operators/IterationOperators.swift # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift
Strengthens iteration-operator coverage for none/map/filter/reduce: - Add object-item named-property fixtures (none/map/filter) — the most common real-world shape, previously untested (only scalar/empty items). - Assert map/filter return real arrays by folding through reduce (count/sum) instead of relying solely on string coercion. - Add a reduce fixture pinning that the initial accumulator is evaluated even for a non-array source (matches initial = apply(values[2], data)). - Reword the none non-array rationale: current json-logic-js implements none directly with !Array.isArray(x) || !x.length, not via filter. Expected fixture count 341 -> 345. Co-authored-by: Cursor <cursoragent@cursor.com>
…teration-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift
Label each operator grouping in Operators.dispatch per PR review feedback. Co-authored-by: Cursor <cursoragent@cursor.com>
Rename the all-match fixture and add cases where only the first or only the middle item matches, addressing PR review feedback that the existing some coverage was order dependent. Co-authored-by: Cursor <cursoragent@cursor.com>
khepri guards all with notEmpty, so it returns false for an empty array like json-logic-js; drop the inaccurate claim that khepri returns true. Co-authored-by: Cursor <cursoragent@cursor.com>
…teration-operators
…erators' into pallares/json-logic-min-max-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift
Remove the duplicate WorkflowsCacheTests.swift PBXFileReference introduced during a merge, and add a dedicated "Min and max" grouping comment so the min/max cases are no longer lumped under arithmetic. Co-authored-by: Cursor <cursoragent@cursor.com>
…ators' into pallares/json-logic-iteration-mapping-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift
…teration-mapping-operators Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift # Tests/RulesEngineInternalTests/PredicateFixtures/max.json # Tests/RulesEngineInternalTests/PredicateFixtures/min.json
Co-authored-by: Cursor <cursoragent@cursor.com>
Downloads khepri's predicate_conformance_v1.json and evaluates each fixture through the shared runner, reusing the same Swift Testing harness as the in-repo predicate fixtures. Adds the on-demand run-rules-engine-conformance-tests CI job, the test_rules_engine_conformance Fastlane lane, and an Xcode build phase + scheme pre-action that auto-download the fixtures locally. The conformance suite is skipped in the standard test plan since it depends on fixtures downloaded from the private khepri repo; it runs only in the dedicated on-demand job. No production changes. Co-authored-by: Cursor <cursoragent@cursor.com>
4846750 to
4492257
Compare
Member
Author
|
@RCGitBot please test run-rules-engine-conformance-tests |
|
🚀 Triggered run-rules-engine-conformance-tests → Pipeline #39101 |
The download-fixtures pre-action used a truncated execution ActionType (Xcode.IDEStandardExecutionActionsCore.ExecutionActionType) which Xcode 26 rejects as an invalid extension identifier, crashing workspace load during xcodebuild -resolvePackageDependencies. Use the full .ShellScriptAction type. Co-authored-by: Cursor <cursoragent@cursor.com>
Member
Author
|
@RCGitBot please test run-rules-engine-conformance-tests |
|
🚀 Triggered run-rules-engine-conformance-tests → Pipeline #39103 |
Base automatically changed from
pallares/json-logic-iteration-mapping-operators
to
main
June 9, 2026 11:47
…cate-conformance Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # RulesEngineInternal/Operators/Operators.swift # Tests/RulesEngineInternalTests/PredicateFixtureTests.swift # Tests/RulesEngineInternalTests/PredicateFixtures/reduce.json
Mirror the in-repo PredicateFixtureTests: load and decode the fixture envelope once into a static and pass the cases straight into the parameterized test, instead of re-reading and re-decoding the file on every single fixture invocation. Test-only change. Co-authored-by: Cursor <cursoragent@cursor.com>
…mance' into pallares/khepri-predicate-conformance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist
Motivation
Run khepri's
predicate_conformance_v1.jsonagainstRulesEngineInternalusing the same parameterized fixture runner introduced in #6885, so the in-repo and khepri-downloaded fixtures share one harness. Stacked on #6834 (top of the operator stack).Description