Skip to content

feat: YAML workflow definition format with full step type parity#3

Merged
JerrettDavis merged 40 commits into
mainfrom
copilot/add-yaml-workflow-definition-loader
May 12, 2026
Merged

feat: YAML workflow definition format with full step type parity#3
JerrettDavis merged 40 commits into
mainfrom
copilot/add-yaml-workflow-definition-loader

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 20, 2026

  • Prior commits: all step type parity work from previous rounds
  • Fix various issues and lock files
  • Fix TimeoutStepWrapper/TimeoutCompensatingStepWrapper: only convert OCE→TimeoutException when wrapper's own CTS is cancelled (cts.IsCancellationRequested && !context.CancellationToken.IsCancellationRequested), preventing inner-step self-cancellations from being misreported as timeouts
Original prompt

This section details on the original issue you should resolve

<issue_title>feat: YAML workflow definition format (parity with existing JSON support)</issue_title>
<issue_description>## Overview

WorkflowFramework ships JSON workflow configuration support (JsonWorkflowDefinitionLoader). The README notes "YAML coming soon." This issue tracks delivering YAML parity.

Context

JD.AI (the primary consumer of WorkflowFramework) uses YAML extensively for policy documents (PolicyDocument), agent definitions (.agent.yaml, see JerrettDavis/JD.AI#201), and tool loadouts (.loadout.yaml, see JerrettDavis/JD.AI#214). A consistent YAML-first authoring experience across all JD.AI configuration is the goal. Having workflow definitions also in YAML eliminates the JSON outlier.

Goal

Implement YamlWorkflowDefinitionLoader with full feature parity to JsonWorkflowDefinitionLoader:

# my-workflow.workflow.yaml
name: OrderProcessing
version: "2.0"
description: Process customer orders end-to-end

steps:
  - name: ValidateOrder
    type: step
    class: ValidateOrder

  - name: PaymentDecision
    type: conditional
    condition: "ctx.Data.IsValid"
    then:
      - name: ChargePayment
        type: step
        class: ChargePayment
    else:
      - name: RejectOrder
        type: step
        class: RejectOrder

  - name: FulfillmentJobs
    type: parallel
    steps:
      - name: SendEmail
        type: step
        class: SendEmail
      - name: UpdateInventory
        type: step
        class: UpdateInventory

  - name: HumanReview
    type: approval
    message: "Order {{ ctx.Data.OrderId }} requires manager sign-off"
    required_approvers: 1
    timeout_minutes: 1440

  - name: Complete
    type: step
    class: CompleteOrder

Scope

All step types supported in JSON should be supported in YAML:

  • step — standard step by class name
  • conditional — If/Then/Else
  • parallel — concurrent steps
  • foreach / while / dowhile / retry — loops
  • try / catch / finally — error handling
  • subworkflow — nested workflow by name
  • approval — human approval gate
  • saga — compensation-enabled group

Acceptance Criteria

  • YamlWorkflowDefinitionLoader implementing same interface as JsonWorkflowDefinitionLoader
  • Shared WorkflowDefinition object model between JSON and YAML loaders
  • All step types: step, conditional, parallel, foreach, while, dowhile, retry, try/catch/finally, subworkflow, approval, saga
  • Step attributes expressible in YAML (timeout, retry, name, order)
  • WorkflowFramework.Extensions.Configuration extended with AddYamlWorkflowLoader()
  • Round-trip: load from YAML → serialize to JSON → reload from JSON → same execution behavior
  • Schema validation: clear error messages for invalid YAML structure
  • Tests: all step types via YAML, validation errors, round-trip consistency
  • WorkflowFramework.Serialization updated to support YAML format</issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
…DI extension methods

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copilot AI changed the title [WIP] Add YAML workflow definition loader for parity with JSON support feat: YAML workflow definition format with full step type parity Mar 20, 2026
Copilot AI requested a review from JerrettDavis March 20, 2026 01:27
@JerrettDavis JerrettDavis requested a review from Copilot March 20, 2026 04:15
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds YAML workflow definition support to WorkflowFramework.Extensions.Configuration with the goal of matching the existing JSON loader/builder capabilities, plus DI registration helpers and a comprehensive YAML-focused test suite.

Changes:

  • Introduces YamlWorkflowDefinitionLoader and expands WorkflowDefinitionBuilder to recognize 11 step categories (including nested step structures).
  • Extends the shared workflow definition model (WorkflowDefinition / StepDefinition) to support richer YAML/JSON authoring (e.g., description, class, nested thenSteps/elseSteps, approval fields).
  • Adds DI extension methods for registering loaders, the step registry, and the definition builder; adds an end-to-end style test file covering supported YAML step types and DI wiring.

Reviewed changes

Copilot reviewed 31 out of 32 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
tests/WorkflowFramework.Tests/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Tests/Configuration/YamlWorkflowFullTests.cs New tests covering YAML loading/building for all supported step categories + DI registrations + round-trip checks.
tests/WorkflowFramework.Tests.Samples/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Tests.Integration/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Tests.E2E/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Dashboard.UITests/packages.lock.json Lockfile updates for new/updated transitive dependencies (incl. platform-specific Aspire assets).
tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs Regenerated feature code-behind after dependency/tooling changes.
tests/WorkflowFramework.Dashboard.Tests/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Dashboard.Persistence.Tests/packages.lock.json Lockfile updates for new/updated transitive dependencies.
tests/WorkflowFramework.Dashboard.Api.Tests/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Persistence.SqlServer/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Persistence.PostgreSQL/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Distributed.Redis/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Distributed.PostgreSQL/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.DataMapping.Schema/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.DataMapping.Formats/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Configuration/packages.lock.json Lockfile updates reflecting new direct DI abstractions dependency.
src/WorkflowFramework.Extensions.Configuration/WorkflowFramework.Extensions.Configuration.csproj Adds Microsoft.Extensions.DependencyInjection.Abstractions to support DI extension methods.
src/WorkflowFramework.Extensions.Configuration/WorkflowDefinition.cs Extends the definition model with description, class, nested conditional steps, and approval fields.
src/WorkflowFramework.Extensions.Configuration/ServiceCollectionExtensions.cs New DI helper methods to register loaders, registry, and builder.
src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Adds YAML loader and significantly expands WorkflowDefinitionBuilder to handle composite step categories.
src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Dashboard/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Dashboard.Web/packages.lock.json Lockfile updates for new/updated transitive dependencies.
src/WorkflowFramework.Dashboard.AppHost/packages.lock.json Lockfile updates for new/updated transitive dependencies (incl. platform-specific Aspire assets).
src/WorkflowFramework.Dashboard.Api/packages.lock.json Lockfile updates for new/updated transitive dependencies.
samples/WorkflowFramework.Samples/packages.lock.json Lockfile updates for new/updated transitive dependencies.
samples/WorkflowFramework.Samples.WebApi/packages.lock.json Lockfile updates for new/updated transitive dependencies.
samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json Lockfile updates for new/updated transitive dependencies.
samples/WorkflowFramework.Samples.TaskStream/packages.lock.json Lockfile updates for new/updated transitive dependencies.
benchmarks/WorkflowFramework.Benchmarks/packages.lock.json Lockfile updates for new/updated transitive dependencies.
Files not reviewed (1)
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

…ps, foreach IEnumerable, single composite in group, condition doc

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/9d214b01-b342-45fc-9d2a-ddce17697ce0
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 20, 2026

@copilot apply changes based on the comments in this thread

All five review comments addressed in 835f71c:

  1. Condition doc — updated to document its dual role: condition key for conditional/while/dowhile, and items collection key for foreach.

  2. BuildForEachStep — now accepts any non-string IEnumerable (List, arrays, etc.) via Cast<object>(), falling back to empty when the key is missing or the value is a string.

  3. BuildParallelStep — replaced ResolveLeafStep with BuildStepsAsGroupStep, so composite step definitions (conditional, retry, etc.) work inside a parallel block.

  4. BuildStepsAsGroupStep — the single-step path now checks isLeaf before calling ResolveLeafStep; composite steps are wrapped in an inline workflow instead of throwing.

  5. Catch handler support — added CatchDefinition model with exception (string type name) and steps properties, a Catch list on StepDefinition, and wired into BuildTryStep via ResolveExceptionType + reflection-based Catch<TException> invocation. Three new tests cover model defaults, YAML loading, and runtime execution.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 31 out of 32 changed files in this pull request and generated 5 comments.

Files not reviewed (1)
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread tests/WorkflowFramework.Tests.Samples/packages.lock.json Outdated
@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

…eaf fix for composite types, regenerate lock files

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/301dc8fa-ec98-4d9f-a94d-853554b5d832
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 21, 2026

@copilot apply changes based on the comments in this thread

All four review comments addressed in a28c10c:

  1. Lock file inconsistencies — re-ran dotnet restore --force-evaluate on both WorkflowFramework.Extensions.Persistence.SqlServer and WorkflowFramework.Tests.Samples. System.Diagnostics.DiagnosticSource now resolves to 10.0.3 (was 6.0.1) and System.Text.Json now resolves to 10.0.1 (was 10.0.0). Other affected lock files (Samples.TaskStream, Samples.VoiceWorkflows) were regenerated as transitive effects.

  2. Catch workflow built once — moved Workflow.Create("catch") and Build() outside the handler lambda so the workflow is constructed once per catch definition during BuildTryStep, not on every exception.

  3. isLeaf composite type fix — changed the first clause from !string.IsNullOrEmpty(singleDef.Class) to string.IsNullOrEmpty(singleDef.Type) && !string.IsNullOrEmpty(singleDef.Class). A Class value is only treated as a leaf class name when no Type category is set; when Type is a composite category (e.g., subworkflow), Class is passed through composite dispatch.

  4. Unique parallel branch names — replaced child.Name ?? "branch" with child.Name ?? $"branch_{i}" using a loop index, preventing duplicate step name failures when multiple parallel children omit name.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 26 out of 27 changed files in this pull request and generated 3 comments.

Files not reviewed (1)
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread tests/WorkflowFramework.Dashboard.UITests/packages.lock.json Outdated
Comment thread src/WorkflowFramework.Dashboard.AppHost/packages.lock.json Outdated
…uildConditionalStep

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/0dc6223b-5592-49fe-be8e-8e42f607d3c6

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot apply changes based on the comments in this thread

Applied in 2821f16. Changed ApplyName(tempBuilder.Build().Steps[0], stepDef.Name) to ApplyName(tempBuilder.Build().Steps[0], stepName)stepName is already stepDef.Name ?? conditionKey, so unnamed conditionals now receive the condition expression as their unique name instead of the auto-generated branch-derived name. All 93 configuration tests pass.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 33 out of 40 changed files in this pull request and generated 2 comments.

Files not reviewed (7)
  • tests/WorkflowFramework.Dashboard.UITests/Features/PropertiesPanel.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/RunAssistant.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Settings.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Templates.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowDesigner.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowExecution.feature.cs: Language not supported

Comment thread tests/WorkflowFramework.Tests.Samples/packages.lock.json Outdated
Comment thread tests/WorkflowFramework.Tests.E2E/packages.lock.json Outdated
@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

…ples and E2E lock files

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/d1fb5ad1-ed06-4218-bf4b-777956c2db99

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot apply changes based on the comments in this thread

Applied in c608669. Removed the stale System.Text.Json CentralTransitive entries (resolved 10.0.0 vs requested [10.0.1, )) from both Tests.Samples and Tests.E2E lock files — the package is provided by the .NET 10 shared framework, so the CentralTransitive pin is not valid here.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 33 out of 40 changed files in this pull request and generated 9 comments.

Files not reviewed (7)
  • tests/WorkflowFramework.Dashboard.UITests/Features/PropertiesPanel.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/RunAssistant.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Settings.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Templates.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowDesigner.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowExecution.feature.cs: Language not supported

Comment thread tests/WorkflowFramework.Dashboard.Tests/packages.lock.json
Comment thread src/WorkflowFramework.Dashboard.Api/packages.lock.json
Comment thread benchmarks/WorkflowFramework.Benchmarks/packages.lock.json
Comment thread benchmarks/WorkflowFramework.Benchmarks/packages.lock.json
Comment thread src/WorkflowFramework.Extensions.Agents.Skills/packages.lock.json
Comment thread src/WorkflowFramework.Extensions.Agents.Mcp/packages.lock.json
Comment thread samples/WorkflowFramework.Samples.TaskStream/packages.lock.json
Comment thread samples/WorkflowFramework.Samples.VoiceWorkflows/packages.lock.json
@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

… requested minimum across all projects

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/2a8d5df2-b6c9-48b5-b7be-0c9feb7f488c

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot apply changes based on the comments in this thread

Applied in 7601b29. Removed all CentralTransitive lock file entries where the resolved version is below the centrally-managed minimum across 17 lock files:

  • Polly.Core (8.4.2 vs [8.6.0, )) — Dashboard.Api, Dashboard.Tests, Dashboard.Web, ServiceDefaults, Dashboard.Persistence.Tests, Dashboard.Api.Tests (pinned by OpenTelemetry 1.12.0)
  • System.Diagnostics.DiagnosticSource (6.0.1 vs [10.0.3, )) — SqlServer net10.0 (pinned by Azure/SQL SDK)
  • System.Text.Json (8.0.5/10.0.0 vs [10.0.1, )) — Benchmarks, Agents.Skills/Mcp, TaskStream, VoiceWorkflows (BenchmarkDotNet / .NET shared framework)
  • Microsoft.Extensions.DependencyInjection (6.0.0/9.0.6/10.0.2 vs [10.0.3, )) — Benchmarks (BenchmarkDotNet), SqlServer/EF/PostgreSQL (EF Core 9.x), Agents/AI (SK 1.71), Dashboard projects (SignalR preview)
  • Microsoft.CodeAnalysis (3.3.4/4.8.0 vs centrally pinned) — Dashboard.Persistence

All 93 configuration tests continue to pass.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 38 out of 45 changed files in this pull request and generated 3 comments.

Files not reviewed (7)
  • tests/WorkflowFramework.Dashboard.UITests/Features/PropertiesPanel.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/RunAssistant.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Settings.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Templates.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowDesigner.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowExecution.feature.cs: Language not supported

Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
…locked-mode restore

Packages like Polly.Core, ME.DI, DiagnosticSource, and Microsoft.CodeAnalysis are
not part of the .NET shared framework — their lock file entries are required for
dotnet restore --locked-mode to succeed. Only System.Text.Json (a .NET 10 shared
framework package) can safely be omitted from CentralTransitive entries.

Reverts the lock file changes from 7601b29 for all 17 affected projects.

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/b53bad8b-79bd-4fd8-ad95-476b9ace0324

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot

Build fails. https://github.com/JerrettDavis/WorkflowFramework/actions/runs/25743473843/job/75603474809?pr=3
...

Fixed in ddef691. The CI failures were caused by commit 7601b29, which incorrectly removed CentralTransitive entries for non-framework packages (Polly.Core, ME.DI, DiagnosticSource, Microsoft.CodeAnalysis) from 17 lock files. Those entries are required for dotnet restore --locked-mode to succeed — unlike System.Text.Json which is provided by the .NET 10 shared framework, these packages must be explicitly recorded in the lock file. The fix restores all 17 affected lock files to their pre-7601b29 state.

@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot apply changes based on the comments in this thread

Applied in a3cff18. Three items from the review:

  1. maxAttempts validation (lines 293, 466) — Math.Max(1, maxAttempts) clamp added in both BuildRetryGroupStep and the legacy retry path so maxAttempts: 0 / negative never produces a silent no-op.

  2. then:/else: YAML list aliases (lines 145–203) — Added NormalizeThenElseLists pre-processing step in YamlWorkflowDefinitionLoader.Load. It walks the YamlStream document tree and renames any then: key whose value is a YAML sequence to thenSteps:, and else: sequences to elseSteps:. Scalar then/else values (legacy single-class format) are untouched. This lets authors write the natural then: [...] / else: [...] syntax as shown in the PR description.

  3. Misleading comment — Removed the incorrect "strip document-end markers" comment; YamlStream.Save output is returned as-is and the deserializer handles document markers correctly.

Three new tests added; all 96 configuration tests pass.

@JerrettDavis
Copy link
Copy Markdown
Owner

Copilot AI and others added 3 commits May 12, 2026 18:48
…ITests lock files

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/7745102f-beba-4978-ab1b-669e12863206

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
…ePackagesWithLockFile=false)

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot CI fails. https://github.com/JerrettDavis/WorkflowFramework/actions/runs/25747472570/job/75615317340?pr=3

Review and correct.

Fixed in 3bc21f3 + 8d06e8e.

Root cause: dotnet restore --use-lock-file generates packages.lock.json for all projects — including AppHost and UITests which have <RestorePackagesWithLockFile>false</RestorePackagesWithLockFile>. When dotnet test then ran its own implicit restore, NuGet saw: lock file exists + property is false → NU1005 error.

Fix:

  • Added --no-restore to both dotnet test commands in ci.yml (the solution is already fully restored in the dedicated Restore step).
  • Added the two paths to .gitignore so those ephemeral lock files are never accidentally committed again.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 34 out of 42 changed files in this pull request and generated 2 comments.

Files not reviewed (7)
  • tests/WorkflowFramework.Dashboard.UITests/Features/PropertiesPanel.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/RunAssistant.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Settings.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Templates.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowDesigner.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowExecution.feature.cs: Language not supported

Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
Comment thread src/WorkflowFramework.Extensions.Configuration/IWorkflowDefinitionLoader.cs Outdated
@JerrettDavis
Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

…eoutStepWrapper/TimeoutCompensatingStepWrapper

Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/sessions/dc46b022-a2ad-4a57-bf08-9fb501bba8ba

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 12, 2026

@copilot apply changes based on the comments in this thread

Applied in 6bb107e. Both TimeoutStepWrapper and TimeoutCompensatingStepWrapper now gate the OperationCanceledException → TimeoutException conversion on cts.IsCancellationRequested && !context.CancellationToken.IsCancellationRequested. This ensures only cancellations triggered by the wrapper's own timeout CTS are reported as TimeoutException; inner-step self-cancellations propagate as OperationCanceledException.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 34 out of 42 changed files in this pull request and generated no new comments.

Files not reviewed (7)
  • tests/WorkflowFramework.Dashboard.UITests/Features/PropertiesPanel.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/RunAssistant.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/SampleWorkflows.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Settings.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/Templates.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowDesigner.feature.cs: Language not supported
  • tests/WorkflowFramework.Dashboard.UITests/Features/WorkflowExecution.feature.cs: Language not supported

@github-actions
Copy link
Copy Markdown

Code Coverage

Summary
  Generated on: 05/12/2026 - 20:23:54
  Coverage date: 05/12/2026 - 20:23:08 - 05/12/2026 - 20:23:50
  Parser: MultiReport (11x Cobertura)
  Assemblies: 36
  Classes: 338
  Files: 236
  Line coverage: 93.9%
  Covered lines: 5963
  Uncovered lines: 385
  Coverable lines: 6348
  Total lines: 18066
  Branch coverage: 83.9% (2630 of 3131)
  Covered branches: 2630
  Total branches: 3131
  Method coverage: 97% (1546 of 1593)
  Full method coverage: 92.9% (1481 of 1593)
  Covered methods: 1546
  Fully covered methods: 1481
  Total methods: 1593

WorkflowFramework                                                                                  96.1%
  WorkflowFramework.Attributes.StepDescriptionAttribute                                             100%
  WorkflowFramework.Attributes.StepNameAttribute                                                    100%
  WorkflowFramework.Attributes.StepOrderAttribute                                                   100%
  WorkflowFramework.Attributes.StepRetryAttribute                                                   100%
  WorkflowFramework.Attributes.StepTimeoutAttribute                                                 100%
  WorkflowFramework.Attributes.WorkflowAttribute                                                    100%
  WorkflowFramework.Builder.TimeoutMiddleware                                                       100%
  WorkflowFramework.Builder.TryCatchBuilderImpl                                                     100%
  WorkflowFramework.Builder.WorkflowBuilder                                                        97.7%
  WorkflowFramework.Builder.WorkflowBuilder<T>                                                     96.3%
  WorkflowFramework.Builder.WorkflowBuilderExtensions                                               100%
  WorkflowFramework.Checkpointing.CheckpointingBuilderExtensions                                    100%
  WorkflowFramework.Checkpointing.CheckpointingMiddleware                                           100%
  WorkflowFramework.Checkpointing.InMemoryWorkflowCheckpointStore                                   100%
  WorkflowFramework.Checkpointing.ResumableWorkflowContext                                          100%
  WorkflowFramework.Checkpointing.WorkflowCheckpoint                                                100%
  WorkflowFramework.Checkpointing.WorkflowResumeEngine                                               98%
  WorkflowFramework.Internal.ConditionalStep                                                        100%
  WorkflowFramework.Internal.ConditionalStep<T>                                                     100%
  WorkflowFramework.Internal.DelayStep                                                              100%
  WorkflowFramework.Internal.DelegateStep                                                           100%
  WorkflowFramework.Internal.DelegateStep<T>                                                        100%
  WorkflowFramework.Internal.DoWhileStep                                                            100%
  WorkflowFramework.Internal.ForEachStep<T>                                                         100%
  WorkflowFramework.Internal.ParallelStep                                                           100%
  WorkflowFramework.Internal.RetryGroupStep                                                         100%
  WorkflowFramework.Internal.SubWorkflowStep                                                        100%
  WorkflowFramework.Internal.TimeoutStep                                                            100%
  WorkflowFramework.Internal.TryCatchStep                                                           100%
  WorkflowFramework.Internal.TypedCompensatingStepAdapter<T>                                        100%
  WorkflowFramework.Internal.TypedStepAdapter<T>                                                    100%
  WorkflowFramework.Internal.TypedWorkflowAdapter<T>                                                100%
  WorkflowFramework.Internal.WhileStep                                                              100%
  WorkflowFramework.Persistence.WorkflowState                                                       100%
  WorkflowFramework.Pipeline.Pipeline                                                               100%
  WorkflowFramework.Pipeline.PipelineBuilder<T1, T2>                                                100%
  WorkflowFramework.Registry.WorkflowRegistry                                                       100%
  WorkflowFramework.Registry.WorkflowRunner                                                         100%
  WorkflowFramework.StepBase                                                                        100%
  WorkflowFramework.StepBase<T>                                                                     100%
  WorkflowFramework.StepExecutionException                                                          100%
  WorkflowFramework.Triggers.CronExpression                                                        92.8%
  WorkflowFramework.Triggers.Sources.AudioInputTriggerSource                                       95.9%
  WorkflowFramework.Triggers.Sources.FileWatchTriggerSource                                        95.6%
  WorkflowFramework.Triggers.Sources.ManualTriggerSource                                           95.8%
  WorkflowFramework.Triggers.Sources.ScheduleTriggerSource                                           52%
  WorkflowFramework.Triggers.TriggerContext                                                         100%
  WorkflowFramework.Triggers.TriggerDefinition                                                      100%
  WorkflowFramework.Triggers.TriggerEvent                                                           100%
  WorkflowFramework.Triggers.TriggerServiceCollectionExtensions                                     100%
  WorkflowFramework.Triggers.TriggerSourceFactory                                                   100%
  WorkflowFramework.Triggers.TriggerTypeInfo                                                        100%
  WorkflowFramework.Triggers.WorkflowTriggerService                                                95.2%
  WorkflowFramework.Validation.DefaultWorkflowValidator                                             100%
  WorkflowFramework.Validation.ValidationError                                                      100%
  WorkflowFramework.Validation.ValidationResult                                                     100%
  WorkflowFramework.Versioning.VersionedWorkflowRegistry                                            100%
  WorkflowFramework.Workflow                                                                        100%
  WorkflowFramework.WorkflowAbortedException                                                        100%
  WorkflowFramework.WorkflowContext                                                                 100%
  WorkflowFramework.WorkflowContext<T>                                                              100%
  WorkflowFramework.WorkflowEngine                                                                  100%
  WorkflowFramework.WorkflowError                                                                   100%
  WorkflowFramework.WorkflowEventsBase                                                              100%
  WorkflowFramework.WorkflowException                                                               100%
  WorkflowFramework.WorkflowOptions                                                                 100%
  WorkflowFramework.WorkflowResult                                                                  100%
  WorkflowFramework.WorkflowResult<T>                                                               100%

WorkflowFramework.Extensions.Agents                                                                97.1%
  WorkflowFramework.Extensions.Agents.AgentBuilderExtensions                                        100%
  WorkflowFramework.Extensions.Agents.AgentLoopOptions                                              100%
  WorkflowFramework.Extensions.Agents.AgentLoopStep                                                90.7%
  WorkflowFramework.Extensions.Agents.AgentToolingOptions                                           100%
  WorkflowFramework.Extensions.Agents.CheckpointInfo                                                100%
  WorkflowFramework.Extensions.Agents.CodeHook                                                      100%
  WorkflowFramework.Extensions.Agents.CommandHook                                                  97.5%
  WorkflowFramework.Extensions.Agents.CompactionOptions                                             100%
  WorkflowFramework.Extensions.Agents.CompactionResult                                              100%
  WorkflowFramework.Extensions.Agents.ContextAggregator                                             100%
  WorkflowFramework.Extensions.Agents.ContextDocument                                               100%
  WorkflowFramework.Extensions.Agents.ContextSnapshot                                               100%
  WorkflowFramework.Extensions.Agents.ConversationMessage                                           100%
  WorkflowFramework.Extensions.Agents.DefaultContextManager                                         100%
  WorkflowFramework.Extensions.Agents.DefaultTokenEstimator                                         100%
  WorkflowFramework.Extensions.Agents.Diagnostics.AgentActivitySource                               100%
  WorkflowFramework.Extensions.Agents.HookContext                                                   100%
  WorkflowFramework.Extensions.Agents.HookPipeline                                                 96.1%
  WorkflowFramework.Extensions.Agents.HookResult                                                    100%
  WorkflowFramework.Extensions.Agents.InMemoryCheckpointStore                                       100%
  WorkflowFramework.Extensions.Agents.LlmCompactionStrategy                                         100%
  WorkflowFramework.Extensions.Agents.PromptHook                                                    100%
  WorkflowFramework.Extensions.Agents.ServiceCollectionExtensions                                   100%
  WorkflowFramework.Extensions.Agents.SlidingWindowCompactionStrategy                               100%
  WorkflowFramework.Extensions.Agents.ToolCallStep                                                  100%
  WorkflowFramework.Extensions.Agents.ToolDefinition                                                100%
  WorkflowFramework.Extensions.Agents.ToolRegistry                                                  100%
  WorkflowFramework.Extensions.Agents.ToolResult                                                    100%

WorkflowFramework.Extensions.Agents.Mcp                                                            97.8%
  WorkflowFramework.Extensions.Agents.Mcp.HttpMcpTransport                                          100%
  WorkflowFramework.Extensions.Agents.Mcp.McpBuilderExtensions                                      100%
  WorkflowFramework.Extensions.Agents.Mcp.McpClient                                                 100%
  WorkflowFramework.Extensions.Agents.Mcp.McpJsonRpcError                                           100%
  WorkflowFramework.Extensions.Agents.Mcp.McpJsonRpcMessage                                         100%
  WorkflowFramework.Extensions.Agents.Mcp.McpResourceContent                                        100%
  WorkflowFramework.Extensions.Agents.Mcp.McpResourceInfo                                           100%
  WorkflowFramework.Extensions.Agents.Mcp.McpResourceProvider                                       100%
  WorkflowFramework.Extensions.Agents.Mcp.McpServerConfig                                           100%
  WorkflowFramework.Extensions.Agents.Mcp.McpServiceCollectionExtensions                            100%
  WorkflowFramework.Extensions.Agents.Mcp.McpToolCallResult                                         100%
  WorkflowFramework.Extensions.Agents.Mcp.McpToolInfo                                               100%
  WorkflowFramework.Extensions.Agents.Mcp.McpToolProvider                                           100%
  WorkflowFramework.Extensions.Agents.Mcp.StdioMcpTransport                                        85.4%

WorkflowFramework.Extensions.Agents.Skills                                                         97.2%
  WorkflowFramework.Extensions.Agents.Skills.SkillContextSource                                     100%
  WorkflowFramework.Extensions.Agents.Skills.SkillDefinition                                        100%
  WorkflowFramework.Extensions.Agents.Skills.SkillDiscovery                                        86.1%
  WorkflowFramework.Extensions.Agents.Skills.SkillFrontmatter                                       100%
  WorkflowFramework.Extensions.Agents.Skills.SkillLoader                                            100%
  WorkflowFramework.Extensions.Agents.Skills.SkillOptions                                           100%
  WorkflowFramework.Extensions.Agents.Skills.SkillServiceCollectionExtensions                       100%
  WorkflowFramework.Extensions.Agents.Skills.SkillToolProvider                                      100%

WorkflowFramework.Extensions.AI                                                                    99.3%
  WorkflowFramework.Extensions.AI.AgentDecisionOptions                                              100%
  WorkflowFramework.Extensions.AI.AgentDecisionRequest                                              100%
  WorkflowFramework.Extensions.AI.AgentDecisionStep                                                 100%
  WorkflowFramework.Extensions.AI.AgentPlanOptions                                                  100%
  WorkflowFramework.Extensions.AI.AgentPlanStep                                                     100%
  WorkflowFramework.Extensions.AI.AgentTool                                                         100%
  WorkflowFramework.Extensions.AI.AiBuilderExtensions                                               100%
  WorkflowFramework.Extensions.AI.AnthropicAgentProvider                                            100%
  WorkflowFramework.Extensions.AI.AnthropicOptions                                                  100%
  WorkflowFramework.Extensions.AI.EchoAgentProvider                                                 100%
  WorkflowFramework.Extensions.AI.HuggingFaceAgentProvider                                          100%
  WorkflowFramework.Extensions.AI.HuggingFaceOptions                                                100%
  WorkflowFramework.Extensions.AI.LlmCallOptions                                                    100%
  WorkflowFramework.Extensions.AI.LlmCallStep                                                       100%
  WorkflowFramework.Extensions.AI.LlmRequest                                                        100%
  WorkflowFramework.Extensions.AI.LlmResponse                                                       100%
  WorkflowFramework.Extensions.AI.OllamaAgentProvider                                               100%
  WorkflowFramework.Extensions.AI.OllamaOptions                                                     100%
  WorkflowFramework.Extensions.AI.OpenAiAgentProvider                                               100%
  WorkflowFramework.Extensions.AI.OpenAiOptions                                                     100%
  WorkflowFramework.Extensions.AI.PromptTemplateRenderer                                           88.8%
  WorkflowFramework.Extensions.AI.SemanticKernelAgentProvider                                      98.7%
  WorkflowFramework.Extensions.AI.SemanticKernelOptions                                             100%
  WorkflowFramework.Extensions.AI.TokenUsage                                                        100%
  WorkflowFramework.Extensions.AI.ToolCall                                                          100%

WorkflowFramework.Extensions.Configuration                                                         85.8%
  WorkflowFramework.Extensions.Configuration.CatchDefinition                                        100%
  WorkflowFramework.Extensions.Configuration.JsonWorkflowDefinitionLoader                           100%
  WorkflowFramework.Extensions.Configuration.LoopDefinition                                         100%
  WorkflowFramework.Extensions.Configuration.RetryDefinition                                        100%
  WorkflowFramework.Extensions.Configuration.StepDefinition                                         100%
  WorkflowFramework.Extensions.Configuration.StepRegistry                                           100%
  WorkflowFramework.Extensions.Configuration.WorkflowDefinition                                     100%
  WorkflowFramework.Extensions.Configuration.WorkflowDefinitionBuilder                             82.2%
  WorkflowFramework.Extensions.Configuration.WorkflowDefinitionLoaderServiceCollectionExtensions    100%
  WorkflowFramework.Extensions.Configuration.YamlWorkflowDefinitionLoader                           100%

WorkflowFramework.Extensions.Connectors.Abstractions                                                100%
  WorkflowFramework.Extensions.Connectors.Abstractions.AuthenticationConfig                         100%
  WorkflowFramework.Extensions.Connectors.Abstractions.BuiltIn.FileConnectorConfig                  100%
  WorkflowFramework.Extensions.Connectors.Abstractions.BuiltIn.FtpConnectorConfig                   100%
  WorkflowFramework.Extensions.Connectors.Abstractions.BuiltIn.HttpConnectorConfig                  100%
  WorkflowFramework.Extensions.Connectors.Abstractions.BuiltIn.SqlConnectorConfig                   100%
  WorkflowFramework.Extensions.Connectors.Abstractions.ConnectorConfiguration                       100%
  WorkflowFramework.Extensions.Connectors.Abstractions.ConnectorMessage                             100%
  WorkflowFramework.Extensions.Connectors.Abstractions.ConnectorRegistry                            100%
  WorkflowFramework.Extensions.Connectors.Abstractions.RetryConfig                                  100%

WorkflowFramework.Extensions.Connectors.Grpc                                                        100%
  WorkflowFramework.Extensions.Connectors.Grpc.GrpcConnectorConfig                                  100%

WorkflowFramework.Extensions.Connectors.Messaging                                                  80.5%
  WorkflowFramework.Extensions.Connectors.Messaging.Abstractions.BrokerMessage                      100%
  WorkflowFramework.Extensions.Connectors.Messaging.Configuration.AzureServiceBusConnectorConfig    100%
  WorkflowFramework.Extensions.Connectors.Messaging.Configuration.KafkaConnectorConfig              100%
  WorkflowFramework.Extensions.Connectors.Messaging.Configuration.RabbitMqConnectorConfig           100%
  WorkflowFramework.Extensions.Connectors.Messaging.InMemoryMessageConnector                       95.5%
  WorkflowFramework.Extensions.Connectors.Messaging.ServiceCollectionExtensions                     100%
  WorkflowFramework.Extensions.Connectors.Messaging.Triggers.MessageQueueTriggerSource             55.3%

WorkflowFramework.Extensions.DataMapping                                                           93.3%
  WorkflowFramework.Extensions.DataMapping.Abstractions.DataMappingProfile                          100%
  WorkflowFramework.Extensions.DataMapping.Abstractions.DataMappingResult                           100%
  WorkflowFramework.Extensions.DataMapping.Abstractions.FieldMapping                                100%
  WorkflowFramework.Extensions.DataMapping.Abstractions.TransformerRef                              100%
  WorkflowFramework.Extensions.DataMapping.Batch.BatchOptions                                       100%
  WorkflowFramework.Extensions.DataMapping.Batch.BatchProcessStep                                   100%
  WorkflowFramework.Extensions.DataMapping.Batch.DataBatcher                                        100%
  WorkflowFramework.Extensions.DataMapping.Builder.DataMappingBuilderExtensions                     100%
  WorkflowFramework.Extensions.DataMapping.Builder.DataMappingProfileBuilder                        100%
  WorkflowFramework.Extensions.DataMapping.Engine.DataMapper                                       92.8%
  WorkflowFramework.Extensions.DataMapping.Engine.FieldTransformerRegistry                         95.4%
  WorkflowFramework.Extensions.DataMapping.Internal.DictHelper                                      100%
  WorkflowFramework.Extensions.DataMapping.Readers.DictionarySourceReader                           100%
  WorkflowFramework.Extensions.DataMapping.Readers.JsonSourceReader                                92.1%
  WorkflowFramework.Extensions.DataMapping.Readers.ObjectSourceReader                              88.8%
  WorkflowFramework.Extensions.DataMapping.Readers.XmlSourceReader                                 88.8%
  WorkflowFramework.Extensions.DataMapping.ServiceCollectionExtensions                              100%
  WorkflowFramework.Extensions.DataMapping.Steps.DataMapStep                                       95.6%
  WorkflowFramework.Extensions.DataMapping.Steps.FormatConvertStep                                  100%
  WorkflowFramework.Extensions.DataMapping.Steps.SchemaValidateStep                                 100%
  WorkflowFramework.Extensions.DataMapping.Steps.SchemaValidationResult                             100%
  WorkflowFramework.Extensions.DataMapping.Transformers.BooleanTransformer                          100%
  WorkflowFramework.Extensions.DataMapping.Transformers.CompositeTransformer                       88.8%
  WorkflowFramework.Extensions.DataMapping.Transformers.ConditionalTransformer                     88.8%
  WorkflowFramework.Extensions.DataMapping.Transformers.DateFormatTransformer                      72.7%
  WorkflowFramework.Extensions.DataMapping.Transformers.DefaultValueTransformer                     100%
  WorkflowFramework.Extensions.DataMapping.Transformers.NumberFormatTransformer                    81.8%
  WorkflowFramework.Extensions.DataMapping.Transformers.RegexReplaceTransformer                      75%
  WorkflowFramework.Extensions.DataMapping.Transformers.ToLowerTransformer                          100%
  WorkflowFramework.Extensions.DataMapping.Transformers.ToUpperTransformer                          100%
  WorkflowFramework.Extensions.DataMapping.Transformers.TrimTransformer                             100%
  WorkflowFramework.Extensions.DataMapping.Writers.DictionaryDestinationWriter                     87.5%
  WorkflowFramework.Extensions.DataMapping.Writers.JsonDestinationWriter                           87.5%
  WorkflowFramework.Extensions.DataMapping.Writers.ObjectDestinationWriter                         86.6%
  WorkflowFramework.Extensions.DataMapping.Writers.XmlDestinationWriter                            92.5%

WorkflowFramework.Extensions.DataMapping.Formats                                                    100%
  WorkflowFramework.Extensions.DataMapping.Formats.Converters.FormatConverter                       100%

WorkflowFramework.Extensions.DataMapping.Schema                                                    98.4%
  WorkflowFramework.Extensions.DataMapping.Schema.Abstractions.SchemaRegistry                       100%
  WorkflowFramework.Extensions.DataMapping.Schema.Validators.JsonSchemaValidator                   97.5%
  WorkflowFramework.Extensions.DataMapping.Schema.Validators.XmlSchemaValidator                     100%

WorkflowFramework.Extensions.DependencyInjection                                                    100%
  WorkflowFramework.Extensions.DependencyInjection.ServiceCollectionExtensions                      100%
  WorkflowFramework.Extensions.DependencyInjection.WorkflowBuilderExtensions                        100%

WorkflowFramework.Extensions.Diagnostics                                                           97.8%
  WorkflowFramework.Extensions.Diagnostics.AuditEntry                                               100%
  WorkflowFramework.Extensions.Diagnostics.AuditMiddleware                                          100%
  WorkflowFramework.Extensions.Diagnostics.CachingMiddleware                                        100%
  WorkflowFramework.Extensions.Diagnostics.DashboardSummary                                         100%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.ExecutionHistoryBuilderExtensions        60%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.ExecutionHistoryEvents                 93.7%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.ExecutionHistoryFilter                  100%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.ExecutionHistoryMiddleware              100%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.InMemoryExecutionHistoryStore            96%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.StepRunRecord                           100%
  WorkflowFramework.Extensions.Diagnostics.ExecutionHistory.WorkflowRunRecord                       100%
  WorkflowFramework.Extensions.Diagnostics.IdempotencyMiddleware                                    100%
  WorkflowFramework.Extensions.Diagnostics.InMemoryAuditStore                                       100%
  WorkflowFramework.Extensions.Diagnostics.LoggingMiddleware                                        100%
  WorkflowFramework.Extensions.Diagnostics.MetricsDashboardDataProvider                             100%
  WorkflowFramework.Extensions.Diagnostics.MetricsMiddleware                                        100%
  WorkflowFramework.Extensions.Diagnostics.OpenTelemetryMiddleware                                  100%
  WorkflowFramework.Extensions.Diagnostics.StructuredLoggingMiddleware                              100%
  WorkflowFramework.Extensions.Diagnostics.TimingMiddleware                                         100%
  WorkflowFramework.Extensions.Diagnostics.TracingMiddleware                                        100%
  WorkflowFramework.Extensions.Diagnostics.ValidationMiddleware                                     100%
  WorkflowFramework.Extensions.Diagnostics.WorkflowActivitySource                                   100%

WorkflowFramework.Extensions.Distributed                                                            100%
  WorkflowFramework.Extensions.Distributed.InMemoryDistributedLock                                  100%
  WorkflowFramework.Extensions.Distributed.InMemoryWorkflowQueue                                    100%
  WorkflowFramework.Extensions.Distributed.WorkerHealthStatus                                       100%
  WorkflowFramework.Extensions.Distributed.WorkflowQueueItem                                        100%
  WorkflowFramework.Extensions.Distributed.WorkflowWorker                                           100%
  WorkflowFramework.Extensions.Distributed.WorkflowWorkerOptions                                    100%

WorkflowFramework.Extensions.Distributed.PostgreSQL                                                24.1%
  WorkflowFramework.Extensions.Distributed.PostgreSQL.PostgreSqlDistributedLock                      27%
  WorkflowFramework.Extensions.Distributed.PostgreSQL.PostgreSqlWorkflowQueue                      15.9%
  WorkflowFramework.Extensions.Distributed.PostgreSQL.ServiceCollectionExtensions                   100%

WorkflowFramework.Extensions.Events                                                                 100%
  WorkflowFramework.Extensions.Events.EventBuilderExtensions                                        100%
  WorkflowFramework.Extensions.Events.InMemoryEventBus                                              100%
  WorkflowFramework.Extensions.Events.PublishEventStep                                              100%
  WorkflowFramework.Extensions.Events.WaitForEventStep                                              100%
  WorkflowFramework.Extensions.Events.WorkflowEvent                                                 100%

WorkflowFramework.Extensions.Expressions                                                           97.4%
  WorkflowFramework.Extensions.Expressions.ExpressionBuilderExtensions                              100%
  WorkflowFramework.Extensions.Expressions.SimpleExpressionEvaluator                               96.6%
  WorkflowFramework.Extensions.Expressions.TemplateEngine                                           100%

WorkflowFramework.Extensions.Hosting                                                               97.3%
  WorkflowFramework.Extensions.Hosting.HostingServiceCollectionExtensions                           100%
  WorkflowFramework.Extensions.Hosting.WorkflowHealthCheck                                          100%
  WorkflowFramework.Extensions.Hosting.WorkflowHostingOptions                                       100%
  WorkflowFramework.Extensions.Hosting.WorkflowSchedulerHostedService                              92.8%

WorkflowFramework.Extensions.Http                                                                   100%
  WorkflowFramework.Extensions.Http.ApiKeyAuthProvider                                              100%
  WorkflowFramework.Extensions.Http.BearerTokenAuthProvider                                         100%
  WorkflowFramework.Extensions.Http.HttpBuilderExtensions                                           100%
  WorkflowFramework.Extensions.Http.HttpStep                                                        100%
  WorkflowFramework.Extensions.Http.HttpStepOptions                                                 100%
  WorkflowFramework.Extensions.Http.WebhookPayload                                                  100%
  WorkflowFramework.Extensions.Http.WebhookTriggerOptions                                           100%
  WorkflowFramework.Extensions.Http.WebhookTriggerStep                                              100%

WorkflowFramework.Extensions.HumanTasks                                                             100%
  WorkflowFramework.Extensions.HumanTasks.ApprovalOptions                                           100%
  WorkflowFramework.Extensions.HumanTasks.ApprovalStep                                              100%
  WorkflowFramework.Extensions.HumanTasks.EscalationRule                                            100%
  WorkflowFramework.Extensions.HumanTasks.HumanTask                                                 100%
  WorkflowFramework.Extensions.HumanTasks.HumanTaskOptions                                          100%
  WorkflowFramework.Extensions.HumanTasks.HumanTaskStep                                             100%
  WorkflowFramework.Extensions.HumanTasks.InMemoryTaskInbox                                         100%

WorkflowFramework.Extensions.Integration                                                           97.5%
  WorkflowFramework.Extensions.Integration.Builder.IntegrationBuilderExtensions                     100%
  WorkflowFramework.Extensions.Integration.Channel.ChannelAdapterStep                               100%
  WorkflowFramework.Extensions.Integration.Channel.DeadLetterStep                                   100%
  WorkflowFramework.Extensions.Integration.Channel.MessageBridgeStep                                100%
  WorkflowFramework.Extensions.Integration.Channel.WireTapStep                                      100%
  WorkflowFramework.Extensions.Integration.Composition.AggregatorOptions                            100%
  WorkflowFramework.Extensions.Integration.Composition.AggregatorStep                               100%
  WorkflowFramework.Extensions.Integration.Composition.ComposedMessageProcessorStep                 100%
  WorkflowFramework.Extensions.Integration.Composition.ProcessManagerStep                           100%
  WorkflowFramework.Extensions.Integration.Composition.ResequencerStep                              100%
  WorkflowFramework.Extensions.Integration.Composition.ScatterGatherStep                           77.5%
  WorkflowFramework.Extensions.Integration.Composition.SplitterStep                                 100%
  WorkflowFramework.Extensions.Integration.Endpoint.IdempotentReceiverStep                          100%
  WorkflowFramework.Extensions.Integration.Endpoint.PollingConsumerStep<T>                          100%
  WorkflowFramework.Extensions.Integration.Endpoint.TransactionalOutboxStep                         100%
  WorkflowFramework.Extensions.Integration.Routing.ContentBasedRouterStep                           100%
  WorkflowFramework.Extensions.Integration.Routing.DynamicRouterStep                                100%
  WorkflowFramework.Extensions.Integration.Routing.MessageFilterStep                                100%
  WorkflowFramework.Extensions.Integration.Routing.RecipientListStep                                100%
  WorkflowFramework.Extensions.Integration.Routing.RoutingSlip                                      100%
  WorkflowFramework.Extensions.Integration.Routing.RoutingSlipStep                                  100%
  WorkflowFramework.Extensions.Integration.Transformation.ClaimCheckStep                            100%
  WorkflowFramework.Extensions.Integration.Transformation.ClaimRetrieveStep                         100%
  WorkflowFramework.Extensions.Integration.Transformation.ContentEnricherStep                       100%
  WorkflowFramework.Extensions.Integration.Transformation.ContentFilterStep                         100%
  WorkflowFramework.Extensions.Integration.Transformation.MessageTranslatorStep<T1, T2>             100%
  WorkflowFramework.Extensions.Integration.Transformation.NormalizerStep                            100%

WorkflowFramework.Extensions.Integration.Abstractions                                               100%
  WorkflowFramework.Extensions.Integration.Abstractions.OutboxMessage                               100%

WorkflowFramework.Extensions.Persistence                                                            100%
  WorkflowFramework.Extensions.Persistence.CheckpointMiddleware                                     100%

WorkflowFramework.Extensions.Persistence.EntityFramework                                            100%
  WorkflowFramework.Extensions.Persistence.EntityFramework.EfCoreWorkflowStateStore                 100%
  WorkflowFramework.Extensions.Persistence.EntityFramework.WorkflowDbContext                        100%
  WorkflowFramework.Extensions.Persistence.EntityFramework.WorkflowStateEntity                      100%

WorkflowFramework.Extensions.Persistence.InMemory                                                   100%
  WorkflowFramework.Extensions.Persistence.InMemory.InMemoryWorkflowStateStore                      100%

WorkflowFramework.Extensions.Persistence.PostgreSQL                                                 100%
  WorkflowFramework.Extensions.Persistence.PostgreSQL.PostgreSqlWorkflowDbContext                   100%
  WorkflowFramework.Extensions.Persistence.PostgreSQL.ServiceCollectionExtensions                   100%

WorkflowFramework.Extensions.Persistence.Sqlite                                                     100%
  WorkflowFramework.Extensions.Persistence.Sqlite.SqliteWorkflowStateStore                          100%

WorkflowFramework.Extensions.Persistence.SqlServer                                                  100%
  WorkflowFramework.Extensions.Persistence.SqlServer.ServiceCollectionExtensions                    100%
  WorkflowFramework.Extensions.Persistence.SqlServer.SqlServerWorkflowDbContext                     100%

WorkflowFramework.Extensions.Plugins                                                               97.8%
  WorkflowFramework.Extensions.Plugins.PluginManager                                               96.7%
  WorkflowFramework.Extensions.Plugins.PluginManifest                                               100%
  WorkflowFramework.Extensions.Plugins.WorkflowPluginBase                                           100%
  WorkflowFramework.Extensions.Plugins.WorkflowPluginContext                                        100%

WorkflowFramework.Extensions.Polly                                                                  100%
  WorkflowFramework.Extensions.Polly.ResilienceMiddleware                                           100%
  WorkflowFramework.Extensions.Polly.WorkflowBuilderPollyExtensions                                 100%

WorkflowFramework.Extensions.Reactive                                                               100%
  WorkflowFramework.Extensions.Reactive.AsyncStepAdapter<T>                                         100%
  WorkflowFramework.Extensions.Reactive.ReactiveExtensions                                          100%

WorkflowFramework.Extensions.Scheduling                                                            93.5%
  WorkflowFramework.Extensions.Scheduling.ApprovalConfig                                            100%
  WorkflowFramework.Extensions.Scheduling.CronParser                                               97.3%
  WorkflowFramework.Extensions.Scheduling.InMemoryApprovalService                                  87.5%
  WorkflowFramework.Extensions.Scheduling.InMemoryWorkflowScheduler                                92.3%
  WorkflowFramework.Extensions.Scheduling.ScheduledWorkflow                                         100%

WorkflowFramework.Extensions.Visualization                                                          100%
  WorkflowFramework.Extensions.Visualization.WorkflowVisualizationExtensions                        100%

WorkflowFramework.Serialization                                                                    78.4%
  WorkflowFramework.Serialization.StepDefinitionDto                                                 100%
  WorkflowFramework.Serialization.StepInspector                                                    64.2%
  WorkflowFramework.Serialization.WorkflowCanvasDto                                                   0%
  WorkflowFramework.Serialization.WorkflowCanvasEdgeDto                                               0%
  WorkflowFramework.Serialization.WorkflowCanvasNodeDto                                               0%
  WorkflowFramework.Serialization.WorkflowDefinitionDto                                             100%
  WorkflowFramework.Serialization.WorkflowSerializer                                                100%
  WorkflowFramework.Serialization.YamlReader                                                        100%
  WorkflowFramework.Serialization.YamlWriter                                                       73.4%

WorkflowFramework.Testing                                                                          93.7%
  WorkflowFramework.Testing.FakeStep                                                                100%
  WorkflowFramework.Testing.FakeStep<T>                                                             100%
  WorkflowFramework.Testing.InMemoryWorkflowEvents                                                  100%
  WorkflowFramework.Testing.MockStep                                                                100%
  WorkflowFramework.Testing.StepTestBuilder                                                         100%
  WorkflowFramework.Testing.WorkflowAssertions                                                      100%
  WorkflowFramework.Testing.WorkflowTestBuilder                                                     100%
  WorkflowFramework.Testing.WorkflowTestHarness                                                    69.2%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: YAML workflow definition format (parity with existing JSON support)

4 participants