elsa-core/src/modules
Sipke Schoorstra 457e2a6185
feat(bpmn): publish-time validation gate for unbound tasks (#7958)
* feat(bpmn): refuse to publish a definition with an unbound BPMN task

BpmnWorkBinder already refuses an UnboundTask with no elsa:activityBinding
at import - that is the first net. A definition can be edited after
import, through Elsa's own designer rather than the BPMN document, and
that edit can remove the activity a task was bound to without touching
the document snapshot the scope still carries. ValidateBpmnProcessBindings
is the second net: a WorkflowDefinitionValidating handler that walks the
materialized workflow graph (not the inert BpmnProcessDefinition snapshot
or the stored BPMN source, both of which a graph-only edit leaves
untouched) and fails publication for any task-family element whose
binding no longer resolves to an activity in the graph, naming the
offending element id.

Import-time Dropped/Degraded findings from BpmnImportAnalysis are not
persisted anywhere a publish-time handler can reach, and BpmnImportIssue
carries no field distinguishing a Dropped finding that changes executable
meaning from one that does not; WorkflowValidationError has no severity
concept either. Extending this gate to those findings would mean guessing
at a classification the library does not expose, so it is left alone -
see the delivery notes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(bpmn): refuse to publish a BPMN task bound to a missing activity type

The publish gate only checked that a binding pointed at some activity id;
it did not check the activity actually resolved, so a binding left
pointing at an uninstalled type passed the gate and failed at run time
instead. Report that case distinctly from "not bound at all", name the
containing BpmnProcess node (not the BPMN element id) as the error's
ActivityId to match how the rest of the codebase reports it, and prove
the BpmnProcess-inside-Flowchart graph-walk with a dedicated test. Also
de-duplicate the publish-gate test fixture's binding helpers by deriving
from BpmnBindingTestBase instead of re-declaring them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* refactor(bpmn): filter the publish gate's loops explicitly

Replace the implicit-filter foreach/continue pattern in
ValidateBpmnProcessBindings with .OfType/.Where so each loop only
iterates the elements it acts on, without changing behaviour, error
messages, or error ordering.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 23:25:31 +02:00
..
Elsa Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.AI.Abstractions Add Weaver grounding tools 2026-06-08 15:40:10 +02:00
Elsa.AI.Copilot Update safe dependency patch versions 2026-06-22 00:03:50 +02:00
Elsa.AI.Host Add Weaver grounding tools 2026-06-08 15:40:10 +02:00
Elsa.AI.Persistence.EFCore Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.AI.Persistence.EFCore.MySql Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.AI.Persistence.EFCore.Oracle Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.AI.Persistence.EFCore.PostgreSql Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.AI.Persistence.EFCore.Sqlite Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.AI.Persistence.EFCore.SqlServer Move AI EF Core migrations to provider projects 2026-06-08 15:22:59 +02:00
Elsa.Alterations Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Alterations.Core
Elsa.Bpmn feat(bpmn): interchange endpoints (analyze, import, export) (#7954) 2026-08-18 05:20:42 +02:00
Elsa.Bpmn.Interchange feat(bpmn): publish-time validation gate for unbound tasks (#7958) 2026-08-19 23:25:31 +02:00
Elsa.Caching Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Common Fix tenant service mutation race (#7898) 2026-07-30 02:47:44 +02:00
Elsa.Dashboard.Abstractions Refactor dashboard API contributors (#7690) 2026-06-02 22:25:25 +02:00
Elsa.Dashboard.Api Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.ConsoleLogs Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.ConsoleLogs.Dashboard Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.OpenTelemetry Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.StructuredLogs Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.StructuredLogs.Dashboard Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.StructuredLogs.Persistence.Relational Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Diagnostics.StructuredLogs.Persistence.Sqlite chore: apply safe dependency upgrades (#7896) 2026-07-26 21:42:27 +02:00
Elsa.Dsl.ElsaScript Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Expressions Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Expressions.CSharp Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Expressions.JavaScript Adopt the Jint 4.15 host-integration surface: lazy type globals, enum names, and register-what-is-referenced (#7895) 2026-08-17 01:44:03 +02:00
Elsa.Expressions.JavaScript.Libraries Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Expressions.Liquid Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Expressions.Python Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.ExternalAuthentication Add architecture and practices documentation 2026-08-03 23:46:38 +02:00
Elsa.ExternalAuthentication.OpenIdConnect Add OpenID Connect authentication features 2026-07-26 23:38:20 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore Add architecture and practices documentation 2026-08-03 23:46:38 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore.MySql Fix external authentication review findings 2026-08-02 03:35:39 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore.Oracle Fix external authentication review findings 2026-08-02 03:35:39 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore.PostgreSql Fix external authentication review findings 2026-08-02 03:35:39 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore.Sqlite Fix external authentication review findings 2026-08-02 03:35:39 +02:00
Elsa.ExternalAuthentication.Persistence.EFCore.SqlServer Fix external authentication review findings 2026-08-02 03:35:39 +02:00
Elsa.ExternalAuthentication.Secrets Merge compact external authentication secret IDs 2026-08-02 00:22:29 +02:00
Elsa.Hosting.Management feat: introduce HTTP webhooks module 2026-08-03 02:08:15 +02:00
Elsa.Http Guard HTTP fault handling when workflow reload returns null (#7714) 2026-06-14 22:23:38 +02:00
Elsa.Http.Webhooks feat: introduce HTTP webhooks module 2026-08-03 02:08:15 +02:00
Elsa.Identity Harden external identity race compensation 2026-08-02 23:19:49 +02:00
Elsa.KeyValues Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Labels Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Persistence.EFCore Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.EFCore.Common test: cover Oracle bulk upsert SQL generation 2026-07-11 14:35:36 +02:00
Elsa.Persistence.EFCore.MySql Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.EFCore.Oracle Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.EFCore.PostgreSql Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.EFCore.Sqlite Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.EFCore.SqlServer Remove migration for external authentication in EFCore.Sqlite module 2026-07-31 14:31:18 +02:00
Elsa.Persistence.VNext Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.Extensions Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.MongoDb Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.PostgreSql Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.Relational Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.Runtime Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Persistence.VNext.Sqlite chore: apply safe dependency upgrades (#7896) 2026-07-26 21:42:27 +02:00
Elsa.Persistence.VNext.SqlServer Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Platform.Integration Add Platform integration 2026-06-18 18:27:27 +02:00
Elsa.Resilience Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Resilience.Core
Elsa.SasTokens Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Scheduling address greptile review feedback (greploop iteration 1) 2026-06-21 19:43:09 +02:00
Elsa.Secrets Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.JavaScript Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.EFCore Use shared secret name normalization 2026-06-01 22:28:38 +02:00
Elsa.Secrets.Persistence.EFCore.MySql Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.EFCore.Oracle Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.EFCore.PostgreSql Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.EFCore.Sqlite Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.EFCore.SqlServer Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Secrets.Persistence.VNext Add Persistence vNext provider-neutral POC 2026-06-02 21:05:21 +02:00
Elsa.Shells.Api feat: introduce HTTP webhooks module 2026-08-03 02:08:15 +02:00
Elsa.Tenants Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Tenants.AspNetCore Merge release/3.8.0 into bugfix/7900-tenant-request-services 2026-08-03 00:48:56 +02:00
Elsa.WorkflowProviders.BlobStorage Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.WorkflowProviders.BlobStorage.ElsaScript Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Workflows.Api Merge release/3.8.0 into main 2026-08-14 11:59:35 +02:00
Elsa.Workflows.Core fix(runtime): let a trigger index payloads under per-payload stimulus names (#7950) 2026-08-17 23:43:59 +02:00
Elsa.Workflows.Management Merge release/3.8.0 into main 2026-08-14 11:59:35 +02:00
Elsa.Workflows.Runtime fix(runtime): let a trigger index payloads under per-payload stimulus names (#7950) 2026-08-17 23:43:59 +02:00
Elsa.Workflows.Runtime.Dashboard Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00
Elsa.Workflows.Runtime.Distributed Address workflow commit review feedback 2026-06-23 02:27:06 +02:00
Directory.Build.props Remove PackageManifestCategories and update feature categories to inline strings 2026-06-08 09:48:55 +02:00