Skip to content

refactor: iter2 minor — Normalizer/Polling/Idempotent via PatternKit (incl. dedup-on-failure bug fix)#26

Merged
JerrettDavis merged 24 commits into
mainfrom
feat/iter2-minor-refactors
May 23, 2026
Merged

refactor: iter2 minor — Normalizer/Polling/Idempotent via PatternKit (incl. dedup-on-failure bug fix)#26
JerrettDavis merged 24 commits into
mainfrom
feat/iter2-minor-refactors

Conversation

@JerrettDavis
Copy link
Copy Markdown
Owner

Summary

  • NormalizerStepKeyedNormalizer<string,IWorkflowContext,IWorkflowContext> (PatternKit 0.113.0): Bespoke dict-key dispatch replaced; original InvalidOperationException contract preserved by wrapping KeyNotFoundException.
  • PollingConsumerStepAsyncPollingConsumer<T>.PollOnceAsync (PatternKit 0.113.0): Single-shot poll wired via WithSource bridge; ResultKey/IReadOnlyList<T> output contract unchanged.
  • IdempotentReceiverStepIIdempotencyStore claim/complete/fail semantics (PatternKit 0.112.0+): Bug fix — prior bespoke HashSet.Add-before-invoke permanently locked idempotency keys on failure. New behavior: Completed = deduplicated; Failed = retry allowed.

Per-step delta

Step Lines deleted PatternKit primitive
NormalizerStep −10 (dict dispatch absorbed) KeyedNormalizer<string,IWorkflowContext,IWorkflowContext>
PollingConsumerStep −4 (single poll call replaced) AsyncPollingConsumer<T>.PollOnceAsync
IdempotentReceiverStep +83 net (bespoke HashSet replaced by IIdempotencyStore + internal default impl) IIdempotencyStore (TryClaimAsync/MarkCompletedAsync/MarkFailedAsync)

Test changes

Only IdempotentReceiverStep required a test update (the intended behavioral fix):

  • ReAttemptAfterExceptionIsSkippedrenamed ReAttemptAfterExceptionIsAllowed
  • Assertion flipped: inner step call count 12 (retry is now allowed after failure)
  • Comment added explaining the rationale (deliberate bug fix, see .plan/patternkit-iteration-2.md §4)
  • All other characterization tests pass unmodified (26 total across the three suites, 588 total TinyBDD)

Infrastructure note

PatternKit 0.113.0 is resolved from the local-packages feed (C:\git\local-packages) via the project-level NuGet.Config. The package was built from patternkit-iter2 (the feat/keyed-normalizer-poll-once-outbox-ext branch). Once the upstream PatternKit PR is merged and 0.113.0 published to nuget.org, the NuGet.Config can be removed in a follow-up chore commit.


RELEASE NOTE

IdempotentReceiverStep behavior changed (bug fix): Prior to this release, a failure inside the inner step permanently locked the idempotency key, silently suppressing all future retries for that message ID. This was a latent bug — transient infrastructure failures should not permanently lock retry paths. Starting in this release, a failed attempt marks the key as Failed and allows the next invocation with the same ID to proceed (retry). Successfully completed invocations continue to be deduplicated as before. Consumers who intentionally relied on the lock-on-failure behavior can opt back in by injecting a custom IIdempotencyStore that treats Failed status as permanent.

🤖 Generated with Claude Code

JerrettDavis and others added 20 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>
Consumes the new primitives introduced in 0.113.0:
- KeyedNormalizer<TKey,TRaw,TCanonical>
- AsyncPollingConsumer<T>.PollOnceAsync
- (IdempotentReceiver<TPayload,TResult> already in 0.112.0)

Adds NuGet.Config to resolve 0.113.0 from the local-packages feed
until the release is published to nuget.org.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…NormalizerStep

Replace bespoke dictionary dispatch with KeyedNormalizer<string,IWorkflowContext,IWorkflowContext>.
The KeyedNormalizer provides O(1) keyed dispatch identical in semantics to the prior dictionary
lookup. The original InvalidOperationException contract is preserved by wrapping KeyNotFoundException
from the PatternKit miss path, keeping the test UnknownFormatNoDefaultThrows stable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
….PollOnceAsync in PollingConsumerStep

Replace bespoke single-shot poll with AsyncPollingConsumer<IReadOnlyList<T>>.PollOnceAsync.
The IPollingSource<T> is bridged via the WithSource delegate; PollOnceAsync handles one
poll cycle without entering the continuous run loop. The ResultKey write contract and
IReadOnlyList<T> output type are preserved. Public step API is unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
BEHAVIOR CHANGE: Previously, a step failure permanently locked the
idempotency key, preventing retries. This was a latent bug — failure
should not lock future attempts. PatternKit's claim/complete/fail
semantics correctly allow retry after failure.

IdempotentReceiverStep now uses IIdempotencyStore (PatternKit interface)
with claim → invoke → MarkCompleted/MarkFailed semantics. The default
store (RetryAfterFailureIdempotencyStore) resets a Failed key to
Processing on the next TryClaim, allowing retry. A Completed key is
still suppressed, preserving the successful-dedup contract.

Test `ReAttemptAfterExceptionIsSkipped` renamed to
`ReAttemptAfterExceptionIsAllowed` with assertion flipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…o Adopted

Records the Iteration 2 Phase 2 adoptions:
- NormalizerStep → KeyedNormalizer<string,IWorkflowContext,IWorkflowContext>
- PollingConsumerStep → AsyncPollingConsumer<T>.PollOnceAsync
- IdempotentReceiverStep → IIdempotencyStore (with IdempotentReceiverStep bug fix noted)

Updates Future Evaluation Targets to reflect remaining deferred items (Phase 3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…otstrap

The 0.113.0 release is not yet published to nuget.org (it ships from the
feat/keyed-normalizer-poll-once-outbox-ext branch). To unblock CI, bundle
the pre-built .nupkg in eng/local-feed/ and point NuGet.Config at it via
a relative path. Remove eng/local-feed/ and NuGet.Config once the upstream
PatternKit release is published.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented May 23, 2026

Codecov Report

❌ Patch coverage is 93.58974% with 5 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.81%. Comparing base (ca55fbb) to head (33585c5).

Files with missing lines Patch % Lines
...sions.Integration/Transformation/NormalizerStep.cs 88.46% 3 Missing ⚠️
...ons.Integration/Endpoint/IdempotentReceiverStep.cs 97.56% 0 Missing and 1 partial ⚠️
...nsions.Integration/Endpoint/PollingConsumerStep.cs 90.90% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #26      +/-   ##
==========================================
+ Coverage   89.78%   89.81%   +0.02%     
==========================================
  Files         291      291              
  Lines        8282     8342      +60     
  Branches     1496     1502       +6     
==========================================
+ Hits         7436     7492      +56     
- Misses        522      524       +2     
- Partials      324      326       +2     
Flag Coverage Δ
unittests 89.81% <93.58%> (+0.02%) ⬆️

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 and others added 3 commits May 22, 2026 23:33
…storePackagesWithLockFile=false

The --force-evaluate restore generated packages.lock.json files for
Approvals.Acceptance and Approvals.Integration.Tests, which have
RestorePackagesWithLockFile=false. Committing them caused NU1005 on
the CodeQL workflow. Remove from index and add to .gitignore.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PatternKit.Core 0.113.0 is now published to NuGet.org. The local
nupkg + NuGet.Config workaround introduced earlier in this branch
is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…n NuGet.org

The local nupkg bundled in eng/local-feed had a different content hash
than the package published to NuGet.org. Update all 91 packages.lock.json
files so NU1403 hash validation passes against the official feed.

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

Code Coverage

Summary
  Generated on: 05/23/2026 - 05:08:49
  Coverage date: 05/23/2026 - 05:07:17 - 05/23/2026 - 05:08:44
  Parser: MultiReport (101x Cobertura)
  Assemblies: 43
  Classes: 395
  Files: 291
  Line coverage: 93.6%
  Covered lines: 7816
  Uncovered lines: 526
  Coverable lines: 8342
  Total lines: 23600
  Branch coverage: 85.3% (3217 of 3767)
  Covered branches: 3217
  Total branches: 3767
  Method coverage: 97.8% (1807 of 1847)
  Full method coverage: 93.2% (1723 of 1847)
  Covered methods: 1807
  Fully covered methods: 1723
  Total methods: 1847

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.7%
  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.6%
  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.9%
  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.6%
  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                                                             97.6%
  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                             91.6%

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%

@JerrettDavis JerrettDavis merged commit ccdaa97 into main May 23, 2026
6 checks passed
@JerrettDavis JerrettDavis deleted the feat/iter2-minor-refactors branch May 23, 2026 05:26
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