test(phase-i): coverage tightening — fill serialization, agents, configuration, dashboard, approvals gaps#24
Merged
Conversation
… 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>
Code Coverage |
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
AgentLoopStepScenarios.csDslEmitterStepScenarios.csScatterGatherStepScenarios.cs(expanded)SerializationScenarios.csWorkflowDefinitionBuilderScenarios.csExecutionHistoryBuilderExtensionsScenarios.csWorkflowTestHarnessTests.csApprovalRehydrationHostedServiceTests.csInMemoryApprovalStoreTests.csMultiChannelApprovalServiceTests.csNamedChannelRouterTests.csPersistentApprovalServiceTests.csSingleChannelRouterTests.csDashboardServiceCollectionExtensionsTests.csDocumentation
docs/patternkit-adoption.md— PatternKit adoption inventory: 3 adoptions documented (WorkflowSpec/Specification, WorkflowStatusMachine/StateMachine, ContentBasedRouterStep/AsyncActionStrategy), 14 intentionally bespoke EIP steps notedKey coverage improvements (core assemblies)
Technical notes
Task.Delay(500)instead ofTask.Delay(Timeout.Infinite)to avoid test-host orphan processesHookResultfactory methods:DenyResult(), notDeny()IAgentHook.ExecuteAsyncsignature:(AgentHookEvent hookEvent, HookContext context, CancellationToken ct)Test plan
WorkflowDefinitionBuilderScenarios.cs— 29 scenarios covering all step types and edge casesAgentLoopStepScenarios.cs— 14 scenarios including checkpoint, hook deny, tool calls, compactionDashboardServiceCollectionExtensionsTests.cs— null guard and DI registration🤖 Generated with Claude Code