Workable.SqlServer
1.1.83126.1
dotnet add package Workable.SqlServer --version 1.1.83126.1
NuGet\Install-Package Workable.SqlServer -Version 1.1.83126.1
<PackageReference Include="Workable.SqlServer" Version="1.1.83126.1" />
<PackageVersion Include="Workable.SqlServer" Version="1.1.83126.1" />
<PackageReference Include="Workable.SqlServer" />
paket add Workable.SqlServer --version 1.1.83126.1
#r "nuget: Workable.SqlServer, 1.1.83126.1"
#:package Workable.SqlServer@1.1.83126.1
#addin nuget:?package=Workable.SqlServer&version=1.1.83126.1
#tool nuget:?package=Workable.SqlServer&version=1.1.83126.1
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: Workable actor and authorization-claim integration for ASP.NET Core hosts that already authenticate Microsoft Entra identities.Workable.Views: shared component-view contracts and projections used by HTTP and SignalR adapters; most applications receive it transitively throughWorkable.HttpApiorWorkable.SignalRinstead 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.
- Microsoft Entra Authentication if the host already authenticates Entra identities and Workable should interpret their actor and group claims without taking ownership of JWT configuration.
- 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 | Versions 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. |
-
net10.0
- Microsoft.Data.SqlClient (>= 6.1.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Workable.Abstractions (>= 1.1.83126.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.83126.1 | 41 | 9/1/2026 |
| 1.1.82326.1 | 156 | 8/24/2026 |
| 1.1.81126.1 | 138 | 8/11/2026 |
| 1.1.80926.1 | 92 | 8/9/2026 |
| 1.1.80726.1 | 109 | 8/8/2026 |
| 1.1.80526.1 | 97 | 8/5/2026 |
| 1.1.71926.1 | 121 | 7/21/2026 |
| 1.1.70926.1 | 136 | 7/10/2026 |
| 1.1.70626.2 | 112 | 7/6/2026 |
| 1.1.70626.1 | 116 | 7/6/2026 |
| 1.1.63026.1 | 110 | 6/30/2026 |
| 1.1.61226.1 | 116 | 6/12/2026 |
| 1.1.159.1 | 120 | 6/8/2026 |
| 1.1.158.1 | 127 | 6/7/2026 |
| 1.1.157 | 127 | 6/7/2026 |
| 1.1.153.1 | 118 | 6/2/2026 |
| 1.1.146.1 | 115 | 5/26/2026 |
| 1.1.142.3 | 119 | 5/23/2026 |
| 1.1.0 | 118 | 5/22/2026 |
| 1.0.0 | 114 | 5/21/2026 |
# 1.1.083126.1
Date: 2026-08-31
These notes describe only the user-visible, operational, and public API differences from `1.1.082326.1`. Intermediate implementation details are omitted.
## Breaking Changes
- There are no intentional breaking API changes in this release. The diagnostics health API is additive: existing `IWorkSystemDiagnostics` implementations default to `NotConfigured`, and the existing positional `WorkableHttpSystemDiagnostics` constructor remains valid.
## Execution Diagnostics and SQL Server Startup
- A persistent execution-diagnostics repository that fails during initialization no longer brings down its Workable system or the application host. Work execution continues without persisted execution logs or profiles for that system until the process restarts.
- Initialization failure emits the prominent `Error`-level event `ExecutionDiagnosticsInitializationFailed`, including the provider exception in server logs and an explicit warning that evidence will not be persisted. Cancellation, out-of-memory, and stack-overflow failures retain their existing propagation behavior.
- Added `IWorkSystemDiagnostics.ExecutionDiagnosticsPersistence` with `NotConfigured`, `PendingInitialization`, `Healthy`, and `Unhealthy` states, `InitializationFailedAt`, `PersistenceAvailable`, and `IsHealthy`. Authorized HTTP system diagnostics expose the same health state without exposing provider or connection details.
- System capabilities now report execution-diagnostics persistence as unavailable after initialization fails. New sessions receive the updated capability, evidence reads return no persisted results, and capture-rule mutations remain unavailable while the system is unhealthy.
- `Workable.SqlServer` now coordinates schema work through one host-scoped initializer. One completed schema-deployment result is reused per application host, and queue, workflow, and execution-diagnostics schema validation runs at most once after success for each component used by that host, even when many Workable systems start together. Canceled initialization remains immediately retryable.
- Successful deployment and validation results are reused. A component failure is shared across the other systems encountering that startup failure, preventing them from repeatedly starting LocalDB, reconnecting to an unavailable server, or attempting the same deployment. A repeated initialization for the same system retries, and a diagnostics deployment failure does not suppress the first durable queue or workflow deployment attempt.
- When durable-queue and explicit diagnostics-persistence registrations use different `AutoDeploySchema` values, automatic deployment is enabled if either registration enables it. Conflicting connection or schema registrations continue to fail validation.
- Only execution-diagnostics repository initialization adopts the new fail-open behavior. Durable queue and workflow persistence retain their existing startup, store-unavailable, and retry semantics.
## Admin UI Authentication and Transport Security
- Delegated Entra access tokens now stay out of browser cookies and Web Storage. They use a bounded 256-entry, exact-scope, rotation-aware per-process cache with a 64 KiB per-token limit and a 24-hour maximum accepted lifetime; cache eviction or process restart falls back to the encrypted browser-held refresh authority.
- Encrypted refresh snapshots are versioned, immutable, bound to the signed-in identity, session, client, and complete target configuration, and limited to a 6 KiB request-cookie budget with a 4 KiB refresh-token limit. A newer browser rotation invalidates stale process-local access-token entries.
- Logout clears the signed-in session's local access-token cache and prevents an in-flight refresh from repopulating it. Concurrent refreshes remain coordinated per signed session, and reverse-order responses cannot replace newer refresh authority.
- Unsupported and pre-v1 delegated-token snapshots are rejected and cleared. The admin UI sends the browser through sign-in again instead of leaving the current page in a repeated authorization failure.
- Oversized local admin-session headers now open a page-wide request circuit breaker. HTTP polling, queries, token acquisition, SignalR reconnects, and fallback restarts stop instead of sustaining a `431 Request Header Fields Too Large` retry loop, and the UI tells the operator to clear site data and sign in again.
- A `431` returned by the hosted Workable API is marked as an upstream response and remains isolated to that request; it does not disable unrelated admin UI requests.
- The checked-in `npm run dev` and `npm start` commands launch Node with a 32 KiB maximum HTTP header size. This bounds normal self-hosted deployments while allowing the compact session and refresh cookies used by the UI.
## Admin Console Reliability and Usability
- Infinite worker, iteration, catalog, log, timeline, and message pagination stops after a terminal page failure instead of retrying from scroll or render loops. An explicit refresh, query change, or scope change starts a new attempt.
- Switching API hosts, systems, definitions, workers, or iterations clears stale scoped data. Results from superseded in-flight pagination requests are ignored, and catalog failures reset correctly when moving to another scope.
- Worker detail now keeps the latest iteration's execution-failure banner visible even when a recurring worker has already returned to `Waiting`. The banner is keyed to the failed iteration so dismissing one failure does not hide a later failure.
- Active as well as completed iteration rows can open iteration detail, allowing operators to inspect an execution while it is still running.
- Realtime worker-overview log and timeline payloads now contain the latest 50 matching entries in the requested sort direction. Ascending views no longer receive the oldest matching entries.
- Scrollbar styling now applies consistently to the full admin UI instead of only selected data grids.
## Worker and Sample Host Fixes
- Worker-start transitions are now published before executor launch. Fast work can no longer complete before observers receive its start event.
- Fast non-durable workflow children now retain their completion receipt when execution finishes before the dispatch step records the child worker id. Automatic worker retention can no longer remove that evidence and leave a join or operator view without the child's final state.
- Restored the sample host's fake authentication as a real ASP.NET Core authentication scheme and middleware pipeline, so its documented authorization profiles work with the host-owned authentication model introduced in `1.1.082326.1`.
## Performance
- Against the pre-change implementation with the SQL schema already installed, startup for 8 systems improved from 225.88 ms to 133.39 ms (41.0% faster), and startup for 32 systems improved from 870.75 ms to 430.24 ms (50.6% faster). Allocation for the 32-system case fell from 8,730.37 KB to 3,392.41 KB (61.1% lower). The one-system case remained within run variance.
- Against one intentionally unavailable diagnostics database, the final startup rerun measured 10.14 ms, 10.59 ms, and 11.25 ms for 1, 8, and 32 systems. The nearly flat curve confirms that later systems reuse the first component failure instead of repeating the connection attempt, while preserving same-system and durable-component retries.
- Diagnostics health reads now reuse immutable snapshots and allocate 0 B for not-configured, healthy, unhealthy, and session-projected states. Session creation measured 49.31 ns / 456 B when healthy and 49.91 ns / 456 B when unhealthy, with no measurable regression from dynamic capability reporting.
- An authorized `GET /workable/diagnostics` request measured 19.21 microseconds / 24.2 KB end to end after extended warmup. Installed-schema and unavailable-database reruns remained within the preceding post-change variance.
- Two focused post-fix workflow benchmark runs measured 65.87-70.65 microseconds and 69.0-69.3 KB allocated per completed single-dispatch workflow; the pending-receipt safeguard did not introduce an anomalous hot-path cost.
## Deployment Notes
- No SQL schema migration is introduced by this release. The SQL change coordinates existing deployment and validation work at host scope.
- A diagnostics initialization failure remains unhealthy for the lifetime of the process. Correct the provider, permissions, schema, or connection problem and restart the application to re-enable persistence.
- Existing delegated Entra cookie state from before the new snapshot version is intentionally not migrated; affected administrators sign in again once after deployment.
- Deployments that bypass the checked-in Node scripts should pass `--max-http-header-size=32768` themselves and configure the trusted reverse proxy or load balancer with a compatible limit.
## Documentation and Testing
- Updated diagnostics, public API surface, SQL Server persistence, Entra authentication, realtime, sample-host, and admin UI documentation for the final behavior and operational recovery steps.
- Added focused schema-startup, unavailable-database, diagnostics-health, and authorized HTTP benchmarks, including retained before/after results in the performance harness.
- Added regression coverage for diagnostics fail-open behavior and health authorization, shared SQL initialization and failure reuse, Entra snapshot bounds and recovery races, `431` retry suppression, pagination terminal failures and stale-response races, active-iteration navigation, realtime failure presentation, sample authentication, worker-start event ordering, and fast workflow-child finalization.
- Repository CI now validates the admin UI on Node 24 with install, tests, changed-code coverage, and the Next.js production build in addition to the .NET validation surfaces.