Skip to content

.NET: [Feature Branch] Add Human In the Loop support for durable workflows#4358

Merged
kshyju merged 12 commits intofeat/durable_taskfrom
shkr/feat_durable_task_hitl
Mar 3, 2026
Merged

.NET: [Feature Branch] Add Human In the Loop support for durable workflows#4358
kshyju merged 12 commits intofeat/durable_taskfrom
shkr/feat_durable_task_hitl

Conversation

@kshyju
Copy link
Copy Markdown
Contributor

@kshyju kshyju commented Feb 27, 2026

Motivation and Context

This PR introduces Human-in-the-Loop (HITL) support for durable workflows. It allows workflows to pause at defined checkpoints and wait for external input, enabling scenarios such as approval processes, human reviews, and other interactive decision-making workflows.

Note: This PR targets the feat/durable_task feature branch.

Key scenarios enabled:

  • Pausing workflow execution at a RequestPort to wait for external input (e.g., manager approval)
  • Streaming DurableWorkflowWaitingForInputEvent to callers so they can discover what input is needed
  • Resuming workflows by sending typed responses via SendResponseAsync or HTTP endpoints
  • Multiple sequential HITL pause points in a single workflow (e.g., manager approval → finance approval)
  • Auto-generated HTTP endpoints for HITL responses (and optional status queries) in Azure Functions

Description

This PR introduces RequestPort-based HITL support for durable workflows, with both a streaming client API and auto-generated HTTP endpoints for Azure Functions hosting.

New Public APIs

API Description
IStreamingWorkflowRun.SendResponseAsync Sends a typed response to a DurableWorkflowWaitingForInputEvent to resume the workflow.
DurableWorkflowWaitingForInputEvent Event yielded when the workflow is paused at a RequestPort. Contains the serialized input and the RequestPort definition.
DurableWorkflowWaitingForInputEvent.GetInputAs<T>() Deserializes the request input to a typed object.
DurableWorkflowOptionsExtensions.AddWorkflow(workflow, exposeStatusEndpoint) Extension method (Azure Functions) to register a workflow with an optional status endpoint.
// Define a workflow with a RequestPort (MAF core Workflow API — not new in this PR)
CreateApprovalRequest createRequest = new();
RequestPort<ApprovalRequest, ApprovalResponse> managerApproval =
    RequestPort.Create<ApprovalRequest, ApprovalResponse>("ManagerApproval");
ExpenseReimburse reimburse = new();

// Build the workflow: CreateApprovalRequest -> ManagerApproval (HITL) -> ExpenseReimburse
Workflow expenseApproval = new WorkflowBuilder(createRequest)
    .WithName("ExpenseReimbursement")
    .AddEdge(createRequest, managerApproval)
    .AddEdge(managerApproval, reimburse)
    .Build();
// Start a workflow with streaming and handle HITL pauses
IStreamingWorkflowRun run = await workflowClient.StreamAsync(workflow, "EXP-2025-001");

await foreach (WorkflowEvent evt in run.WatchStreamAsync())
{
    switch (evt)
    {
        case DurableWorkflowWaitingForInputEvent requestEvent:
            ApprovalRequest? request = requestEvent.GetInputAs<ApprovalRequest>();
            await run.SendResponseAsync(requestEvent, new ApprovalResponse(Approved: true));
            break;
        case DurableWorkflowCompletedEvent e:
            Console.WriteLine($"Completed: {e.Result}");
            break;
    }
}

Azure Functions Auto-Generated Endpoints

When a workflow contains RequestPort nodes, the framework auto-generates a respond endpoint. A status endpoint is also available via opt-in.

Method Endpoint Description
POST /api/workflows/{name}/respond/{runId} Send a response to resume the workflow (auto-generated when workflow has RequestPort nodes)
GET /api/workflows/{name}/status/{runId} Query workflow status and pending HITL requests (opt-in via exposeStatusEndpoint: true)
// Azure Functions: register workflow with status endpoint enabled
builder.ConfigureDurableWorkflows(workflows =>
    workflows.AddWorkflow(expenseApproval, exposeStatusEndpoint: true));

Internal Infrastructure Changes

Component Description
DurableExecutorDispatcher New ExecuteRequestPortAsync method that publishes pending request to DurableWorkflowLiveStatus, waits for external event via WaitForExternalEvent, and cleans up on response.
DurableWorkflowLiveStatus Holds both streaming events and a PendingEvents list for HITL signaling. Includes a shared TryParse method for deserialization.
DurableStreamingWorkflowRun Monitors PendingEvents in the durable workflow status and yields DurableWorkflowWaitingForInputEvent for each new pending request. Implements SendResponseAsync via RaiseEventAsync.
DurableWorkflowRunner Carries DurableWorkflowLiveStatus on SuperstepState for consistent status updates across dispatch and result processing.
ServiceCollectionExtensions Excludes RequestPortBinding from activity registration (handled as external events).
FunctionsDurableOptions Extends DurableOptions with Azure Functions–specific configuration (status endpoint opt-in).
BuiltInFunctions New GetWorkflowStatusAsync and RespondToWorkflowAsync HTTP handlers with input validation.
BuiltInFunctionExecutor Dispatch cases for the new HITL HTTP entry points.
DurableWorkflowsFunctionMetadataTransformer Auto-registers status (opt-in) and respond (when RequestPort nodes present) HTTP triggers.
FunctionMetadataFactory Added methods parameter to CreateHttpTrigger for GET endpoints.

How HITL Works

When the workflow reaches a RequestPort executor, the orchestration:

  1. Adds a PendingRequestPortStatus entry to DurableWorkflowLiveStatus.PendingEvents
  2. Publishes the status via SetCustomStatus so external clients can discover pending requests
  3. Waits on WaitForExternalEvent until the response arrives
  4. Removes the pending entry and continues execution

External actors respond via:

  • Streaming API: Call run.SendResponseAsync(requestEvent, response) after receiving a DurableWorkflowWaitingForInputEvent
  • HTTP API: POST to /api/workflows/{name}/respond/{runId} with {"eventName": "...", "response": {...}}

Validation/Testing

Samples Added:

Sample Description
08_WorkflowHITL (Console) Demonstrates two sequential HITL approval points (manager → finance) with streaming event observation. No Azure OpenAI required.
03_WorkflowHITL (Azure Functions) Demonstrates HITL with auto-generated HTTP endpoints for status queries and responses. Includes demo.http for testing. No Azure OpenAI required.

Integration Tests Added:

Test Description
WorkflowHITLSampleValidationAsync (Console) Validates the two-step HITL flow: manager approval → finance approval → completion.
HITLWorkflowSampleValidationAsync (Azure Functions) Validates the HTTP-based HITL flow: start workflow → wait for pause → send approval → verify completion.

Both samples have been manually verified against the local DTS emulator.

Contribution Checklist

  • The code builds clean without any errors or warnings
  • The PR follows the Contribution Guidelines
  • All unit tests pass, and I have added new tests where possible
  • Is this a breaking change? No

Add 06_WorkflowHITL Azure Functions sample demonstrating Human-in-the-Loop
workflow support with HTTP endpoints for status checking and approval responses.

The sample includes:
- ExpenseReimbursement workflow with RequestPort for manager approval
- Custom HTTP endpoint to check workflow status and pending approvals
- Custom HTTP endpoint to send approval responses via RaiseEventAsync
- demo.http file with step-by-step interaction examples
@kshyju kshyju requested a review from Copilot February 27, 2026 19:20
@markwallace-microsoft markwallace-microsoft added documentation Improvements or additions to documentation .NET labels Feb 27, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds Human-in-the-Loop (HITL) support to durable workflows by pausing at RequestPort nodes, surfacing “waiting for input” signals via streaming/custom status, and enabling resumption via typed responses (streaming API and Azure Functions HTTP endpoints).

Changes:

  • Introduces RequestPort-backed “wait for external input” execution in the DurableTask workflow runner/dispatcher and exposes it via a new DurableWorkflowWaitingForInputEvent + IStreamingWorkflowRun.SendResponseAsync.
  • Adds Azure Functions auto-generated HTTP endpoints for respond (when RequestPorts exist) and optional status (opt-in per workflow).
  • Adds console + Azure Functions samples and integration tests validating HITL flows.

Reviewed changes

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

Show a summary per file
File Description
dotnet/tests/Microsoft.Agents.AI.Hosting.AzureFunctions.IntegrationTests/WorkflowSamplesValidation.cs Adds an integration test that drives the Azure Functions HITL sample via run/respond endpoints and log-based assertions.
dotnet/tests/Microsoft.Agents.AI.DurableTask.IntegrationTests/WorkflowConsoleAppSamplesValidation.cs Adds an integration test that validates the console HITL sample’s sequential approval flow.
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/Workflows/DurableWorkflowsFunctionMetadataTransformer.cs Auto-registers HTTP triggers for status (opt-in) and respond (when RequestPorts exist) per workflow.
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/Workflows/DurableWorkflowOptionsExtensions.cs Adds Azure Functions–specific workflow registration overload (exposeStatusEndpoint).
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/FunctionsDurableOptions.cs Introduces Functions-specific DurableOptions subclass to track per-workflow status-endpoint enablement.
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/FunctionsApplicationBuilderExtensions.cs Ensures shared options instance is the Functions-specific subtype; wires middleware/transformer for new endpoints.
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/FunctionMetadataFactory.cs Extends HTTP trigger metadata creation to support configurable HTTP methods (e.g., GET for status).
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/BuiltInFunctions.cs Adds HTTP handlers for workflow status and responding to pending RequestPorts.
dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/BuiltInFunctionExecutor.cs Routes Azure Functions invocations to the new built-in status/respond handlers.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/PendingRequestPortStatus.cs Defines the serialized durable custom-status representation of a pending RequestPort wait.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/IStreamingWorkflowRun.cs Adds SendResponseAsync API to resume a workflow after a waiting-for-input event.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowWaitingForInputEvent.cs Introduces the streaming event emitted when a workflow is paused at a RequestPort; includes typed input deserialization helper.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowRunner.cs Publishes a richer live status payload (events + pending RequestPorts) into custom status for streaming/polling.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowOptions.cs Exposes parent options via ParentOptions (used for cross-feature coordination).
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowLiveStatus.cs Adds new live-status payload type that includes streamed events + pending RequestPorts and parsing helper.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowJsonContext.cs Updates source-gen JSON context registrations for new live-status/pending-request types.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableWorkflowCustomStatus.cs Removes the prior events-only custom status type (replaced by live status payload).
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableStreamingWorkflowRun.cs Streams both normal workflow events and new waiting-for-input events; implements SendResponseAsync.
dotnet/src/Microsoft.Agents.AI.DurableTask/Workflows/DurableExecutorDispatcher.cs Adds RequestPort dispatch path that writes pending status + waits for external events.
dotnet/src/Microsoft.Agents.AI.DurableTask/ServiceCollectionExtensions.cs Excludes RequestPort binding from activity registration (handled via external events instead).
dotnet/src/Microsoft.Agents.AI.DurableTask/Logs.cs Adds log messages for waiting/received external RequestPort events used by tests and diagnostics.
dotnet/src/Microsoft.Agents.AI.DurableTask/DurableOptions.cs Makes DurableOptions non-sealed to enable hosting-specific extension.
dotnet/samples/Durable/Workflow/ConsoleApps/08_WorkflowHITL/README.md Documents the console HITL sample usage and expected output.
dotnet/samples/Durable/Workflow/ConsoleApps/08_WorkflowHITL/Program.cs Adds the console sample demonstrating sequential RequestPort pauses and streaming resumption.
dotnet/samples/Durable/Workflow/ConsoleApps/08_WorkflowHITL/Executors.cs Adds sample executors and request/response types for the console HITL scenario.
dotnet/samples/Durable/Workflow/ConsoleApps/08_WorkflowHITL/08_WorkflowHITL.csproj Adds the console HITL sample project.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/host.json Adds host configuration for local DTS emulator + logging for the Functions HITL sample.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/demo.http Adds a runnable HTTP script showing run/status/respond flow.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/README.md Documents the Azure Functions HITL sample endpoints and usage.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/Program.cs Adds the Azure Functions sample wiring a workflow with exposeStatusEndpoint: true.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/Executors.cs Adds sample executors and request/response types for the Functions HITL scenario.
dotnet/samples/Durable/Workflow/AzureFunctions/03_WorkflowHITL/03_WorkflowHITL.csproj Adds the Azure Functions HITL sample project.
dotnet/agent-framework-dotnet.slnx Registers the new console and Azure Functions HITL samples in the solution.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 34 out of 34 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

dotnet/src/Microsoft.Agents.AI.Hosting.AzureFunctions/Workflows/DurableWorkflowsFunctionMetadataTransformer.cs:145

  • RequestPort executors are dispatched via external events (not Durable Task activities), but this metadata transformer currently treats any non-agent/non-subworkflow binding as an activity trigger. This will register an activity function for RequestPortBinding executors even though they’re never called and aren’t registered as activities in Microsoft.Agents.AI.DurableTask. Consider skipping RequestPortBinding here (similar to SubworkflowBinding) to avoid generating unused activity triggers and potential confusion.

…gEvents.Add`/`RemoveAll` and `SetCustomStatus` in `ExecuteRequestPortAsync`. The guards broke fan-out scenarios where parallel RequestPorts need to be discoverable after replay. `SetCustomStatus` is idempotent metadata that doesn't affect replay determinism.eanup
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 34 out of 34 changed files in this pull request and generated 1 comment.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

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

Copy link
Copy Markdown
Member

@cgillum cgillum left a comment

Choose a reason for hiding this comment

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

A few initial comments about the samples. Will look at the implementation next.

Copy link
Copy Markdown
Member

@cgillum cgillum left a comment

Choose a reason for hiding this comment

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

Need to sign off for the day, but a couple other small things for now.

Copy link
Copy Markdown
Member

@cgillum cgillum left a comment

Choose a reason for hiding this comment

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

Finished reviewing the changes. Just a few small things.

@kshyju kshyju merged commit ad51aee into feat/durable_task Mar 3, 2026
2 checks passed
@kshyju kshyju mentioned this pull request Mar 3, 2026
4 tasks
@crickman crickman deleted the shkr/feat_durable_task_hitl branch March 16, 2026 17:02
github-merge-queue bot pushed a commit that referenced this pull request Mar 16, 2026
* .NET: [Feature Branch] Add basic durable workflow support (#3648)

* Add basic durable workflow support.

* PR feedback fixes

* Add conditional edge sample.

* PR feedback fixes.

* Minor cleanup.

* Minor cleanup

* Minor formatting improvements.

* Improve comments/documentation on the execution flow.

* .NET: [Feature Branch] Add Azure Functions hosting support for durable workflows (#3935)

* Adding azure functions workflow support.

* - PR feedback fixes.
- Add example to demonstrate complex Object as payload.

* rename instanceId to runId.

* Use custom ITaskOrchestrator to run orchestrator function.

* .NET: [Feature Branch] Adding support for events & shared state in durable workflows (#4020)

* Adding support for events & shared state in durable workflows.

* PR feedback fixes

* PR feedback fixes.

* Add YieldOutputAsync calls to 05_WorkflowEvents sample executors

The integration test asserts that WorkflowOutputEvent is found in the
stream, but the sample executors only used AddEventAsync for custom
events and never called YieldOutputAsync. Since WorkflowOutputEvent is
only emitted via explicit YieldOutputAsync calls, the assertion would
fail. Added YieldOutputAsync to each executor to match the test
expectation and demonstrate the API in the sample.

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

* Fix deserialization to use shared serializer options.

* PR feedback updates.

* Sample cleanup

* PR feedback fixes

* Addressing PR review feedback for DurableStreamingWorkflowRun

   - Use -1 instead of 0 for taskId in TaskFailedException when task ID is not relevant.
   - Add [NotNullWhen(true)] to TryParseWorkflowResult out parameter following .NET TryXXX conventions.

---------

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

* .NET: [Feature Branch]  Add nested sub-workflow support for durable workflows (#4190)

* .NET: [Feature Branch] Add nested sub-workflow support for durable workflows

* fix readme path

* Switch Orchestration output from string to DurableWorkflowResult.

* PR feedback fixes

* Minor cleanup based on PR feedback.

* .NET: [Feature Branch] Add Human In the Loop support for durable workflows (#4358)

* Add Azure Functions HITL workflow sample

Add 06_WorkflowHITL Azure Functions sample demonstrating Human-in-the-Loop
workflow support with HTTP endpoints for status checking and approval responses.

The sample includes:
- ExpenseReimbursement workflow with RequestPort for manager approval
- Custom HTTP endpoint to check workflow status and pending approvals
- Custom HTTP endpoint to send approval responses via RaiseEventAsync
- demo.http file with step-by-step interaction examples

* PR feedback fixes

* Minor comment cleanup

* Minor comment clReverted the `!context.IsReplaying` guards on `PendingEvents.Add`/`RemoveAll` and `SetCustomStatus` in `ExecuteRequestPortAsync`. The guards broke fan-out scenarios where parallel RequestPorts      need to be discoverable after replay. `SetCustomStatus` is idempotent metadata that doesn't affect replay determinism.eanup

* fix  for PR feedback

* PR feedback updates

* Improvements to samples

* Improvements to README

* Update samples to use parallel request ports.

* Unit tests

* Introduce local variables to improve readability of Workflows.Workflows access patter

* Use GitHub-style callouts and add PowerShell command variants in HITL sample README

* Add changelog entries for durable workflow support (#4436)

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

* Bump Microsoft.DurableTask.Worker to 1.19.1 to fix version downgrade

Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.13.1 requires
Microsoft.DurableTask.Worker >= 1.19.1 via its transitive dependency on
Microsoft.DurableTask.Worker.Grpc 1.19.1.

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

* Fix broken markdown links in durable workflow sample READMEs

- Create Workflow/README.md with environment setup docs
- Fix ../README.md -> ../../README.md in ConsoleApps 01, 02, 03, 08
- Fix SubWorkflows relative path (3 levels -> 4 levels up)
- Fix dead Durable Task Scheduler URL

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

* Fix build errors from main merge: Throw conflict, ExecuteAsync rename, GetNewSessionAsync rename

- Remove InjectSharedThrow from DurableTask csproj (uses Workflows' internal Throw via InternalsVisibleTo)
- Update ExecuteAsync -> ExecuteCoreAsync with WorkflowTelemetryContext.Disabled
- Update GetNewSessionAsync -> CreateSessionAsync

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

* Move durable workflow samples to 04-hosting/DurableWorkflows

Aligns with main branch sample reorganization where durable samples
live under 04-hosting/ (alongside DurableAgents/).

- Move samples/Durable/Workflow/ -> samples/04-hosting/DurableWorkflows/
- Add Directory.Build.props matching DurableAgents pattern
- Update slnx project paths
- Update integration test sample paths
- Update README cd paths and cross-references

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

* Fix build errors: remove duplicate base class members, update renamed APIs

- Remove duplicate OutputLog, WriteInputAsync, CreateTestTimeoutCts, etc. from
  ConsoleAppSamplesValidation (already in SamplesValidationBase)
- Update AddFanInEdge -> AddFanInBarrierEdge in workflow samples
- Update GetNewSessionAsync -> CreateSessionAsync in workflow samples
- Update SourceId -> ExecutorId (obsolete) in workflow samples

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

* Fix dotnet format issues: add UTF-8 BOM and remove unused using

- Add UTF-8 BOM to 20 .cs files across DurableTask, AzureFunctions,
  unit tests, and workflow samples
- Remove unnecessary using directive in 07_SubWorkflows/Executors.cs

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

* Fix typo PaymentProcesser -> PaymentProcessor and garbled arrows in README

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

* Fix GetExecutorName to handle agent names with underscores

Split on last underscore instead of first, and validate that the
suffix is a 32-char hex string (sanitized GUID) before stripping it.
This prevents truncation of agent names like 'my_agent' when the
executor ID is 'my_agent_<guid>'.

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

* Align DurableTask.Client.AzureManaged to 1.19.1

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

* Bump DurableTask and Azure Functions extension package versions

- DurableTask.* packages: 1.19.1 -> 1.22.0
- Functions.Worker.Extensions.DurableTask: 1.13.1 -> 1.16.0
- Functions.Worker.Extensions.DurableTask.AzureManaged: 1.0.1 -> 1.5.0 (telemetry bug fix)

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

* Bump DurableTask SDK packages to 1.22.0

- DurableTask.Client: 1.19.1 -> 1.22.0
- DurableTask.Client.AzureManaged: 1.19.1 -> 1.22.0
- DurableTask.Worker: 1.19.1 -> 1.22.0
- DurableTask.Worker.AzureManaged: 1.19.1 -> 1.22.0
- Azure Functions extensions kept at original versions (1.13.1/1.0.1) due to
  host-side DurableTask.Core 3.7.0 incompatibility with newer extensions

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

* Update Microsoft.Azure.Functions.Worker.Extensions.DurableTask to "1.16.0"

* Add the local.settings.json files to the sample which were previously ignored. This aligns with our other samples.

* Increase timeout for tests as CI has them failing transiently.

* increaset timeout value for azure functions integration tests.

* Add YieldsOutput(string) to workflow shared state sample executors

ValidateOrder and EnrichOrder call YieldOutputAsync with string messages,
but only their TOutput (OrderDetails) was in the allowed yield types.
This caused TargetInvocationException in the WorkflowSharedState sample
validation integration test.

* Downgrade the durable packages to 1.18.0

* Downgrading Worker.Extensions.DurableTask to 1.12.1

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation .NET

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants