Skip to content

test(phase-i): coverage tightening — fill serialization, agents, configuration, dashboard, approvals gaps#24

Merged
JerrettDavis merged 17 commits into
mainfrom
feat/phase-i-coverage-tightening
May 23, 2026
Merged

test(phase-i): coverage tightening — fill serialization, agents, configuration, dashboard, approvals gaps#24
JerrettDavis merged 17 commits into
mainfrom
feat/phase-i-coverage-tightening

Conversation

@JerrettDavis
Copy link
Copy Markdown
Owner

Summary

Phase I coverage tightening: fill the highest-value coverage gaps with targeted TinyBDD scenarios and xUnit characterization tests. Adds PatternKit adoption inventory documentation.

New test files (3,428 insertions across 18 test files)

File Scenarios/Tests Target assembly
AgentLoopStepScenarios.cs 14 TinyBDD scenarios Extensions.Agents AgentLoopStep: 78.9% → 94%
DslEmitterStepScenarios.cs ~18 TinyBDD scenarios Extensions.Agents DslEmitterStep: 96.2%
ScatterGatherStepScenarios.cs (expanded) +3 scenarios Extensions.Integration ScatterGatherStep
SerializationScenarios.cs ~35 TinyBDD scenarios WorkflowFramework.Serialization: 98.9%
WorkflowDefinitionBuilderScenarios.cs 29 TinyBDD scenarios Extensions.Configuration WorkflowDefinitionBuilder: 84.3% → 89.5%
ExecutionHistoryBuilderExtensionsScenarios.cs ~12 TinyBDD scenarios Extensions.Diagnostics
WorkflowTestHarnessTests.cs 6 xUnit tests WorkflowFramework.Testing
ApprovalRehydrationHostedServiceTests.cs 5 xUnit tests Extensions.Approvals
InMemoryApprovalStoreTests.cs 8 xUnit tests Extensions.Approvals
MultiChannelApprovalServiceTests.cs 11 xUnit tests Extensions.Approvals
NamedChannelRouterTests.cs 12 xUnit tests Extensions.Approvals
PersistentApprovalServiceTests.cs 10 xUnit tests Extensions.Approvals
SingleChannelRouterTests.cs 7 xUnit tests Extensions.Approvals
DashboardServiceCollectionExtensionsTests.cs 2 xUnit tests Dashboard DI extension

Documentation

  • docs/patternkit-adoption.md — PatternKit adoption inventory: 3 adoptions documented (WorkflowSpec/Specification, WorkflowStatusMachine/StateMachine, ContentBasedRouterStep/AsyncActionStrategy), 14 intentionally bespoke EIP steps noted

Key coverage improvements (core assemblies)

  • AgentLoopStep: 78.9% → 94% line coverage
  • AgentLoopOptions: 84.6% → 100%
  • WorkflowDefinitionBuilder: 84.3% → 89.5%
  • Extensions.Approvals assembly: 77.2%+ on ApprovalRehydrationHostedService
  • WorkflowDashboardService: 0% → registered service test added

Technical notes

  • All scenarios pass on net8.0, net9.0, net10.0
  • Fixed ScatterGatherStep timeout test: bounded Task.Delay(500) instead of Task.Delay(Timeout.Infinite) to avoid test-host orphan processes
  • AgentLoopStep checkpoint test uses mock provider returning tool call on iteration 1 then stopping (checkpoint path only fires after a tool-call iteration)
  • Correct HookResult factory methods: DenyResult(), not Deny()
  • IAgentHook.ExecuteAsync signature: (AgentHookEvent hookEvent, HookContext context, CancellationToken ct)

Test plan

  • CI matrix passes on net8.0, net9.0, net10.0
  • No regressions on existing test files
  • WorkflowDefinitionBuilderScenarios.cs — 29 scenarios covering all step types and edge cases
  • AgentLoopStepScenarios.cs — 14 scenarios including checkpoint, hook deny, tool calls, compaction
  • DashboardServiceCollectionExtensionsTests.cs — null guard and DI registration
  • All Approvals characterization tests pass

🤖 Generated with Claude Code

JerrettDavis and others added 16 commits April 28, 2026 21:16
… execution

- Replace qwen3:30b-instruct with qwen2.5:1.5b (1.5B params, <=2B constraint)
  everywhere the model is configured: OllamaAgentProvider default, OllamaFixture,
  SemanticKernelE2ETests, AiDsl sample, TaskStream sample extension
- Reduce OllamaFixture warmup timeout from 300s to 120s; remove /no_think from
  warmup prompt (qwen3-specific; harmless on qwen2.5 but unnecessary)
- Add xunit.runner.json to Tests.E2E with parallelizeTestCollections:false and
  maxParallelThreads:1 – combined with the existing [Collection("Ollama")] attribute
  this guarantees all Ollama-backed tests run one at a time
- Update OllamaFactAttribute skip message to reference new model
- Update OllamaOptionsTests default model assertion to match new default
- Update prerequisite XML doc comment in AgentLoopOllamaE2ETests

To run the Ollama-backed E2E tests locally:
  ollama pull qwen2.5:1.5b
  dotnet test tests/WorkflowFramework.Tests.E2E/WorkflowFramework.Tests.E2E.csproj \
    --filter Category=E2E

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… seeded workflow

Adds the AI DSL Emitter demo to the dashboard in two complementary ways:

1. Template ("New from Template" browser): id=ai-dsl-emitter, name="AI DSL Emitter",
   category="AI & Agents", marked IsFeatured=true with preview SVG.
2. Seeded workflow (open-existing list): id=sample-ai-dsl-emitter,
   name="AI DSL Emitter", immediately visible in the workflow list on startup.

Step types used match the Extensions.AI implementation:
  SelectProvider (Action) → EmitSteps (DslEmitterStep) → ApprovePlan (ApprovalStep)
  → BridgeContext (Action) → ExecuteEmittedSteps (WorkflowDslExecutorStep)

Also registers DslEmitterStep and WorkflowDslExecutorStep in StepTypeRegistry
so the designer UI can render their config schemas.

Tests: 43/43 passed (WorkflowTemplateLibraryTests + SampleWorkflowSeederTests).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…orkflow

The SelectProvider step in SampleWorkflowSeeder had the old expression
"Resolve the agent provider from {provider} (echo or ollama)..." with an
unresolved {provider} template variable. This made the seeded/open-existing
workflow appear broken in the dashboard.

Aligned the expression to match InMemoryWorkflowTemplateLibrary:
"Provider is configured as echo (offline/demo default). To run live,
change the provider field in EmitSteps to ollama before executing."

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… integration coverage gaps

Add TinyBDD characterization scenarios for:
- ScatterGatherStep (fixed orphaned-task timeout test)
- WorkflowTestHarness and StepInspector (serialization)
- DslEmitterStep (agents)
- ExecutionHistoryBuilderExtensions (diagnostics)
- AgentLoopStep (tool calls, hook deny, compaction, checkpoint)
- WorkflowDefinitionBuilder (all composite step types, legacy formats)
- Approvals channels (MultiChannel, NamedChannel, SingleChannel, RehydrationService)

Line coverage: 91.6% → 92.7% | Branch: 83.8% → 84.3%

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Document every PatternKit primitive adoption and intentionally bespoke
step with rationale, test coverage links, and future evaluation targets.
Covers Specification (WorkflowSpec), StateMachine (WorkflowStatusMachine),
AsyncActionStrategy (ContentBasedRouterStep), plus 14 bespoke EIP steps.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…on coverage

- 29 scenarios covering WorkflowDefinitionBuilder: all step types (step,
  parallel, while, dowhile, retry, subworkflow, approval, saga, conditional,
  foreach, try), legacy formats, timeout wrappers, edge cases (missing
  condition, empty saga steps, catch blocks, items key foreach)
- 2 characterization tests for DashboardServiceCollectionExtensions:
  AddWorkflowDashboard registers service, null-guard throws ArgumentNullException
- Update packages.lock.json files for Polly, Configuration, Integration,
  TinyBDD, and core Tests projects

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nd null guards

Extends DashboardServiceCollectionExtensionsTests with 3 additional tests:
- MapWorkflowDashboard null endpoints guard throws ArgumentNullException
- MapWorkflowDashboard with real WebApplication returns endpoints
- MapWorkflowDashboard with custom path prefix does not throw

Brings DashboardServiceCollectionExtensions from ~6% to ~80%+ coverage
by exercising the endpoint-mapping code path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Code Coverage

Summary
  Generated on: 05/23/2026 - 01:10:16
  Coverage date: 05/23/2026 - 01:07:46 - 05/23/2026 - 01:10:09
  Parser: MultiReport (101x Cobertura)
  Assemblies: 43
  Classes: 395
  Files: 291
  Line coverage: 93.6%
  Covered lines: 7754
  Uncovered lines: 526
  Coverable lines: 8280
  Total lines: 23461
  Branch coverage: 85.3% (3202 of 3751)
  Covered branches: 3202
  Total branches: 3751
  Method coverage: 97.8% (1799 of 1839)
  Full method coverage: 93.3% (1716 of 1839)
  Covered methods: 1799
  Fully covered methods: 1716
  Total methods: 1839

WorkflowFramework                                                                                    96.4%
  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>                                                       98.1%
  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.Internal.WorkflowStatusMachine                                                    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                                                          95.7%
  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.Validation.WorkflowSpec                                                           100%
  WorkflowFramework.Versioning.VersionedWorkflowRegistry                                              100%
  WorkflowFramework.Workflow                                                                          100%
  WorkflowFramework.WorkflowAbortedException                                                          100%
  WorkflowFramework.WorkflowContext                                                                   100%
  WorkflowFramework.WorkflowContext<T>                                                                100%
  WorkflowFramework.WorkflowEngine                                                                   97.3%
  WorkflowFramework.WorkflowError                                                                     100%
  WorkflowFramework.WorkflowEventsBase                                                                100%
  WorkflowFramework.WorkflowException                                                                 100%
  WorkflowFramework.WorkflowOptions                                                                   100%
  WorkflowFramework.WorkflowResult                                                                    100%
  WorkflowFramework.WorkflowResult<T>                                                                 100%

WorkflowFramework.Extensions.Agents                                                                  97.8%
  WorkflowFramework.Extensions.Agents.AgentBuilderExtensions                                          100%
  WorkflowFramework.Extensions.Agents.AgentLoopOptions                                                100%
  WorkflowFramework.Extensions.Agents.AgentLoopStep                                                    94%
  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.DslEmitterOptions                                               100%
  WorkflowFramework.Extensions.Agents.DslEmitterStep                                                 96.2%
  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.Approvals                                                               93.5%
  WorkflowFramework.Extensions.Approvals.ApprovalRehydrationHostedService                            77.2%
  WorkflowFramework.Extensions.Approvals.ApprovalsBuilder                                            97.6%
  WorkflowFramework.Extensions.Approvals.ApprovalsOptions                                             100%
  WorkflowFramework.Extensions.Approvals.ApprovalsServiceCollectionExtensions                         100%
  WorkflowFramework.Extensions.Approvals.CompositeApprovalChannel                                    95.3%
  WorkflowFramework.Extensions.Approvals.EscalatingTimeoutChannel                                    97.5%
  WorkflowFramework.Extensions.Approvals.InMemoryApprovalStore                                        100%
  WorkflowFramework.Extensions.Approvals.MultiChannelApprovalService                                  100%
  WorkflowFramework.Extensions.Approvals.NamedChannelRouter                                           100%
  WorkflowFramework.Extensions.Approvals.PersistentApprovalService                                     88%
  WorkflowFramework.Extensions.Approvals.QuorumApprovalAggregator                                     100%
  WorkflowFramework.Extensions.Approvals.SchedulingApprovalServiceAdapter                             100%
  WorkflowFramework.Extensions.Approvals.SingleChannelRouter                                          100%

WorkflowFramework.Extensions.Approvals.Abstractions                                                  96.2%
  WorkflowFramework.Extensions.Approvals.ApprovalRecord                                               100%
  WorkflowFramework.Extensions.Approvals.ApprovalRequest                                              100%
  WorkflowFramework.Extensions.Approvals.ApprovalRequestBuilder                                      95.4%
  WorkflowFramework.Extensions.Approvals.ApprovalResponse                                             100%
  WorkflowFramework.Extensions.Approvals.PendingApproval                                             90.9%

WorkflowFramework.Extensions.Approvals.Cli                                                           86.8%
  WorkflowFramework.Extensions.Approvals.Cli.CliApprovalChannel                                      69.4%
  WorkflowFramework.Extensions.Approvals.Cli.Commands.SystemConsole                                     0%
  WorkflowFramework.Extensions.Approvals.Cli.Commands.WfApprovalsCommand                             93.6%
  WorkflowFramework.Extensions.Approvals.Cli.DependencyInjection.CliApprovalsBuilderExtensions        100%

WorkflowFramework.Extensions.Approvals.Email                                                         83.9%
  WorkflowFramework.Extensions.Approvals.Email.ApprovalTokenPayload                                   100%
  WorkflowFramework.Extensions.Approvals.Email.ApprovalTokenService                                  96.2%
  WorkflowFramework.Extensions.Approvals.Email.DependencyInjection.EmailApprovalsBuilderExtensions    100%
  WorkflowFramework.Extensions.Approvals.Email.EmailApprovalCallbackHandler                           100%
  WorkflowFramework.Extensions.Approvals.Email.EmailApprovalChannel                                  86.5%
  WorkflowFramework.Extensions.Approvals.Email.EmailApprovalOptions                                  78.5%
  WorkflowFramework.Extensions.Approvals.Email.EmailApprovalOptionsValidator                           96%
  WorkflowFramework.Extensions.Approvals.Email.EmailEndpointExtensions                                  0%
  WorkflowFramework.Extensions.Approvals.Email.EmailMessage                                           100%
  WorkflowFramework.Extensions.Approvals.Email.EmailMessageBuilder                                   97.1%
  WorkflowFramework.Extensions.Approvals.Email.SmtpEmailSender                                       53.8%

WorkflowFramework.Extensions.Approvals.Slack                                                         77.4%
  WorkflowFramework.Extensions.Approvals.Slack.Blocks.SlackBlockKitBuilder                             74%
  WorkflowFramework.Extensions.Approvals.Slack.DependencyInjection.SlackApprovalsBuilderExtensions    100%
  WorkflowFramework.Extensions.Approvals.Slack.SlackApprovalChannel                                  92.4%
  WorkflowFramework.Extensions.Approvals.Slack.SlackApprovalOptions                                   100%
  WorkflowFramework.Extensions.Approvals.Slack.SlackApprovalOptionsValidator                          100%
  WorkflowFramework.Extensions.Approvals.Slack.SlackEndpointExtensions                                  0%
  WorkflowFramework.Extensions.Approvals.Slack.SlackInteractionResult                                 100%
  WorkflowFramework.Extensions.Approvals.Slack.SlackInteractivityHandler                             88.2%
  WorkflowFramework.Extensions.Approvals.Slack.SlackSignatureValidator                               87.5%

WorkflowFramework.Extensions.Approvals.Teams                                                           84%
  WorkflowFramework.Extensions.Approvals.Teams.Cards.AdaptiveCardBuilder                              100%
  WorkflowFramework.Extensions.Approvals.Teams.DependencyInjection.TeamsApprovalsBuilderExtensions    100%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsApprovalChannel                                  73.2%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsApprovalOptions                                   100%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsApprovalOptionsValidator                         92.3%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsCallbackHandler                                  94.9%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsCallbackResult                                    100%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsCallbackTokenService                             94.4%
  WorkflowFramework.Extensions.Approvals.Teams.TeamsEndpointExtensions                                  0%

WorkflowFramework.Extensions.Configuration                                                           90.5%
  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                               88.1%
  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                                                               95%
  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                            100%
  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                          100%
  WorkflowFramework.Extensions.DataMapping.Transformers.ConditionalTransformer                        100%
  WorkflowFramework.Extensions.DataMapping.Transformers.DateFormatTransformer                        90.9%
  WorkflowFramework.Extensions.DataMapping.Transformers.DefaultValueTransformer                       100%
  WorkflowFramework.Extensions.DataMapping.Transformers.NumberFormatTransformer                       100%
  WorkflowFramework.Extensions.DataMapping.Transformers.RegexReplaceTransformer                      87.5%
  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                                                             99.2%
  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         100%
  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.Distributed.Redis                                                        100%
  WorkflowFramework.Extensions.Distributed.Redis.RedisDistributedLock                                 100%
  WorkflowFramework.Extensions.Distributed.Redis.RedisWorkflowQueue                                   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                                                               98%
  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                             82.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                                                              94.8%
  WorkflowFramework.Extensions.Scheduling.ApprovalConfig                                              100%
  WorkflowFramework.Extensions.Scheduling.CronParser                                                 97.3%
  WorkflowFramework.Extensions.Scheduling.InMemoryApprovalService                                     100%
  WorkflowFramework.Extensions.Scheduling.InMemoryWorkflowScheduler                                  92.3%
  WorkflowFramework.Extensions.Scheduling.ScheduledWorkflow                                           100%

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

WorkflowFramework.Serialization                                                                      98.9%
  WorkflowFramework.Serialization.StepDefinitionDto                                                   100%
  WorkflowFramework.Serialization.StepInspector                                                      96.8%
  WorkflowFramework.Serialization.WorkflowCanvasDto                                                   100%
  WorkflowFramework.Serialization.WorkflowCanvasEdgeDto                                               100%
  WorkflowFramework.Serialization.WorkflowCanvasNodeDto                                               100%
  WorkflowFramework.Serialization.WorkflowDefinitionDto                                               100%
  WorkflowFramework.Serialization.WorkflowSerializer                                                  100%
  WorkflowFramework.Serialization.YamlReader                                                          100%
  WorkflowFramework.Serialization.YamlWriter                                                          100%

WorkflowFramework.Testing                                                                            99.2%
  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                                                      96.1%

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.74%. Comparing base (7c7417e) to head (df3617a).

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #24      +/-   ##
==========================================
+ Coverage   87.34%   89.74%   +2.40%     
==========================================
  Files         291      291              
  Lines        8280     8280              
  Branches     1496     1496              
==========================================
+ Hits         7232     7431     +199     
+ Misses        712      524     -188     
+ Partials      336      325      -11     
Flag Coverage Δ
unittests 89.74% <ø> (+2.40%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@JerrettDavis JerrettDavis merged commit 437fd48 into main May 23, 2026
6 checks passed
@JerrettDavis JerrettDavis deleted the feat/phase-i-coverage-tightening branch May 23, 2026 01:25
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.

2 participants