Workable.AspNetCore 1.1.81126.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Workable.AspNetCore --version 1.1.81126.1
                    
NuGet\Install-Package Workable.AspNetCore -Version 1.1.81126.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Workable.AspNetCore" Version="1.1.81126.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Workable.AspNetCore" Version="1.1.81126.1" />
                    
Directory.Packages.props
<PackageReference Include="Workable.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Workable.AspNetCore --version 1.1.81126.1
                    
#r "nuget: Workable.AspNetCore, 1.1.81126.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Workable.AspNetCore@1.1.81126.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Workable.AspNetCore&version=1.1.81126.1
                    
Install as a Cake Addin
#tool nuget:?package=Workable.AspNetCore&version=1.1.81126.1
                    
Install as a Cake Tool

Workable

Workable is a .NET work orchestration library for applications that need more than "run this in the background." It turns background jobs, operational tasks, recurring work, and user-triggered actions into first-class work the host can queue, observe, control, and configure.

Most applications eventually grow work that does not fit cleanly inside the request, controller action, message handler, or command that started it. Sending email, refreshing caches, synchronizing data, running maintenance tasks, retrying transient failures, and coordinating long-running operations all need identity, state, cancellation, status, events, and a way to be found later. Workable gives that work a consistent runtime model instead of leaving each feature to invent its own.

Workable is useful when you want feature code to define work near the feature that needs it, while the host application keeps control of execution. Feature assemblies can declare their own work with Workable.Sdk. Libraries that need to use a hosted system can depend on Workable.Abstractions and accept IWorkSystem from the host. The host application owns the actual Workable systems, decides which work belongs in each system, and controls how workers start, retry, recur, respect concurrency, and stay available for inspection.

That split lets teams add work near the feature that needs it without forcing every feature library to know how the application hosts work. At runtime, the host gets a consistent surface for queueing work, awaiting completion, pausing, canceling, reconfiguring workers, and subscribing to work events.

Workable also gives applications a path to expose the same authored work through more than one channel. Direct .NET callers, HTTP endpoints, MCP clients, and realtime SignalR clients can all work against the same catalog while preserving request context, structured outcomes, worker history, and invocation rules.

Why Use Workable?

  • Define work once and invoke it through .NET, HTTP, or MCP when those channels are enabled.
  • Register workflow definitions that coordinate existing work through dispatch, typed fan-out, parallel branches, and join steps inside the host runtime.
  • Keep feature libraries independent from the host runtime while still letting them contribute work.
  • Queue fire-and-forget work without losing the ability to query, observe, cancel, pause, retry, or purge it.
  • Give operators a real admin surface for work: live system and worker visibility, executable definitions, diagnostics, and control actions instead of one-off job screens and custom tooling.
  • Attach runtime behavior such as recurrence, transient retry, failed-worker handling, idempotency, concurrency, durability, retention, logging, profiling, initialization, invocation policy, and start policy.
  • Persist short-lived iteration logs and profiles so developers and agents can inspect the work they just ran and answer questions such as how many SQL commands or HTTP requests it executed.
  • Use structured inputs, outputs, messages, worker snapshots, event payloads, and status summaries instead of ad hoc task tracking.
  • Preserve who or what started work through request context and origin metadata for HTTP, MCP, SignalR, and direct .NET calls.

Packages

Core Packages

  • Workable.Sdk: contracts and registration helpers for assemblies that author work.
  • Workable.Abstractions: contracts for libraries that consume an already-hosted work system.
  • Workable: in-process host and runtime for Workable systems.

Optional Packages

  • Workable.SqlServer: SQL Server persistence integration for durable queueing and completion, durable workflows, persistence-backed idempotency and concurrency, and expiring execution diagnostics.
  • Workable.AspNetCore: ASP.NET Core request-context and authorization integration for custom endpoints and hosts.
  • Workable.Entra: Microsoft Entra ID bearer-token validation and Workable authorization claim mapping for ASP.NET Core target apps.
  • Workable.Views: shared component-view contracts and projections used by HTTP and SignalR adapters; most applications receive it transitively through Workable.HttpApi or Workable.SignalR instead of referencing it directly.
  • Workable.HttpApi: standard HTTP endpoints for queueing, querying, and controlling workers and workflow runs.
  • Workable.Mcp: MCP server adapter for authored work, worker and workflow queries, and worker and workflow actions.
  • Workable.SignalR: realtime worker collections, worker and workflow events, worker details, and component-view updates for ASP.NET Core clients.

Apps And Tools

  • apps/samples/Workable.SampleHost: runnable ASP.NET Core sample app with HTTP API, MCP, SignalR, fake-auth profiles, and SQL Server LocalDB durability scenarios.
  • apps/tools/Workable.PerformanceHarness: opt-in scenario runner and BenchmarkDotNet harness for runtime, query, view, realtime, and SQL durability performance work.
  • apps/tools/Workable.SqlServer.Cli: SQL Server schema generation and deployment CLI for Workable persistence.
  • apps/web/workable-admin-ui: Next.js admin UI for inspecting and operating Workable systems through the HTTP API and SignalR realtime updates.

Documentation

Start with the docs landing page: Workable Docs.

Recommended entry points:

  • Getting Started if you are evaluating or integrating Workable.
  • Registration if you are authoring work in feature assemblies.
  • Workflows if you want to author multi-step orchestrations from existing work definitions.
  • Implementation if you want to implement work classes and understand what executor code can do at runtime.
  • Queueing if you already have work definitions and want to invoke them.
  • Configuration if you are tuning start behavior, retry, recurrence, failed-worker handling, concurrency, durability, logging, retention, or invocation rules.
  • Persistent Execution Diagnostics if a developer or agent needs expiring iteration logs, profiles, or SQL/HTTP operation counts from recently executed work.
  • HTTP API, MCP, and Realtime if you are exposing Workable over transports.
  • Abstractions Surface if you are consuming a hosted system from another library.
  • Workable SQL Server Integration if you need durable queueing, durable workflows, persistence-backed coordination, or execution-diagnostics storage.
  • Sample Host if you want a runnable reference app.
  • Admin UI if you want the browser-based operator surface.
  • Performance Harness if you are measuring runtime or adapter performance.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Workable.AspNetCore:

Package Downloads
Workable.Entra

Microsoft Entra ID integration for interpreting host-authenticated actors and authorization claims on Workable ASP.NET Core adapter surfaces.

Workable.SignalR

Expose Workable worker events and component-view updates to ASP.NET Core clients through SignalR.

Workable.HttpApi

Expose standard ASP.NET Core HTTP endpoints for queueing Workable definitions, querying workers, and sending worker actions.

Workable.Mcp

Expose Workable definitions, query tools, and worker action tools through an ASP.NET Core MCP server adapter.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.83126.1 108 9/1/2026
1.1.82326.1 318 8/24/2026
1.1.81126.1 206 8/11/2026
1.1.80926.1 136 8/9/2026
1.1.80726.1 156 8/8/2026
1.1.80526.1 162 8/5/2026
1.1.71926.1 179 7/21/2026
1.1.70926.1 196 7/10/2026
1.1.70626.2 249 7/6/2026
1.1.70626.1 161 7/6/2026
1.1.63026.1 188 6/30/2026
1.1.61226.1 200 6/12/2026
1.1.159.1 230 6/8/2026
1.1.158.1 172 6/7/2026
1.1.157 174 6/7/2026
1.1.153.1 181 6/2/2026
1.1.146.1 382 5/26/2026
1.1.142.3 204 5/23/2026
1.1.0 186 5/22/2026
1.0.0 174 5/21/2026
Loading failed

# 1.1.081126.1

Date: 2026-08-11

## Breaking Changes

- Custom `IWorkConfigurationBuilder` implementations must implement the two new `AllowChildExecution(...)` overloads. Workable's built-in builder already provides them. Child-execution grants are registration-specific and cannot be supplied through `WithWorkDefaults(...)`.
- Workflow-started child input no longer carries the legacy `workflow-definition` or `workflow-step` identifiers. `workflow-run` remains as system-assigned correlation metadata and is now reserved: ordinary and delegated queue requests cannot supply it. Consumers should use typed workflow events, step-event payloads, workflow views, and the trusted `WorkflowRunId` worker projection instead of treating input identifiers as workflow authority.
- SQL schema auto-deployment now treats a database as fresh only when it has no Workable component versions and no known Workable objects. A database containing Workable tables without `SchemaVersion` metadata is rejected as an ambiguous legacy or partial installation and must be repaired or explicitly versioned before upgrade.

## Added

- Added delegated child-work execution. A parent registration can declare explicit `AllowChildExecution(...)` edges and use a scoped `IChildWorkQueueService` to execute those children without granting the initiating caller direct queue permission on the child definitions.
- Added immutable child-execution graph validation. Catalog startup rejects missing child definitions, self-references such as `A -> A`, and cycles such as `A -> B -> A`, while allowing acyclic graphs with shared descendants.
- Added execution-scoped child authority. The child queue accepts only definitions declared by the active parent, retains the initiating actor and origin for audit, and is revoked when the initializer or executor returns. Escaped service references cannot be used after the parent attempt ends.
- Added workflow-native child delegation. `DispatchWork(...)`, `DispatchWorkFromWorkflowInput(...)`, and `DispatchEach(...)` use the accepted workflow execution authority for their declared edges. Workflow pause, resume, and cancel can likewise propagate to that run's own outstanding children without granting the caller general worker-control permission.
- Added system-owned `WorkflowProvenance` containing the run, workflow definition, and step identity. Workable retains it separately from caller-controlled input, persists it through SQL durability, and uses it to validate workflow containment and delegated child control.
- Added trusted `WorkflowRunId` projections to worker snapshots, worker overview responses, SignalR updates, and the admin UI. Authorized child readers can navigate to an associated run without exposing the workflow definition or step provenance used internally for containment checks.
- Added durable failed-worker recovery support to the persistence contract and SQL Server provider. Failed workers retain their failure time and messages, are restored after restart in `Failed` without executing, and resume normal explicit restart, cancellation, and auto-cancel behavior.
- Added typed work-event definition identity through `WorkEventDefinitionKind`, `WorkflowDefinitionId`, and corresponding realtime fields so work and workflow definitions can safely share the same name.

## Changed

- Direct queueing still enforces the target child's ordinary authorization. Delegated execution bypasses only the child's queue authorization and continues to apply input and configuration validation, capacity, concurrency, idempotency, and durability rules.
- Child relationships are frozen with the catalog and cannot be changed by runtime work-definition reconfiguration. `AllowChildExecution(...)` is rejected inside `WithWorkDefaults(...)` with an explanatory exception rather than being inherited broadly.
- Workflow control delegation now requires an authoritative worker snapshot whose system-owned provenance matches the current run, workflow definition, and recorded step membership. A mismatch falls back to the caller's normal authorized worker operations.
- Authorization read fingerprints now include the logical system name, normalized groups, typed readable work and workflow definition ids, diagnostics visibility, and authentication state using length-prefixed hashing.
- Authorization projection reuse now accepts only the exact factory-issued snapshot object for the same system. Cloned, forged, cross-system, actor-mismatched, or otherwise unattested snapshots are recomputed through normal authorization resolution.
- Bulk worker actions now select candidates from the authoritative worker store instead of the eventually consistent read model, authorize against typed definition ids, and execute the captured versions serially. Non-bulk queries and operations retain their existing paths.
- SQL Server schema deployment now installs the complete current schema directly for a new database and otherwise runs only the ordered migrations required by each installed component version. The queue durability upgrade is collapsed into schema version 4, execution diagnostics advances to version 7, and migration scripts contain schema changes plus version metadata only—not application-data rewrites.
- The SQL schema removes deprecated queue state columns from `WorkEntries`, removes obsolete claimed timestamps from `WorkQueueEntries`, and removes unused workflow `UpdatedAt` state. The generated sample schema and runtime/CLI deployment continue to share one source.

## Fixed

- Fixed retained durable failures disappearing from the in-memory control plane after process restart. SQL-backed failures are now leased, restored exactly once, and kept non-executable until an explicit valid action or configured auto-cancel settles them.
- Fixed ready-work notifications and normal reader drains unnecessarily querying failed-worker recovery. Failed recovery now runs during startup and on its own lease-duration interval, keeping the common ready-work path to one claim query.
- Fixed unexpected durability reader, cleanup, failure-retention, and lease-renewal exceptions being hidden or losing retry context. Retry boundaries now record diagnostics and warnings, preserve cancellation behavior, and retry without silently swallowing unexpected failures.
- Fixed durable claim and final-cleanup lock ordering that could deadlock under concurrent SQL activity. Candidate selection and primary-key mutation now use a consistent order, with integration coverage for simultaneous claim and cleanup.
- Fixed retained failed rows remaining in general ready indexes. Ready and persistent-concurrency-ready indexes are now filtered to `Disposition = 'Ready'`, preventing failed-row accumulation from degrading normal claims.
- Fixed startup failures leaving partially prepared workers, materialized durable workers, workflow observers, recovered workflows, automatic starts, or startup-source state behind. Startup cleanup is serialized and reversible, and a later `Start()` can retry from a clean state.
- Fixed workflow and work definitions with the same name sharing event authorization scope. Typed event namespaces and ids now keep their catalog visibility, subscriptions, and realtime groups separate without forbidding same-name registrations.
- Fixed authorization projection caches surviving group, authentication, workflow visibility, diagnostics visibility, or system-scope changes. Cache keys and fingerprints now cover the complete projection inputs.
- Fixed bulk actions missing authoritative workers or acting on stale read-model versions. The bulk-only candidate path now uses current worker records while preserving per-action authorization and optimistic version checks.
- Fixed malformed, blank, and caller-mutated identifiers reaching queue admission. Workable snapshots caller-owned identifier collections before validation and rejects empty identifier types or values and caller-supplied reserved workflow metadata.
- Fixed worker-to-workflow navigation trusting searchable input identifiers. HTTP, SignalR, and the admin UI now use the trusted worker `WorkflowRunId` projection.
- Fixed `UnwatchView` and `UnwatchWorkerOverview` surfacing expected `OperationCanceledException` failures when the SignalR connection had already been aborted. Unwatch now matches the watch methods by suppressing cancellation only when `ConnectionAborted` is cancelled.
- Fixed SQL schema initialization applying every historical migration to a new database, rewriting version metadata for already-current components, or partially upgrading before discovering an unsupported component version. Deployment inspection and application are serialized under the schema lock and transaction.
- Fixed schema generation and deployment for quoted schema names, concurrent fresh installation, missing component versions, and current-version no-op paths.
- Fixed benchmark races against background read-model publication and fixture exhaustion. Relevant benchmarks now wait for read-model quiescence, isolate consuming invocations, fail the command on invalid or missing BenchmarkDotNet results, and document how to treat multimodal measurements.

## Security

- Delegated child authority is reachable only through the scoped child service or the registered workflow graph; the general queue and worker-operation surfaces continue to enforce direct authorization.
- Parent executors remain responsible for validating caller-controlled tenant, account, subject, and other business scope before constructing child input, and for bounding caller-driven fan-out. Delegation intentionally does not infer application-specific business authorization.
- System-owned workflow provenance is persisted separately from `WorkInput` and revalidated against authoritative run membership before delegated workflow control. The searchable `workflow-run` identifier is correlation data only and is never accepted as proof of containment.
- Work and workflow events now carry typed definition scope, closing same-name authorization collisions without requiring applications to rename either definition.
- Authorization fingerprints are system-scoped and unambiguous, and delayed projection work preserves the authenticated state. Publicly constructible or cloned snapshot values cannot opt into the trusted projection cache.
- Null, blank, malformed, reserved, and mutation-raced identifiers fail queue admission without creating a worker or elevating child/workflow authority.

## Performance

- The authoritative bulk candidate source is used only by bulk actions; ordinary reads, single-worker operations, and worker execution are unaffected.
- Ready-work signals no longer run failed-recovery claims, and filtered ready indexes keep retained failures out of the executable claim path.
- A repeated 1,000-worker SQL durable lifecycle benchmark completed 10 of 10 runs with no reader, lease, or cleanup failures, zero pending cleanup, and zero final durable work rows. The reviewed build recorded a 1.755-second median versus 1.800 seconds immediately before the ready-index change.

## Documentation

- Added delegated child-execution guidance, configuration examples, stored-procedure security-boundary guidance, workflow delegation behavior, immutable graph constraints, and `WithWorkDefaults(...)` restrictions.
- Updated workflow, queueing, authorization, observability, failed-worker, SQL durability, realtime, core API, and admin UI documentation for trusted provenance, typed event scope, durable failed recovery, and schema deployment behavior.
- Expanded regression coverage across child authorization, workflow propagation, startup rollback, bulk actions, authorization caching, SignalR projection, durable recovery, SQL migration paths, deadlock prevention, and benchmark correctness.