Merged
Conversation
…ions & framework, preserved .csproj files
arcenox
added a commit
that referenced
this pull request
Mar 15, 2026
* Fixed the issue with dead node release * Fixed the scheduler to handle inline tasks and to not create deadlock on threads of TickerQ * fixed the window time of picking tasks * Fixed the task cancellation issue * fixed the scheduler to show real time threads active * updated version for release * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#377) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#379) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#383) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Updated PR to push net9 * fixed merge conflicts * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#387) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#389) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#392) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#394) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * 🔄 Sync main branch changes to net9 (#400) * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files * Fixed the issue with .net app net9 versions --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#402) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#404) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#406) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#420) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#421) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#424) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#425) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * 🔄 Sync main branch changes to net9 (#431) * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files * Added reference to TickerQ from Test csproj --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#435) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#452) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#467) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#489) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#491) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#493) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#495) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#506) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#529) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#531) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#538) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#536) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#533) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix #521: Set explicit C# 13 language version for .NET 9 (#547) Set LangVersion to 13.0 in Directory.Build.props for deterministic builds and remove the per-project LangVersion override from TickerQ.csproj. C# 13 is the latest language version compatible with .NET 9. https://claude.ai/code/session_015JykuFsRPUz3q19jxYh7uy Co-authored-by: Claude <noreply@anthropic.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#545) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#552) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#553) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#555) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#565) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#563) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#561) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#558) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#560) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#568) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * fix .net9 * fix build prop * fix * fix * fix * stable release along with hub. * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#577) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * fix dashboard and conflicts * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#583) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#608) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#613) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#601) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#597) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#595) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#592) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#588) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files * Sync changes from main to net9 - Applied recent commits, updated versions & framework, preserved .csproj files (#625) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix DotNetVersion range for net9 — was incorrectly set to [10.0.0,11.0.0) (#626) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Sync changes from main to net9 (#630) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync main → net9 (#634) * Sync changes from main to net9 * Add IsEnabled support to sync-excluded EF Core files for net9 Add IsEnabled to ForCronTickerExpressions mapping and filter disabled cron tickers in GetAllCronTickerExpressions. These files are excluded from git sync and need manual updates per target framework. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Sync changes from main to net9 (#637) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#640) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#643) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#646) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#649) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#653) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#655) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#660) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#662) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#664) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#667) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#671) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix test project versions and PR workflow on net9 branch - Add tests/Directory.Build.props with net9 TargetFramework and DotNetVersion - Replace hardcoded versions with $(DotNetVersion) in test csproj files - Add missing Microsoft.AspNetCore.TestHost package for DashboardPathBaseTests - Add EF Core test project to PR workflow build and test steps Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Sync changes from main to net9 (#674) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#678) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Sync changes from main to net9 (#679) * Updated for the net10 support * update to release version * added release for net9 * added pattern to skip commits using comments on commit for cherry pick merge between branches * remove unecessary build command * fixed the sync * updated cherry detections * try merge based on commit * Fixed the json options to be isolated (#375) * Fix/schedulerbackground (#376) * Fixed the scheduler background to Task.Delay since the Peridic Timer were skipping ticks on short interval with seconds. * small refactor * fixed the mixd up delete ticker * beta version 17 release (#382) * Feature/improvements (#386) * Made improvements and new feature: request by default not using GZIP compression * Added timezone dashboard support and other fix on features. * Fixed the seefing data * Update README.md * Update README.md * updated beta version * Feature/new improvements (#397) * Added some new features on dashboard and on demand running directly without giving pressure of background scheduler * Added dispatch interfaces * added pagination on machine names * Added test coverage * added examples * Added sample sqlite for samples * Added csproj fules for Sample data * fixed the locking of immediate run ticker in safe for runcondition * fiexed indexing, the scheduler on high run and memory persistence * fixed dashboard path merge * small fixes on manager * Added migration changes for examples * releas of stable version * Update README.md * Release of stable version. * Fix schema assignment logic and add SetSchema method (#415) * Fix schema assignment logic in UseTickerQDbContext and add SetSchema method * Refactor UseTickerQDbContext to simplify schema assignment logic * Add support for enabling/disabling background services (#413) * Checkpoint from VS Code for coding agent session * Remove documentation on separating job queueing from job processing * Update Directory.Build.props * Added logo locally * Fix retry logic and add unit tests for ExecuteTaskAsync (#429) * Add retry logic improvements and unit tests for ExecuteTaskAsync * Refactor retry test setup to use SetupRetryTestFixture for consistency * fix: namespace conflicts for ModuleInitializer attribute in TickerQIncrementalSourceGenerator (#433) * Update Directory.Build.props * Update Directory.Build.props * fix update ExecutionTime for CronTickerOccurrence (#461) * feat: add configurable policy name for Host auth (#482) * Initial plan * Add configurable authorization policy name for Host mode Co-authored-by: jods4 <3832820+jods4@users.noreply.github.com> * Refactor: Make policy an optional parameter to WithHostAuthentication Co-authored-by: jods4 <3832820+jods4@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jods4 <3832820+jods4@users.noreply.github.com> * fix: Host auth. should not depend on Authorization header (#481) Fixes #446 * [Feature] Remove ASP.NET Core dependency from TickerQ.Utilities to support all .NET platforms (#480) * Removes ASP.NET Core dependency Generalizes TickerQ to support non-ASP.NET Core environments like console applications and worker services. Refactors extension methods to utilize IHost and IServiceProvider instead of IApplicationBuilder, decoupling the core library from ASP.NET Core. Updates dependencies to use Microsoft.Extensions.* packages directly, using defined DotNetVersion. * Resolves NuGet version mismatches Ensures consistent NuGet package versions by defining the .NET package version as a variable in the Directory.Build.props file and using it across all project files. This maintains consistency of dependency versions across all projects. --------- Co-authored-by: EarlJester <shon3322@gmail.com> * Fix missing await to AuthenticateHostAsync call (#494) * Fix #497 (#503) * Fix stackoverflow in JsonExampleGenerator (#519) * Addded unit tests to cover existing JsonExampleGenerator functionality. Prevent infinite recursion in JsonExampleGenerator. * Update src/TickerQ.Dashboard/Infrastructure/Dashboard/JsonExampleGenerator.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/TickerQ.Dashboard/TickerQ.Dashboard.csproj Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/TickerQ.Dashboard/Infrastructure/Dashboard/JsonExampleGenerator.cs good catch Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Feature/tickerq hub (#508) * Added persistence for the redis. * TickerQHub integration * added ready-to-deploy the new version * pre-release * fix references * Add missing ASP.NET Core package references to TickerQ.SDK (#537) Added package references for ASP.NET Core extension packages to resolve CS0234 build errors when deploying. The SDK uses ASP.NET Core types (IEndpointRouteBuilder, IEndpointFilter, Results, etc.) but was missing the required package references. Added packages: - Microsoft.AspNetCore.Http.Abstractions - Microsoft.AspNetCore.Http.Results - Microsoft.AspNetCore.Routing - Microsoft.AspNetCore.Mvc.Abstractions https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 Co-authored-by: Claude <noreply@anthropic.com> * Claude/fix aspnetcore namespace xuvot (#540) * Add missing ASP.NET Core package references to TickerQ.SDK Added package references for ASP.NET Core extension packages to resolve CS0234 build errors when deploying. The SDK uses ASP.NET Core types (IEndpointRouteBuilder, IEndpointFilter, Results, etc.) but was missing the required package references. Added packages: - Microsoft.AspNetCore.Http.Abstractions - Microsoft.AspNetCore.Http.Results - Microsoft.AspNetCore.Routing - Microsoft.AspNetCore.Mvc.Abstractions https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix ASP.NET Core namespace errors by using Web SDK Changed TickerQ.SDK to use Microsoft.NET.Sdk.Web with OutputType=Library instead of adding individual ASP.NET Core packages. The individual packages (Microsoft.AspNetCore.Http.Abstractions, etc.) are not published for .NET 5+ and are only available through the shared framework. Using Sdk.Web with OutputType=Library provides access to ASP.NET Core types (IEndpointRouteBuilder, IEndpointFilter, Results, etc.) while still producing a class library output. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 --------- Co-authored-by: Claude <noreply@anthropic.com> * Remove invalid ASP.NET Core package references (#541) The ASP.NET Core packages (Microsoft.AspNetCore.Http.Abstractions, etc.) don't exist as standalone NuGet packages for .NET 5+. They were discontinued after .NET Core 2.x and are only available through the shared framework. Since TickerQ.SDK already uses Microsoft.NET.Sdk.Web, these types are automatically available through the implicit framework reference. The explicit package references were causing NU1102 errors during restore. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 Co-authored-by: Claude <noreply@anthropic.com> * Claude/remove invalid aspnetcore packages xuvot (#542) * Remove invalid ASP.NET Core package references The ASP.NET Core packages (Microsoft.AspNetCore.Http.Abstractions, etc.) don't exist as standalone NuGet packages for .NET 5+. They were discontinued after .NET Core 2.x and are only available through the shared framework. Since TickerQ.SDK already uses Microsoft.NET.Sdk.Web, these types are automatically available through the implicit framework reference. The explicit package references were causing NU1102 errors during restore. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix TickerQ.Dashboard to use Web SDK for ASP.NET Core types Changed TickerQ.Dashboard to use Microsoft.NET.Sdk.Web with OutputType=Library to provide access to ASP.NET Core types (IApplicationBuilder, etc.) that are required for the dashboard middleware and endpoints. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix TickerQ.RemoteExecutor to use Web SDK for ASP.NET Core types Changed TickerQ.RemoteExecutor to use Microsoft.NET.Sdk.Web with OutputType=Library to provide access to ASP.NET Core types (IEndpointRouteBuilder, IEndpointFilter, etc.) that are required for the remote execution endpoints. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 --------- Co-authored-by: Claude <noreply@anthropic.com> * Claude/remove invalid aspnetcore packages xuvot (#543) * Remove invalid ASP.NET Core package references The ASP.NET Core packages (Microsoft.AspNetCore.Http.Abstractions, etc.) don't exist as standalone NuGet packages for .NET 5+. They were discontinued after .NET Core 2.x and are only available through the shared framework. Since TickerQ.SDK already uses Microsoft.NET.Sdk.Web, these types are automatically available through the implicit framework reference. The explicit package references were causing NU1102 errors during restore. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix TickerQ.Dashboard to use Web SDK for ASP.NET Core types Changed TickerQ.Dashboard to use Microsoft.NET.Sdk.Web with OutputType=Library to provide access to ASP.NET Core types (IApplicationBuilder, etc.) that are required for the dashboard middleware and endpoints. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix TickerQ.RemoteExecutor to use Web SDK for ASP.NET Core types Changed TickerQ.RemoteExecutor to use Microsoft.NET.Sdk.Web with OutputType=Library to provide access to ASP.NET Core types (IEndpointRouteBuilder, IEndpointFilter, etc.) that are required for the remote execution endpoints. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 * Fix IApplicationBuilder cast in Dashboard ServiceExtensions The UseDashboardApplication callback receives an object (since TickerQ.Utilities doesn't have ASP.NET Core dependencies), so we need to explicitly cast it to IApplicationBuilder before calling extension methods on it. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 --------- Co-authored-by: Claude <noreply@anthropic.com> * Enable NuGet package generation for Web SDK projects (#546) Microsoft.NET.Sdk.Web sets IsPackable=false by default. Added explicit IsPackable=true to TickerQ.SDK, TickerQ.RemoteExecutor, and TickerQ.Dashboard to ensure NuGet packages are generated during build. https://claude.ai/code/session_01XaNrB2LuCkTM6FRjxuUyt7 Co-authored-by: Claude <noreply@anthropic.com> * Fix #511 and #517: null reference and orphaned cron ticker bugs (#549) - #511: Add null check for CachedDelegate in RunContextFunctionAsync with a clear InvalidOperationException message instead of cryptic NRE - #517: Fix orphaned cron tickers not being cleaned up on restart when their expression was edited via the dashboard. The dashboard update wipes InitIdentifier, causing the seeded-only cleanup to miss them. Now checks all cron tickers against TickerFunctionProvider.TickerFunctions to remove any whose function no longer exists in code. Applied to EF Core, In-Memory, and Redis persistence providers. https://claude.ai/code/session_015JykuFsRPUz3q19jxYh7uy Co-authored-by: Claude <noreply@anthropic.com> * Fix thread-safety bugs, resource leaks, and scheduling issues (#550) * Fix thread-safety bugs, resource leaks, and scheduling issues across core components Addresses multiple concurrency bugs, resource disposal issues, and adds performance optimizations across the scheduler, cancellation, caching, and persistence layers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add tests for SafeCancellationTokenSource, CronScheduleCache DST handling, cancellation manager, and task scheduler Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix BindingFlags in SetProperty_Reinitializes test — ParametersToUpdate is public Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * added extension method for WebApplication * pre-release * fix and pre-release * removed the not-needed reference from the Tickerq. * fixed based on the tickerq architecture. * update version * fix and pre-release... * release a stable version * release a stable version along with the new libs for the hub. * Fix .NET 9+ EF Core query failures caused by ReadOnlySpan array.Contains() (#574) On .NET 9+, the compiler resolves array.Contains() to MemoryExtensions.Contains() which uses ReadOnlySpan<T>. EF Core cannot translate ReadOnlySpan<T> in LINQ expressions, causing InvalidOperationException at runtime for all persistence queries that filter by arrays of IDs. Convert all Guid[] and string[] parameters to List<T> before use in EF Core LINQ .Where() clauses so the compiler resolves to List<T>.Contains() which EF Core can translate to SQL IN clauses. Fixes #460, #462, #465, #466, #470 https://claude.ai/code/session_01JLAicT6LCaCbcR8aZhNri2 Co-authored-by: Claude <noreply@anthropic.com> * fix the dashboard... * Add comprehensive unit tests for core TickerQ components (#582) New test files covering must-have areas that were previously untested: - TickerExecutionTaskHandlerTests: success/failure/cancellation/terminate execution paths, parent-child execution with RunCondition logic, instrumentation logging, null delegate handling - TickerQDispatcherTests: constructor guards, dispatch delegation, empty/null context handling, priority routing - TerminateExecutionExceptionTests: all constructors, status defaults, inner exception preservation - SoftSchedulerNotifyDebounceTests: notify callback, duplicate suppression, flush, dispose idempotency, zero-value handling - RestartThrottleManagerTests: debounce coalescing, timer reset, dispose safety - WorkItemTests: constructor validation, null guard, token handling - PaginationResultTests: computed properties (TotalPages, HasPreviousPage, HasNextPage, FirstItemIndex, LastItemIndex), edge cases - TickerResultTests: all internal constructors via reflection - TickerHelperTests: serialization with/without GZip, round-trip, custom JSON options, complex objects https://claude.ai/code/session_01AmFBuKfp4VyfuRCviW7meu Co-authored-by: Claude <noreply@anthropic.com> * added rickerq hub to readme file. * Fix authorize against HostAuthorizationPolicy when set (#591) * Add host policy support to AuthService and new unit tests Refactored AuthenticateHostAsync to support host authorization policies using IAuthorizationService. Added comprehensive unit tests for host mode authentication, including policy checks and multiple identity scenarios. * Rename test method for clarity in AuthServiceHostTests Renamed AuthenticateAsync_HostMode_WithMultipleIdentities_SecondaryIdentitySatisfiesPolicy_ReturnsSuccessWithSecondaryName to ...ReturnsSuccess for improved clarity and consistency. No changes to the test logic or implementation. * Update AuthService to pass HttpContext as auth resource Changed the resource parameter in AuthorizeAsync from null to the current HttpContext. This enables authorization policies to access request-specific context during evaluation, allowing for more flexible and informed authorization decisions. * Added dashboard group name for the openapi (#585) * fixed unit testing and issue of (#586) * added the sample for worker service * fix issue 522 (#587) * Add JSON-serializable tracking fields to TimeTickerEntity (#609) * Add JSON-serializable tracking fields to TimeTickerEntity Added Status, LockHolder, LockedAt, ExecutedAt, ExceptionMessage, SkippedReason, ElapsedTime, RetryCount, and ParentId to TimeTickerEntity<TTicker>, all with [JsonInclude] for serialization. Enhances tracking and state visibility. * Add custom JSON converter for TimeTickerEntity Introduced TimeTickerEntityConverter for explicit serialization/deserialization. Registered converter in Redis provider. Removed redundant [JsonInclude] attributes. Improved property handling and query readability in persistence logic. * revert that * Delete samples/TickerQ.Sample.WebApi/Properties/launchSettings.json * Delete src/TickerQ.Dashboard/Properties/launchSettings.json * Delete src/TickerQ.RemoteExecutor/Properties/launchSettings.json * Delete src/TickerQ.SDK/Properties/launchSettings.json * Delete tests/TickerQ.Tests.WebApi/Properties/launchSettings.json * Update .gitignore to remove Aspire project entries Removed ignore rules for sample Aspire projects. * revert * revert * Fix UseApplicationDbContext implementation #498 (#590) * Fix UseApplicationDbContext implementation * Remove unnecessary comment * Move to async implementation * Fix tests * Add sample project for ApplicationDbContext usage * added unit tests for more edge cases coverage. (#623) * Improve branch sync workflow, migrate to slnx, and clean up repo (#628) - Rewrite sync-version-branches.yml with .sync-exclude support, DotNetVersion fix, conflict auto-resolution, and PR comments when excluded files are modified - Add .sync-exclude listing version-specific EF Core files and TickerQ.sln - Migrate TickerQ.sln to TickerQ.slnx (XML-based, .NET 10+) - Remove tracked SQLite db files (tickerq-console.db*) - Update .gitignore: add *.db, tmpgen/, *.DotSettings.user Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix EF Core type mapping error for MySQL providers in MigrateDefinedCronTickers (#631) Use List<string> instead of HashSet<string> for the allRegisteredFunctions collection used in LINQ-to-SQL queries. Some EF Core providers (Devart MySQL, Oracle MySQL Connector) don't assign type mappings to HashSet parameters in IN expressions, causing InvalidOperationException on EF Core 10. Fixes #621, #624 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Add IsEnabled property to CronTickerEntity with full-stack support (#632) Add ability to enable/disable cron tickers without deleting them. Disabled tickers are filtered out of the scheduling pipeline while remaining visible in the dashboard. Includes toggle endpoint, dashboard UI with confirmation dialog, and fixes flaky test caused by parallel test execution sharing static TickerCancellationTokenManager state. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix TickerModelCustomizer not applying configured schema (#635) TickerModelCustomizer was calling configurations without passing the schema, causing migrations to always use the default "ticker" schema instead of the one set via SetSchema(). Now resolves the schema from TickerQEfCoreOptionBuilder, matching how TickerQDbContext does it. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Replace reflection-based JSON serialization in Dashboard with source … (#638) * Replace reflection-based JSON serialization in Dashboard with source generation Adds DashboardJsonSerializerContext with [JsonSerializable] for all Dashboard types, replacing anonymous objects in endpoints with named DTOs. Wires up TypeInfoResolverChain with source-gen context + DefaultJsonTypeInfoResolver fallback for user-defined entity types. Fixes StringToByteArrayConverter to use JsonDocument.Parse instead of reflection-based Deserialize<object>. Supports projects using JsonSerializerIsReflectionEnabledByDefault=false. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix reflection-free scenarios: register Guid[] in source-gen context, configure ASP.NET HTTP JSON options, and avoid reflection in StringToByteArrayConverter - Add Guid[] to DashboardJsonSerializerContext for minimal API endpoint parameter binding - Register DashboardJsonSerializerContext in ConfigureHttpJsonOptions for app-level serialization - Serialize JsonElement via options chain in StringToByteArrayConverter instead of TickerHelper.RequestJsonSerializerOptions - Add TickerQ.Sample.Dashboard.ReflectionFree sample project Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix Dashboard failing with old Startup.cs pattern (IHost not implementing IApplicationBuilder) (#641) UseTickerQ() passes IHost to DashboardApplicationAction, but in the old Host.CreateDefaultBuilder + Startup.cs pattern, IHost does not implement IApplicationBuilder (only WebApplication does in the new pattern). Fix: Register an IStartupFilter that injects Dashboard middleware into the pipeline when the web host builds it. This works in both patterns: - New pattern: UseDashboardDelegate applies directly (IHost is IApplicationBuilder), and sets MiddlewareApplied flag to prevent IStartupFilter from duplicating. - Old pattern: UseDashboardDelegate skips (IHost is not IApplicationBuilder), and IStartupFilter applies the middleware when the pipeline is built. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Relax abstractions version constraints and fix sync workflow version handling (#645) - Add DotNetAbstractionsVersion property with open range [8.0.0,) to allow consumers to use newer Microsoft.Extensions.*Abstractions packages - Update all csproj files to use $(DotNetAbstractionsVersion) for abstractions - Fix sync workflow to handle any major version dynamically instead of hardcoded patterns (e.g. 10.x → 8.x now works correctly) - Preserve DotNetAbstractionsVersion from target branch during sync Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Relax abstractions version constraints and fix sync workflow version handling (#647) - Add DotNetAbstractionsVersion property with open range [8.0.0,) to allow consumers to use newer Microsoft.Extensions.*Abstractions packages - Update all csproj files to use $(DotNetAbstractionsVersion) for abstractions - Fix sync workflow to handle any major version dynamically instead of hardcoded patterns (e.g. 10.x → 8.x now works correctly) - Preserve DotNetAbstractionsVersion from target branch during sync Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Eliminate inline scripts from Dashboard for CSP script-src 'self' support (#648) Move all inline JavaScript to external files served via middleware, allowing the Dashboard to work with strict Content-Security-Policy headers that block 'unsafe-inline'. - Extract Vite's preload script from embedded index.html at startup and serve it as __tickerq-preload.js (cached, before auth) - Serve runtime config (window.TickerQConfig, window.__dynamic_base__) as __tickerq-config.js endpoint (dynamic, before auth) - Replace inline <script> injection with external <script src="..."> references in the HTML template - Remove SanitizeForInlineScript (no longer needed for external files) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix Dashboard BasePath not working with UsePathBase (#332) (#651) Replace app.Map() with PathBase-aware routing middleware that strips the PathBase prefix from basePath at request time, so the dashboard works regardless of middleware ordering or whether the user includes the PathBase prefix in SetBasePath(). Also fix CombinePathBase to detect when PathBase already ends with basePath (inside a Map branch) to prevent doubled paths in frontend URLs. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix design-time DbContext failure when TickerQEfCoreOptionBuilder is unavailable (#457) (#652) Make OnModelCreating and TickerModelCustomizer null-safe by falling back to Constants.DefaultSchema when the option builder service is not resolvable (design-time migrations, integration tests, Aspire). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix source generator namespace sanitization for assemblies with invalid C# identifier characters (#303) (#657) Use RootNamespace build property when available, falling back to sanitized assembly name (replacing dashes and other invalid characters with underscores). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix empty request deserialization throwing JsonException (#463) (#658) Add null/empty guard in ReadTickerRequest<T> to return default instead of throwing when no request data is provided. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix dashboard date format to use browser locale (#581) (#663) Replace hardcoded DD.MM.YYYY format with Intl.DateTimeFormat using the browser's locale, so dates display in the user's preferred format. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix dashboard date format to use locale-independent YYYY-MM-DD (#666) * Fix dashboard date format to use browser locale (#581) Replace hardcoded DD.MM.YYYY format with Intl.DateTimeFormat using the browser's locale, so dates display in the user's preferred format. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix dashboard date format to use consistent locale-independent YYYY-MM-DD format (#581) Replace locale-dependent Intl.DateTimeFormat(undefined) with formatToParts using en-CA locale for consistent YYYY-MM-DD HH:mm:ss display regardless of the user's browser locale. Also fixes ChainJobsModal toLocaleDateString. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Add per-function concurrency control via maxConcurrency parameter (#670) * Add per-function concurrency control via maxConcurrency attribute parameter (#458) Adds a `maxConcurrency` parameter to `[TickerFunction]` that limits how many instances of a specific function can execute concurrently. When set to 0 (default), concurrency is unlimited (preserving backward compatibility). The limit is enforced via a per-function SemaphoreSlim in the dispatcher, queuing excess work instead of skipping it. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add tests for per-function concurrency gate and dispatcher concurrency behavior Tests cover: - ConcurrencyGate: null for unlimited, semaphore creation, caching, independence - Dispatcher: semaphore acquire/release, release on exception, independent semaphores per function, serialized execution with maxConcurrency=1 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Apply concurrency gate to all QueueAsync call sites Previously only TickerQDispatcher and FallbackBackgroundService used the concurrency gate. This adds it to TickerQSchedulerBackgroundService (the main scheduler loop) and SdkExecutionEndpoint (SDK remote execution). Also moves ITickerFunctionConcurrencyGate to TickerQ.Utilities so the SDK project can resolve it from DI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add scheduler concurrency gate integration tests Verify that TickerQSchedulerBackgroundService correctly uses the concurrency gate when queuing tasks: semaphore acquire/release on success, release on exception, and no semaphore for unlimited functions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Centralize test project versions for cross-branch compatibility (#673) * Centralize test project versions via Directory.Build.props Replace hardcoded TargetFramework and package versions in test projects with MSBuild variables (DotNetVersion), matching the pattern used by src projects. This ensures version compatibility when backporting to v8/v9. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add EntityFrameworkCore test project to PR workflow The pr.yaml workflow only built and ran TickerQ.Tests. Added TickerQ.EntityFrameworkCore.Tests to both the build and test steps. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix design-time DbContext tests failing due to EF Core GetService throw EF Core's GetService<T>() extension throws InvalidOperationException when the service is unresolvable, so the null-conditional (?.) from #652 never executes. Use try-catch to fall back to DefaultSchema. Also add EnableServiceProviderCaching(false) to prevent model cache pollution across tests with the same DbContext type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix AddStackExchangeRedis overriding EF Core persistence provider (#676) * Fix AddStackExchangeRedis overriding EF Core persistence provider (#669) Change Redis persistence registration to TryAddSingleton so EF Core's AddSingleton takes precedence regardless of registration order. Move in-memory provider registration after external providers as a TryAddSingleton fallback. Add dedicated Redis test project with registration precedence tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add functional tests for persistence provider CRUD via managers and DI Exercise ITimeTickerManager, ICronTickerManager, and ITickerPersistenceProvider end-to-end through in-memory, EF Core, and EF Core + Redis configurations. Add InternalsVisibleTo for the new test project. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add concurrency and locking tests for persistence providers Test lock acquisition, optimistic concurrency, dead node recovery, concurrent multi-node access, cron occurrence locking, and per-function concurrency gate (serialized/parallel execution, exception safety). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Use atomic Lua scripts for Redis acquire/release/recovery operations Replace all non-atomic read-check-write patterns with Redis Lua scripts that execute atomically (single-threaded), eliminating TOCTOU race conditions in multi-node deployments. This brings Redis provider parity with EF Core's atomic ExecuteUpdateAsync + WHERE clause guarantees. Three Lua scripts: AcquireScript (status/holder/updatedAt check + lock), ReleaseScript (status/holder check + unlock), RecoverDeadNodeScript (dead node holder match + reset to Idle). 10 methods updated: QueueTimeTickers, QueueTimedOutTimeTickers, AcquireImmediateTimeTickersAsync, ReleaseAcquiredTimeTickers, ReleaseDeadNodeTimeTickerResources, QueueCronTickerOccurrences, QueueTimedOutCronTickerOccurrences, AcquireImmediateCronOccurrencesAsync, ReleaseAcquiredCronTickerOccurrences, ReleaseDeadNodeOccurrenceResources. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix Redis registration test to not require live Redis connection The test was resolving the service provider which triggered an actual Redis connection attempt. Changed to check the service descriptor instead, which validates registration without needing a running server. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Daniel Nordström <daniel.mauritzson@gmail.com> Co-authored-by: Cédric Hulin <hulin.cedric@gmail.com> Co-authored-by: Alex <58499431+AlexeyKhlebnikov@users.noreply.github.com> Co-authored-by: jods <jods4@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jods4 <3832820+jods4@users.noreply.github.com> Co-authored-by: EarlJester <111294669+EarlJester@users.noreply.github.com> Co-authored-by: EarlJester <shon3322@gmail.com> Co-authored-by: stevewoj <steve.wojciechowski@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Wojciech Wentland <wojciech.wentland@int.pl> Co-authored-by: Ingmar Olmaru <48388318+Kedireng@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Arbër Maksuti <arbermaksuti01@gmail.com> Co-authored-by: Daniel Nordström <daniel.mauritzson@gmail.com> Co-authored-by: Cédric Hulin <hulin.cedric@gmail.com> Co-authored-by: Alex <58499431+AlexeyKhlebnikov@users.noreply.github.com> Co-authored-by: jods <jods4@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jods4 <3832820+jods4@users.noreply.github.com> Co-authored-by: EarlJester <111294669+EarlJester@users.noreply.github.com> Co-authored-by: EarlJester <shon3322@gmail.com> Co-authored-by: stevewoj <steve.wojciechowski@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Wojciech Wentland <wojciech.wentland@int.pl> Co-authored-by: Ingmar Olmaru <48388318+Kedireng@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 Automated Branch Sync
This PR syncs recent changes from
mainbranch tonet9.Changes Applied:
Review Notes:
Created automatically by branch sync workflow
Note
Bumps package version in
src/Directory.Build.propsfrom9.0.0-beta.19to9.0.0.Written by Cursor Bugbot for commit d20ec7e. This will update automatically on new commits. Configure here.