Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
357815d
Initial plan
Copilot Mar 20, 2026
7592edf
Initial plan
Copilot Mar 20, 2026
753a6c6
feat: YAML workflow definition format with full step type parity and …
Copilot Mar 20, 2026
835f71c
fix: address review feedback - catch handlers, parallel composite ste…
Copilot Mar 20, 2026
a28c10c
fix: build catch workflows eagerly, unique parallel branch names, isL…
Copilot Mar 21, 2026
2413f0f
fix: conditional branch naming, approval class key, exception type ca…
Copilot Mar 21, 2026
9f66196
Merge remote-tracking branch 'origin/main' into copilot/add-yaml-work…
Copilot May 8, 2026
d9992cd
fix: ResolveExceptionType guard non-Exception types, BuildStepsAsGrou…
Copilot May 8, 2026
b73240d
fix: ReflectionTypeLoadException guard in GetTypes, dead code in Reso…
Copilot May 8, 2026
f99ff8b
fix: approval fallback records TimeoutMinutes, NamedStep implements I…
Copilot May 8, 2026
70fe45e
fix: store TimeoutMinutes only when configured, avoiding null/zero am…
Copilot May 8, 2026
bea9794
fix: apply StepDefinition.Name to all step types; split NamedStep/Nam…
Copilot May 8, 2026
62b06e0
feat: YAML workflow definition format with full step type parity
Copilot May 8, 2026
e182fab
fix: apply ApplyName to BuildParallelStep via temp-builder pattern
Copilot May 8, 2026
00c9c33
fix: apply ApplyName to BuildConditionalStep and BuildSagaStep
Copilot May 8, 2026
2b65dfe
fix: apply ApplyName to all legacy format builder paths
Copilot May 9, 2026
f2fae34
fix: use conditionKey as default name for unnamed conditionals; regen…
Copilot May 9, 2026
3189d49
chore: regenerate lock files to remove System.Text.Json version mismatch
Copilot May 11, 2026
e6717a1
fix: apply review items from pullrequestreview-4266550008
Copilot May 11, 2026
42df156
fix: InlineWorkflowStep propagates failure; TimeoutStepWrapper uses w…
Copilot May 11, 2026
4b4ffef
fix: propagate catch-workflow failures, observe abandoned timeout tas…
Copilot May 11, 2026
c315853
fix: timeout race guard, saga unique name, Loop doc contract
Copilot May 12, 2026
c3ecd58
Agent-Logs-Url: https://github.com/JerrettDavis/WorkflowFramework/ses…
Copilot May 12, 2026
edcedbc
fix: opt Aspire AppHost and UITests out of lock-file enforcement to p…
Copilot May 12, 2026
ca0a820
fix: unique default names for ForEach/While/DoWhile/TryCatch/Saga ste…
Copilot May 12, 2026
ae221ea
refactor: extract GetStepIdentifier helper; fix Type() key format whe…
Copilot May 12, 2026
15b03d9
fix: build parallel branches directly to preserve WorkflowStatus.Faul…
Copilot May 12, 2026
277e732
feat: YAML workflow definition format with full step type parity
Copilot May 12, 2026
23dd913
fix: BuildSubWorkflowStep requires subWorkflow/class key and throws o…
Copilot May 12, 2026
4606025
fix: improve BuildSubWorkflowStep error message when subworkflows is …
Copilot May 12, 2026
2821f16
fix: pass stepName (stepDef.Name ?? conditionKey) into ApplyName in B…
Copilot May 12, 2026
c608669
fix: remove stale System.Text.Json CentralTransitive entries from Sam…
Copilot May 12, 2026
7601b29
fix: remove stale CentralTransitive lock file entries with resolved <…
Copilot May 12, 2026
ddef691
fix: restore CentralTransitive entries removed in 7601b29 that broke …
Copilot May 12, 2026
e5c5238
fix: clamp maxAttempts>=1, support then/else list aliases in YAML con…
Copilot May 12, 2026
a3cff18
chore: remove misleading comment and clarify test comment
Copilot May 12, 2026
3bc21f3
fix: add --no-restore to dotnet test to prevent NU1005 from AppHost/U…
Copilot May 12, 2026
7006920
fix: remove accidentally committed AppHost/UITests lock files (Restor…
Copilot May 12, 2026
8d06e8e
fix: gitignore AppHost/UITests lock files to prevent future accidenta…
Copilot May 12, 2026
6bb107e
fix: gate OCE→TimeoutException conversion on wrapper's own CTS in Tim…
Copilot May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ jobs:
run: |
dotnet test WorkflowFramework.slnx \
--configuration Release \
--no-restore \
--filter "Category!=E2E&Category!=UI" \
--collect:"XPlat Code Coverage" \
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \
Expand Down Expand Up @@ -159,6 +160,7 @@ jobs:
run: |
dotnet test WorkflowFramework.slnx \
--configuration Release \
--no-restore \
--filter "Category!=E2E&Category!=UI" \
--collect:"XPlat Code Coverage" \
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,8 @@ docs/api/
*.db
*.db-shm
*.db-wal

# Aspire AppHost and UITests use RestorePackagesWithLockFile=false; exclude their
# ephemeral lock files that --use-lock-file can create at restore time.
src/WorkflowFramework.Dashboard.AppHost/packages.lock.json
tests/WorkflowFramework.Dashboard.UITests/packages.lock.json
77 changes: 72 additions & 5 deletions benchmarks/WorkflowFramework.Benchmarks/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@
"resolved": "4.14.0",
"contentHash": "PC3tuwZYnC+idaPuoC/AZpEdwrtX7qFpmnrfQkgobGIWiYmGi5MCRtl5mx6QrfMGQpK78X2lfIEoZDLg/qnuHg==",
"dependencies": {
"Microsoft.CodeAnalysis.Analyzers": "3.11.0"
"Microsoft.CodeAnalysis.Analyzers": "3.11.0",
"System.Collections.Immutable": "9.0.0",
"System.Reflection.Metadata": "9.0.0"
}
},
"Microsoft.Diagnostics.NETCore.Client": {
Expand All @@ -85,7 +87,12 @@
"contentHash": "/OrJFKaojSR6TkUKtwh8/qA9XWNtxLrXMqvEb89dBSKCWjaGVTbKMYodIUgF5deCEtmd6GXuRerciXGl5bhZ7Q==",
"dependencies": {
"Microsoft.Diagnostics.NETCore.Client": "0.2.510501",
"System.Reflection.TypeExtensions": "4.7.0"
"Microsoft.Win32.Registry": "5.0.0",
"System.Collections.Immutable": "8.0.0",
"System.Reflection.Metadata": "8.0.0",
"System.Reflection.TypeExtensions": "4.7.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Json": "8.0.5"
}
},
"Microsoft.DotNet.PlatformAbstractions": {
Expand Down Expand Up @@ -126,19 +133,34 @@
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0"
"Microsoft.Extensions.Options": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.3",
"contentHash": "GEcpTwo7sUoLGGNTqV1FZEuL+tTD9m81NX/mh099dqGNna07/UGZShKQNZRw4hv6nlliSUwYQgSYc7OR99Jufg=="
},
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"Microsoft.Win32.Registry": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"Perfolizer": {
"type": "Transitive",
"resolved": "0.6.1",
Expand All @@ -157,6 +179,11 @@
"resolved": "9.0.5",
"contentHash": "cuzLM2MWutf9ZBEMPYYfd0DXwYdvntp7VCT6a/wvbKCa2ZuvGmW74xi+YBa2mrfEieAXqM4TNKlMmSnfAfpUoQ=="
},
"System.Collections.Immutable": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w=="
},
"System.Management": {
"type": "Transitive",
"resolved": "9.0.5",
Expand All @@ -165,11 +192,35 @@
"System.CodeDom": "9.0.5"
}
},
"System.Reflection.Metadata": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "ANiqLu3DxW9kol/hMmTWbt3414t9ftdIuiIU7j80okq2YzAueo120M442xk1kDJWtmZTqWQn7wHDvMRipVOEOQ=="
},
"System.Reflection.TypeExtensions": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
},
"System.Security.AccessControl": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
},
"workflowframework": {
"type": "Project",
"dependencies": {
Expand All @@ -181,6 +232,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )",
"System.Diagnostics.DiagnosticSource": "[10.0.3, )",
"WorkflowFramework": "[1.0.0, )"
}
},
Expand All @@ -197,7 +249,9 @@
"contentHash": "568a6wcTivauIhbeWcCwfWwIn7UV7MeHEBvFB2uzGIpM2OhJ4eM/FZ8KS0yhPoNxnSpjGzz7x7CIjTxhslojQA==",
"dependencies": {
"Microsoft.CodeAnalysis.Analyzers": "3.11.0",
"Microsoft.CodeAnalysis.Common": "[4.14.0]"
"Microsoft.CodeAnalysis.Common": "[4.14.0]",
"System.Collections.Immutable": "9.0.0",
"System.Reflection.Metadata": "9.0.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
Expand All @@ -206,7 +260,8 @@
"resolved": "6.0.0",
"contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0"
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
Expand Down Expand Up @@ -246,6 +301,18 @@
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.3",
"Microsoft.Extensions.Primitives": "10.0.3"
}
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.3, )",
"resolved": "10.0.3",
"contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A=="
},
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.1, )",
"resolved": "8.0.5",
"contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg=="
}
},
"net8.0": {
Expand Down
24 changes: 22 additions & 2 deletions samples/WorkflowFramework.Samples.TaskStream/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@
"dependencies": {
"Microsoft.Extensions.AI.Abstractions": "10.0.1",
"OpenAI": "2.7.0",
"System.Memory.Data": "10.0.0"
"System.Memory.Data": "10.0.0",
"System.Text.Json": "10.0.0"
}
},
"Microsoft.Extensions.Caching.Abstractions": {
Expand Down Expand Up @@ -222,7 +223,8 @@
"resolved": "2.7.0",
"contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==",
"dependencies": {
"System.ClientModel": "1.8.1"
"System.ClientModel": "1.8.1",
"System.Net.ServerSentEvents": "9.0.9"
}
},
"System.ClientModel": {
Expand All @@ -239,6 +241,11 @@
"resolved": "10.0.0",
"contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q=="
},
"System.Net.ServerSentEvents": {
"type": "Transitive",
"resolved": "9.0.9",
"contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw=="
},
"System.Numerics.Tensors": {
"type": "Transitive",
"resolved": "10.0.2",
Expand Down Expand Up @@ -269,6 +276,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "[10.0.3, )",
"System.Diagnostics.DiagnosticSource": "[10.0.3, )",
"WorkflowFramework": "[1.0.0, )"
}
},
Expand Down Expand Up @@ -300,6 +308,18 @@
"Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0",
"Microsoft.SemanticKernel.Core": "1.71.0"
}
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.3, )",
"resolved": "10.0.3",
"contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A=="
},
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.1, )",
"resolved": "10.0.0",
"contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw=="
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@
"dependencies": {
"Microsoft.Extensions.AI.Abstractions": "10.0.1",
"OpenAI": "2.7.0",
"System.Memory.Data": "10.0.0"
"System.Memory.Data": "10.0.0",
"System.Text.Json": "10.0.0"
}
},
"Microsoft.Extensions.Caching.Abstractions": {
Expand Down Expand Up @@ -222,7 +223,8 @@
"resolved": "2.7.0",
"contentHash": "zodE/lrDzSUxgFzuHP+fiR56VBQZyy3H7le8VH9fiuB8SCgs7YSKpK/pwSpYZln3HVX6RyPDuALIOVPQMhnRFQ==",
"dependencies": {
"System.ClientModel": "1.8.1"
"System.ClientModel": "1.8.1",
"System.Net.ServerSentEvents": "9.0.9"
}
},
"System.ClientModel": {
Expand All @@ -239,6 +241,11 @@
"resolved": "10.0.0",
"contentHash": "r+m+05b+TndDQIN6/yMkotk7wNsUPpYgLKOac8QR9DdU9gcPTJIU1RoyXY8otCqPxH55XF4hewEt6lJu0lSz3Q=="
},
"System.Net.ServerSentEvents": {
"type": "Transitive",
"resolved": "9.0.9",
"contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw=="
},
"System.Numerics.Tensors": {
"type": "Transitive",
"resolved": "10.0.2",
Expand All @@ -255,6 +262,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "[10.0.3, )",
"System.Diagnostics.DiagnosticSource": "[10.0.3, )",
"WorkflowFramework": "[1.0.0, )",
"WorkflowFramework.Extensions.AI": "[1.0.0, )"
}
Expand Down Expand Up @@ -313,6 +321,18 @@
"Microsoft.SemanticKernel.Connectors.AzureOpenAI": "1.71.0",
"Microsoft.SemanticKernel.Core": "1.71.0"
}
},
"System.Diagnostics.DiagnosticSource": {
"type": "CentralTransitive",
"requested": "[10.0.3, )",
"resolved": "10.0.3",
"contentHash": "IuZXyF3K5X+mCsBKIQ87Cn/V4Nyb39vyCbzfH/AkoneSWNV/ExGQ/I0m4CEaVAeFh9fW6kp2NVObkmevd1Ys7A=="
},
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.1, )",
"resolved": "10.0.0",
"contentHash": "1Dpjwq9peG/Wt5BNbrzIhTpclfOSqBWZsUO28vVr59yQlkvL5jLBWfpfzRmJ1OY+6DciaY0DUcltyzs4fuZHjw=="
}
}
}
Expand Down
Loading
Loading