Workable.Views 1.1.91326.1

dotnet add package Workable.Views --version 1.1.91326.1
                    
NuGet\Install-Package Workable.Views -Version 1.1.91326.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.Views" Version="1.1.91326.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Workable.Views" Version="1.1.91326.1" />
                    
Directory.Packages.props
<PackageReference Include="Workable.Views" />
                    
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.Views --version 1.1.91326.1
                    
#r "nuget: Workable.Views, 1.1.91326.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.Views@1.1.91326.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.Views&version=1.1.91326.1
                    
Install as a Cake Addin
#tool nuget:?package=Workable.Views&version=1.1.91326.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.
  • Let authorized backend callers durably schedule work once, at an elapsed interval, or from a timezone-aware cron expression, with bounded storage and a creation-time queue authorization grant that cannot gain diagnostic privileges later.
  • 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 runtime schedules, 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 through Workable.HttpApi or Workable.SignalR instead of referencing it directly.
  • Workable.HttpApi: standard HTTP endpoints for queueing and scheduling work, querying and controlling workers, and operating 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.
  • Runtime Scheduling if backend callers need to queue work later, at a runtime-selected interval, or on a timezone-aware calendar schedule.
  • 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 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 (2)

Showing the top 2 NuGet packages that depend on Workable.Views:

Package Downloads
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.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.91326.1 0 9/14/2026
1.1.83126.1 168 9/1/2026
1.1.82326.1 352 8/24/2026
1.1.81126.1 171 8/11/2026
1.1.80926.1 113 8/9/2026
1.1.80726.1 140 8/8/2026
1.1.80526.1 127 8/5/2026
1.1.71926.1 146 7/21/2026
1.1.70926.1 162 7/10/2026
1.1.70626.2 219 7/6/2026
1.1.70626.1 145 7/6/2026
1.1.63026.1 138 6/30/2026
1.1.61226.1 146 6/12/2026
1.1.159.1 162 6/8/2026
1.1.158.1 143 6/7/2026
1.1.157 154 6/7/2026
1.1.153.1 160 6/2/2026
1.1.146.1 318 5/26/2026
1.1.142.3 178 5/23/2026
1.1.0 169 5/22/2026
Loading failed

# 1.1.091326.1

Date: 2026-09-13

These notes describe only the user-visible, operational, and public API differences from `1.1.083126.1`. Intermediate implementation details are omitted.

## Breaking Changes

- There are no intentional breaking API changes in this release. Runtime scheduling is additive and remains disabled unless a work system explicitly enables it and an `IWorkScheduleStore` is registered.

## Runtime Scheduling

- Authorized callers can durably schedule registered work for one future execution, a fixed elapsed-time interval, or a calendar schedule expressed with a five-field cron expression and an explicit IANA time zone.
- Schedules belong to one Workable system and target work by definition name because runtime work ids are regenerated when a system starts. Every occurrence resolves and validates the latest registered definition.
- Interval schedules support a caller-selected first run and intervals of at least one minute. Cron schedules account for time-zone daylight-saving gaps and overlaps and support server-side previews of the next five occurrences.
- Each schedule controls whether one overdue occurrence should run after system downtime. Recurring schedules advance directly to the next future occurrence rather than producing a burst for every elapsed interval.
- Scheduler availability is tracked per host and logical system, so a new host joining during a rolling deployment does not mistake its own startup boundary for full-system downtime and skip valid work.
- Runtime schedules and worker recurrence remain separate features. Definitions with statically configured recurrence can be scheduled once but cannot be given another recurring runtime schedule. If recurrence is enabled on a definition after a recurring schedule is created, scheduled workers explicitly suppress worker recurrence.
- Scheduled dispatch always uses `StartAndReturnAfterAccepted`. The background scheduling loop never inherits `DoNotStart` or waits for a future worker to complete, while normal worker failure, retry, auto-cancellation, concurrency, logging, and retention policies continue to apply after queue acceptance.
- Accepted occurrences create independent workers. Dispatch history records whether an occurrence was accepted, rejected, skipped, or failed and links accepted occurrences to their workers without treating eventual worker completion as part of schedule dispatch.

## Authorization and Security

- Schedule creation uses the definition's existing `Queue` permission, queue requirements, invocation rules, input validation, and effective worker configuration. Scheduling does not introduce a separate permission that could bypass ordinary execution controls.
- A successful creation check becomes the schedule's durable execution grant. Disabling or deleting the creator or changing their group membership does not silently revoke an accepted schedule; cancel the schedule to revoke that delegation.
- The durable grant cannot acquire unrestricted profile-capture capability from a later definition change. Each definition also exposes `ScheduleSecurityVersion`, allowing a deployment to reject older schedules when the authority or business scope of the work changes.
- Schedule reads and occurrence history require the definition's current `Read` permission. Removed definitions fail closed to an explicit system-level `ReadAllWork` grant, and hidden or unauthorized schedules use non-disclosing not-found behavior.
- Schedule cancellation uses the definition's current `Cancel` permission. `WhenScheduleActionsRequire(...)` supports schedule-specific constraints, while shared `WhenOperatingRequire(...)` constraints continue to apply. Worker-action-only constraints do not become unconstrained schedule access.
- Creator and canceler identity fields are bounded and rejected instead of truncated. Schedule and occurrence queries enforce row and serialized-payload limits before returning authorized data.
- Configurable per-system, per-definition, and per-actor admission limits bound active and retained schedules. Independent byte, occurrence-history, query, claim-batch, and cleanup limits prevent repeated create/cancel operations or large retained payloads from creating unbounded storage and dispatch pressure.

## SQL Server Persistence and Dispatch

- `Workable.SqlServer` now supplies the built-in `IWorkScheduleStore`. Register SQL persistence at host scope and enable scheduling independently for each work system with `EnableScheduling(...)` or `UseScheduling(...)`.
- Automatic deployment and the schema CLI recognize scheduling as an independent schema component. This is the first released scheduling schema: fresh databases and databases upgraded from `1.1.083126.1` receive empty current scheduling tables, and no scheduling data is backfilled or migrated.
- SQL persistence isolates schedules by persistence scope and logical Workable system name and enforces admission, retention, serialized-byte, and rolling occurrence-history limits transactionally across hosts.
- Per-host availability observations share the existing claim round trip and avoid a system-wide heartbeat lock. Graceful shutdown makes a best-effort close within its own one-second bound; a short lease bounds stale availability after a slow provider or abrupt process loss.
- Definition names are limited to the SQL schedule table's 450-character durable column bound, with oversized names reported as structured invalid schedule creation.
- Schedule creation, occurrence completion, and cleanup acquire their per-system coordination range in one consistent order, preventing index lock cycles while preserving independent progress for different Workable systems.
- Due schedules use fenced leases and an atomic dispatch-start marker. An accepted cancellation cannot be followed by dispatch from a stale claimant, and an expired or superseded claimant does not queue work.
- Delivery remains at least once across the narrow failure window where queueing succeeds but occurrence persistence fails. Work whose duplicate execution would be unsafe should continue to use Workable idempotency or application-level idempotency.
- Schedule occurrence history and terminal schedules expire according to the configured retention period, which defaults to one day and can be configured from one minute through seven days. Compact per-system usage rows avoid repeatedly scanning complete occurrence history while preserving exact transactional quotas.
- Scheduler hosts claim bounded batches and dispatch each batch concurrently. While due work remains they immediately claim the next batch; the one-second fallback poll is reserved for idle cross-process discovery and error recovery rather than acting as a throughput ceiling.

## HTTP API and Admin UI

- The built-in HTTP API adds routes to create and list schedules, page upcoming schedules by next-run time, load a management overview, read one schedule, list retained occurrences, cancel an active schedule, and preview cron occurrences. Named work systems expose the same routes under their existing system-scoped path.
- Host and system capability discovery now reports whether scheduling is available, allowing clients to hide scheduling controls when no durable schedule store is configured.
- The queue dialog adds a **Schedule** action alongside **Queue** and **Watch** when scheduling is available. It reuses the existing input and runtime configuration, supports one-time, interval, and cron timing, previews cron occurrences, and exposes the missed-execution option.
- Each enabled system adds **Schedules** after **Iterations** in the explorer tree. The screen separates upcoming executions from retained schedules, displays recent dispatch history and accepted-worker links, and supports creating or canceling schedules.
- The schedule screen loads the first 25 recent schedules, the first 25 upcoming schedules, exact readable schedule totals, its selection, and retained dispatch history through one overview request backed by one SQL command. Each list has a fixed-height viewport with sticky headings and automatically continues its independent cursor as the user scrolls. A sliding five-page, 125-record client window bounds polling, rendering, and retained client state; polls authoritatively replace the current provider-ordered cursor window, while controls can return to the newest or soonest window. Visible-page polling uses randomized jitter, prevents overlapping refreshes, exponentially backs failures off to a one-minute ceiling, and refreshes immediately when the tab becomes visible.
- Schedule paging, cancellation, and definition-picker requests are scoped to the selected host and logical-system generation, and changing that target closes open schedule-creation dialogs. Core bounds every custom-provider overview collection to the requested limit and includes occurrences only for the selected schedule, including when authorization is disabled. The custom-provider compatibility query is capped at 1,000 readable active schedules; providers supporting larger active sets must override the optimized upcoming query instead of making one request enumerate an arbitrary number of rows.
- **New schedule** opens the catalog picker and then the existing queue configuration dialog in scheduling mode. Recurring runtime controls are disabled for definitions that already have static recurrence.

## Public API and Configuration

- Added `IWorkScheduler` to work systems and caller-scoped sessions, together with schedule identifiers, timing, request, snapshot, cursor-paginated query, consolidated overview, occurrence, creation, and cancellation contracts.
- Added `IWorkScheduleStore` as the persistence abstraction for custom providers. Enabling scheduling without a store fails system startup instead of accepting non-durable schedules.
- Added `WorkSystemSchedulingConfiguration` for history retention, active and retained schedule quotas, per-actor quotas, schedule and occurrence payload limits, bounded claim batches, query budgets, and cleanup behavior.
- Added schedule-aware authorization requirement context and builder methods, HTTP schedule request and response contracts, capability discovery fields, and the developer-controlled definition security version.
- The complete in-process and HTTP management surfaces are available in this release. MCP and SignalR do not currently expose schedule management.

## Performance

- Focused SQL baselines measured 276.55 ms for 25 simultaneous completions at the 10,000-occurrence boundary, 865.78 ms for the equivalent sequential case, and 328.82 ms to complete one occurrence while pruning a 100,000-entry retained history.
- End-to-end backlog baselines measured 590.1 ms for 25 simultaneously due schedules, 1.655 seconds for 100, and 12.737 seconds for 1,000. Batch count and payload-byte limits bound host and database pressure.
- The 100,000-worker in-memory queue baseline remained within run variance with scheduling disabled at 1.427 seconds and enabled but idle at 1.445 seconds.
- Maximum-page recent, active, and continued-active schedule queries measured 27.98, 26.55, and 23.50 ms with 1,000 retained schedules, and 41.61, 36.27, and 37.96 ms with 10,000. The consolidated 100-row overview measured 102.48 ms and 593.82 KiB at 1,000 retained schedules, and 124.29 ms and 569.30 KiB at 10,000.

## Deployment Notes

- Scheduling is opt-in. Register `AddWorkableSqlServerPersistence(...)` once for the host and call `EnableScheduling(...)` for each work system that should expose scheduling.
- SQL schema auto-deployment creates the scheduling tables when scheduling is first required. Deployments that disable automatic schema deployment must apply the generated scheduling schema before starting an enabled system.
- The Sample Host's checked-in SQL deployment script includes the scheduling schema, and an automated parity test keeps that artifact synchronized with the runtime/CLI generator.
- Schedules use work definition names as their stable target. Renaming or removing a definition leaves its retained schedules orphaned until the name is restored or a caller with system-wide operate access cancels them. A one-time schedule becomes terminal after its rejected dispatch and then ages out; a recurring orphan remains active so restoring the definition name can resume future occurrences.
- Review the default admission, retained-history, payload, batch, and cleanup limits for each deployment. Increase them only with corresponding database-capacity and workload testing.
- Use stable IANA time-zone identifiers such as `UTC`, `America/Los_Angeles`, or `Europe/London` when schedules may be processed by different hosts.

## Documentation and Testing

- Added a runtime scheduling guide and updated the root, documentation, HTTP API, authorization, public API, project structure, registration, recurrence, SQL Server, sample-host, performance-harness, and admin UI documentation.
- Added behavior-focused coverage for timing calculation, cron and daylight-saving handling, missed executions, latest-definition resolution, recurrence suppression, forced background start behavior, durable grants and revocation, schedule visibility and cancellation, admission and payload limits, leases, cancellation races, retention, schema deployment, HTTP routes, and admin UI workflows.
- The final validation passed 2,504 core/API tests, 198 SQL Server tests, and 464 admin UI tests. Core/API branch coverage measured 96.28 percent and SQL Server source-condition coverage measured 95.74 percent. The scheduling UI changes meet the changed-branch coverage gate, and the SQL suite includes 50 synchronized create-versus-cleanup races that verify the shared lock order under contention.
- The complete 186-case baseline benchmark suite ran for 41 minutes 27 seconds without failed reports or critical validation errors. Focused reruns covered backlog draining, schedule creation, completion contention, and the final query and overview paths.