Quartz.NET 4.2
Theme: "Quartz.NET, declared." 4.0 made the API a promise, 4.1 made schedulers runtime-managed and the dashboard remote-capable. 4.2 closes the two gaps every comparison names — declaring a job in one attribute with the cron checked by the compiler, and telling one job to run after another — and publishes performance numbers a competitor cannot wave away. Everything is additive (default interface members, context objects, nullable columns); the one schema change is a generated database/migrations/4.2/ that is safe under a mixed 4.1/4.2 cluster.
Decided by @lahma on 2026-09-14 from the landscape analysis (TickerQ 10.4.0, Hangfire 1.8.25, our 4.1 inventory and benchmark suite): scope A–G below; continuations store-owned with the schema change; the analyzer inside Quartz.nupkg; no outward reaction to TickerQ's comparison table or benchmark PR — profile where we lag instead.
| Order | Item | Issue | After |
|---|---|---|---|
| 0 | AGENTS.md trimmed so 4.2's conventions fit | #3810 | — |
| 0 | Comparison page, coming-from guides, stale claims | #3808 | — (docs only, runs beside anything) |
| 1 | Profile every surface where we lag (D1) | #3802 | — |
| 2 | Cron next-occurrence fast path | #3801 | D1's ranking |
| 3 | Head-to-head harness + published numbers (D2), RAMJobStore fire-path cuts (D3) | #3802 | #3801 |
| 4 | Quartz.Analyzers: compile-time cron/timeout checks |
#3803 | — |
| 5 | [QuartzJob]/[CronTrigger] + source generator |
#3804 | #3803 |
| 6 | Continuations: store + API + the 4.2 migration | #3805 | — |
| 7 | Continuations: dashboard, HTTP API, files, docs | #3806 | #3805 |
| 8 | Retries exhausted + jitter | #3807 | #3805 |
| 9 | ADO-backed execution history (same migration folder) | #3771 | #3805 |
| 10 | Store-attached dashboard targets | #3772 | #3771 |
| filler | Health check: stalled firing | #3809 | — |
Left for 4.3, unassigned: #3770 (operation catalogue), #3773 (agent target), #3774 (fleet pane), #3775 (Aspire resource), #3687 (document DB), #3720 (Quartz.Cron — interesting only after #3801 makes the parser fast).
Gates before the tag, as 4.1's: pack dry run (14 nupkg + 10 snupkg, 0 warnings, floors unchanged, analyzers/dotnet/cs/Quartz.Analyzers.dll present); baseline delta additions only, DIMs marked; database/ = the generated 4.2 migration and nothing else (VerifyMigrations); fresh-user consumer from the pack; a PostgreSQL soak with continuations and a runtime tenant; docs check-links + lint + VerifyDocsSnippets; examples smoke + trimmed and native-AOT canary; and one new gate: the 4.2 migration applied under a running 4.1 node, then the node rolled to 4.2, with no lost or doubled firing. Release notes accumulate in the v4.2.0 draft as items merge.
Source: quartznet/quartznet