Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into standalone StellaOps.Workflow.* libraries targeting net10.0. Libraries (14): - Contracts, Abstractions (compiler, decompiler, expression runtime) - Engine (execution, signaling, scheduling, projections, hosted services) - ElkSharp (generic graph layout algorithm) - Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg - Signaling.Redis, Signaling.OracleAq - DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle WebService: ASP.NET Core Minimal API with 22 endpoints Tests (8 projects, 109 tests pass): - Engine.Tests (105 pass), WebService.Tests (4 E2E pass) - Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests - Signaling.Redis.Tests, IntegrationTests.Shared Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tutorial 2: Service Tasks
Call external services (microservices, HTTP APIs, GraphQL, RabbitMQ) from within a workflow. Handle failures and timeouts gracefully.
Concepts Introduced
.Call()— invoke a transport with payload and optional response capture- Address types —
LegacyRabbit,Microservice,Http,Graphql,Rabbit resultKey— store the service response in workflow statewhenFailure/whenTimeout— recovery branchesWorkflowHandledBranchAction.Complete— shorthand for "complete on error"timeoutSeconds— per-step timeout override (default: 1 hour)
Key Points
- Each
Callstep executes synchronously within the workflow - The per-step timeout wraps the entire call including transport-level retries
- Transport timeouts (30s default) control individual attempt duration
- If no failure/timeout handler is defined, the error propagates and the signal pump retries
Variants
Next
Tutorial 3: Decisions — branch workflow logic based on conditions.