From 3e4b9afe524925eb81cb7268decb09c9e3ac238c Mon Sep 17 00:00:00 2001 From: Yogesh Prajapati Date: Wed, 27 May 2026 17:18:01 +0100 Subject: [PATCH] Release 6.0.1-preview.1 Bump from 6.0.0 to 6.0.1-preview.1 and add a CHANGELOG entry covering the three PRs landed since 6.0.0: #727 (perf cache restore), #728 (action-exception propagation, list schema union, OutputExpression hint, global-param dedup, object-return diagnostics), and #729 (ExecuteActionWorkflowAsync FormatErrorMessages, ActionContext null guard, deep ErrorMessage interpolation, plus regression guards for #581, #590, #606, #608). --- CHANGELOG.md | 21 +++++++++++++++++++++ src/RulesEngine/RulesEngine.csproj | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f163cb47..53a104b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,27 @@ All notable changes to this project will be documented in this file. +## [6.0.1-preview.1] + +### Performance +- Restored the compiled-expression cache in `RuleExpressionParser` that was removed in 5.0.1, fixing a 10×–1900× regression on the direct parser, `ExecuteActionWorkflowAsync`, and fresh-engine paths. The cache is now instance-scoped with a settings fingerprint in the key, avoiding the latent cross-settings bug the original static cache had (#673, #727). + +### Fixes +- `EnableExceptionAsErrorMessage = false` now correctly propagates exceptions thrown from custom actions' `Run()` — they were previously swallowed into `ActionRuleResult.Exception` (#624, #728). +- `Utils.CreateAbstractClassType` now unions schemas across every element of an `ExpandoObject`/`Dictionary` list, so properties that appear only in later elements are no longer dropped (#704, #728). +- `OutputExpressionAction` detects C#-style anonymous-object syntax (`new { X = ... }`) and replaces the cryptic "missing 'as' clause" Dynamic.Core error with a clear hint pointing at the correct `new (value as X, ...)` form (#711, #728). +- Workflow `GlobalParams` are now evaluated **once per `ExecuteAllRulesAsync` call** instead of once per rule. A delegate is compiled at registration time and results are appended to each rule's inputs (#714, #728). +- `LambdaExpressionBuilder` detects "exists in type 'Object'" / "'System.Object'" parse errors and appends a helpful hint when a custom method's `object` return type is the cause (#717, #728). +- `ExecuteActionWorkflowAsync` now runs `FormatErrorMessages` like `ExecuteAllRulesAsync` does, so `Rule.ErrorMessage` templates are interpolated into `ExceptionMessage` consistently across both APIs (#519, #729). +- `ActionContext` no longer NREs when a rule action's `Context` (or a nested value) is null — common for custom actions that don't need configuration (#576, #729). +- `ErrorMessage` interpolation now walks arbitrary-depth dotted paths via `JsonNode`: `$(input.Inner.Name)` resolves to the leaf scalar instead of the raw JSON of the intermediate object (#696, #729). + +### Regression guards added (already fixed upstream, now covered by tests) +- #581 — custom `RuleParameter` names not being honored (resolved by `AutoRegisterInputType` in 5.0.1). +- #590 — exception state from one execution leaking into the next (resolved by #592 in 5.0.3). +- #606 — lambda parameter on the left side of `=>` reported as unknown identifier (resolved by `System.Linq.Dynamic.Core` 1.4.3 → 1.6.7 bumps). +- #608 — `UseFastExpressionCompiler = true` NRE on chained scoped-param `Sum()` (resolved by recent `FastExpressionCompiler` upgrades). + ## [5.0.3] - Updated dependencies to latest - Fixed RulesEngine throwing exception when type name is same as input name diff --git a/src/RulesEngine/RulesEngine.csproj b/src/RulesEngine/RulesEngine.csproj index f146052e..b8413409 100644 --- a/src/RulesEngine/RulesEngine.csproj +++ b/src/RulesEngine/RulesEngine.csproj @@ -3,7 +3,7 @@ net6.0;net8.0;net9.0;net10.0;netstandard2.0;netstandard2.1 13.0 - 6.0.0 + 6.0.1-preview.1 Copyright (c) Microsoft Corporation. LICENSE https://github.com/microsoft/RulesEngine