Skip to content

Sync main → net9#770

Merged
arcenox merged 122 commits intonet9from
sync-main-to-net9-20260321-183216
Mar 21, 2026
Merged

Sync main → net9#770
arcenox merged 122 commits intonet9from
sync-main-to-net9-20260321-183216

Conversation

@arcenox
Copy link
Copy Markdown
Collaborator

@arcenox arcenox commented Mar 21, 2026

Automated Branch Sync

This PR merges recent changes from main into net9.


Created automatically by branch sync workflow

arcenox and others added 30 commits November 16, 2025 16:26
* 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
* 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
* 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
* Fix schema assignment logic in UseTickerQDbContext and add SetSchema method

* Refactor UseTickerQDbContext to simplify schema assignment logic
* Checkpoint from VS Code for coding agent session

* Remove documentation on separating job queueing from job processing
* Add retry logic improvements and unit tests for ExecuteTaskAsync

* Refactor retry test setup to use SetupRetryTestFixture for consistency
* 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>
arcenox and others added 25 commits March 21, 2026 13:04
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update LICENSE, CLA.md, README.md to reference Arcenox LLC
- Add Authors and Copyright tags to Directory.Build.props
- Clean trailing whitespace in LICENSE

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace cherry-pick workflow with merge-based sync (handles renames/deletions naturally)
- Add .sync-overrides config for generic version replacement rules
- Apply version overrides from config instead of hardcoded sed commands
- Post PR comment with sync details (restored files + version overrides applied)
- Auto-resolve conflicts: excluded files keep target, everything else takes main

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The .sync-overrides file only exists on main, but was being loaded
from the target branch (net8/net9) before the merge. Load it from
main using git show instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Load .sync-exclude from main (not target branch) so it's always up to date
- Escape regex special characters in sed replacements (fixes [x.0.0,y.0.0) values)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Values like [8.0.0,9.0.0) contain regex special chars that break sed.
Use awk string matching instead which handles literal characters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…on in CI

- Replace hardcoded FlexLabs.Upsert version with $(DotNetVersion)
- Replace hardcoded EF Core Sqlite version in benchmarks with $(DotNetVersion)
- Add overrides for tests/Directory.Build.props and sample/benchmark csproj files
- Detect .NET version and solution file dynamically in PR and build workflows
- Fix PR comment table formatting (property column was empty)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- src/Directory.Build.props is the single source of truth for
  TargetFramework, Version, DotNetVersion, DotNetAbstractionsVersion
- tests/samples/benchmarks import from src/ and disable packaging
- Replace all hardcoded package versions with $(DotNetVersion)
- Simplify .sync-overrides to only override src/Directory.Build.props
- Detect .NET version dynamically in PR and build workflows

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Uses IDbContextOptionsConfiguration<T> which only exists in EF Core 10.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Race condition: PR may not be indexed when comment step runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clear host-level endpoint routing state in MapPathBaseAware before
entering the dashboard branch pipeline. When host-level Map*() calls
(e.g. MapStaticAssets().ShortCircuit()) activate endpoint routing,
the EndpointRoutingMiddleware may set an endpoint on the HttpContext.
The branch's own UseRouting() then skips evaluation (it short-circuits
when GetEndpoint() is non-null), causing SignalR negotiate/WebSocket
requests to hit the wrong endpoint and return 405.

The fix calls SetEndpoint(null) and clears RouteValues when the
dashboard base path matches, ensuring the branch's routing middleware
re-evaluates against dashboard endpoints.

Closes #456

Co-authored-by: Alberti's MacMini <albert@Albertis-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
#721)

Replace HasDefaultValue(true) with HasDefaultValueSql("1") on the
IsEnabled property in CronTickerConfigurations. The former emits
DEFAULT True in migration SQL, which is invalid on Oracle (ORA-00904).
HasDefaultValueSql("1") produces DEFAULT 1, valid across SQL Server,
PostgreSQL, SQLite, and Oracle. HasSentinel(true) ensures EF Core
still sends explicit false values instead of deferring to the DB default.

Co-authored-by: Alberti's MacMini <albert@Albertis-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- build.yml: trigger on release publish instead of push to main/net8/net9
- sync-version-branches.yml: trigger on release publish instead of push to main
- Both keep workflow_dispatch as manual fallback
- Updated Discord notification for release context

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tests run before packaging — if tests fail, no NuGet packages are published.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add Source Link and symbol package support

- Enable Source Link with Microsoft.SourceLink.GitHub for debugger source stepping
- Generate .snupkg symbol packages alongside .nupkg
- Enable deterministic builds and CI build flag
- Embed untracked sources for complete debugging experience

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix sync-exclude, remove src/src.sln, organize TickerQ.slnx hub folder

- Fix .sync-exclude: TickerQ.sln → TickerQ.slnx (correct filename)
- Remove src/src.sln (replaced by TickerQ.slnx on main)
- Move hub projects to dedicated /hub/ folder in TickerQ.slnx

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add src/src.sln to sync-exclude to protect it on net8/net9 branches

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Convert Windows timezone IDs (e.g. "Eastern Standard Time") to IANA
format (e.g. "America/New_York") before sending to the frontend, so
Intl.DateTimeFormat can correctly render dates in the configured
scheduler timezone. Also add defensive fallback in the frontend
formatDate() for invalid timezone IDs, and Windows timezone ID
pattern matching in getDateFormatRegion() for correct US/EU date
format selection.

Co-authored-by: Alberti's MacMini <albert@Albertis-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Skip TickerQ initialization when running inside design-time tools (#712)

Build-time tools like dotnet-getdocument (used by
Microsoft.Extensions.ApiDescription.Server for OpenAPI generation)
invoke Program.Main to build the host, which triggers UseTickerQ →
InitializeTickerQ → SeedDefinedCronTickers. This causes database
queries in a context where no valid connection string exists, crashing
the build.

Add an Assembly.GetEntryAssembly() guard that detects dotnet-* tool
entry assemblies and short-circuits InitializeTickerQ before any
DB-touching or background service initialization occurs.

Closes #712

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Defer TickerQ initialization to host lifecycle instead of inline UseTickerQ (#712)

Replace the Assembly.GetEntryAssembly() heuristic with a proper lifecycle-based
approach: move all I/O-bound initialization (function discovery, DB seeding,
external provider startup) from inline UseTickerQ into a dedicated
TickerQInitializerHostedService that runs during host.StartAsync().

Design-time tools (dotnet-getdocument, dotnet-ef, etc.) build the host but
never start it, so the hosted service naturally never runs — no heuristics needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Alberti's MacMini <albert@Albertis-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…idation (#764)

- Add lock to Build() so concurrent hosts (e.g. WebApplicationFactory tests)
  don't overwrite a populated FrozenDictionary with an empty one (fixes #705)
- Initialize static FrozenDictionary fields to .Empty instead of null to
  prevent NullReferenceException when UseTickerQ() is not called
- Add IsBuilt flag to distinguish "UseTickerQ() not called" from
  "no [TickerFunction] methods found"
- Add TickerQStartupValidator IHostedService that warns at startup when
  UseTickerQ() is missing or no ticker functions are registered
- Update test ResetProvider() to use FrozenDictionary.Empty and reset IsBuilt

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The sample project uses PackageReference with $(Version) which resolves
to the version being built. Restoring the full solution fails because
the package isn't published yet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes sync build failures on net8/net9 branches where $(Version) resolved
to a version that doesn't exist on NuGet yet. All samples now consistently
use ProjectReference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/build.yml
#	.github/workflows/sync-version-branches.yml
#	.sync-exclude
#	TickerQ.slnx
#	samples/TickerQ.Sample.WorkerService/TickerQ.Sample.WorkerService.csproj
#	src/Directory.Build.props
#	src/TickerQ.Dashboard/DependencyInjection/ServiceCollectionExtensions.cs
#	src/TickerQ.Dashboard/Endpoints/DashboardEndpoints.cs
#	src/TickerQ.Dashboard/wwwroot/src/utilities/dateTimeParser.ts
#	src/TickerQ.EntityFrameworkCore/Configurations/CronTickerConfigurations.cs
#	src/TickerQ.EntityFrameworkCore/Infrastructure/BasePersistenceProvider.cs
#	src/TickerQ.EntityFrameworkCore/Infrastructure/MappingExtensions.cs
#	src/TickerQ.Utilities/TickerFunctionProvider.cs
#	src/TickerQ/DependencyInjection/TickerQServiceExtensions.cs
#	tests/TickerQ.Tests/DashboardPathBaseTests.cs
#	tests/TickerQ.Tests/TickerFunctionProviderTests.cs
@arcenox arcenox added automated Automated PR sync Branch synchronization net9 Target: net9 branch labels Mar 21, 2026
@arcenox
Copy link
Copy Markdown
Collaborator Author

arcenox commented Mar 21, 2026

Sync Details

Excluded files restored from net9

These files have version-specific implementations and were kept as-is (defined in .sync-exclude).

  • src/TickerQ.EntityFrameworkCore/Infrastructure/MappingExtensions.cs
  • src/TickerQ.EntityFrameworkCore/Infrastructure/BasePersistenceProvider.cs
  • src/TickerQ.EntityFrameworkCore/Infrastructure/TickerQueryExtensions.cs
  • src/TickerQ.EntityFrameworkCore/Customizer/CustomizerServiceDescriptor.cs
  • TickerQ.slnx
  • src/src.sln

Version overrides applied

Rules from .sync-overrides were applied to match net9 versions.

File Property Change
src/Directory.Build.props Version 10.2.3 -> 9.2.3
src/Directory.Build.props TargetFramework net10.0 -> net9.0
src/Directory.Build.props DotNetVersion [10.0.0,11.0.0) -> [9.0.0,10.0.0)

@arcenox arcenox merged commit 2871b5e into net9 Mar 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated Automated PR net9 Target: net9 branch sync Branch synchronization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants