|
1 | | -### 0.9.32 -- 2026-04-16 |
| 1 | +### 0.9.34 — 2026-04-20 |
| 2 | +- Fix: dashboard history reads no longer short-circuit on `IBaseTransportOptions.EnableHistory`; fixes empty history when the dashboard container was started before its queue existed (GitHub #119) |
| 3 | +- Fix: Dashboard UI history exceptions now collapse by default with a per-row expand chevron; previously the full stack trace rendered inline and inflated row height on pages with errors |
| 4 | +- Relational (PostgreSQL / SQL Server / SQLite) read and purge handlers catch `DbException` when the history table does not exist and return empty rather than 500 |
| 5 | +- Redis and Memory read/purge paths rely on native empty-on-missing behavior; same net effect |
| 6 | +- Test: `PostgreSqlHistoryEnabledTests` + `SqlServerHistoryEnabledTests` close the dashboard integration-test coverage gap (previously only Redis, Memory, LiteDb, SQLite had history-enabled coverage) |
| 7 | +- Test: `DashboardStartupTimingTests` regressions the exact startup-before-queue timing bug on SQLite |
| 8 | +- Follow-up: GitHub #120 tracks the underlying options-factory caching defect that caused this and affects other transport options |
| 9 | + |
| 10 | +### 0.9.33 — 2026-04-18 |
| 11 | +- Dependency refresh: 15 low-risk patch/minor bumps + 8 major-version bumps across `Directory.Packages.props` (GitHub #118) |
| 12 | +- `Microsoft.Data.SqlClient` 6.1.3 → 7.0.0 |
| 13 | +- `Npgsql` 8.0.8 → 10.0.2 (2-major leap) |
| 14 | +- `Swashbuckle.AspNetCore` 7.2.0 → 10.1.7; required `Microsoft.OpenApi` 1→2 namespace migration in `DashboardExtensions` and swagger tests |
| 15 | +- `coverlet.collector` 6.0.4 → 8.0.1, `Microsoft.Testing.Extensions.Retry` 1.6.2 → 2.2.1 |
| 16 | +- `Microsoft.Extensions.Configuration.Binder` / `Http` / `Caching.Memory` 9.0.3 → 10.0.6 |
| 17 | +- CVE fix: `System.Security.Cryptography.Xml` overridden to 10.0.6 (NU1903) |
| 18 | +- No API surface changes outside the mandatory Swashbuckle/OpenApi namespace migration |
| 19 | +- `FluentAssertions` remains pinned at 6.12.2 (MIT); net10.0 + net8.0 multi-targeting preserved |
| 20 | + |
| 21 | +### 0.9.32 — 2026-04-16 |
2 | 22 | - Fix: Redis `PurgeMessageHistoryHandler` eliminates redundant `CompletedUtc` round-trip in orphan cleanup path; `HashGet("CompletedUtc")` now executes only when the hash exists (ISSUE-016) |
3 | 23 | - Fix: RelationalDatabase `WriteMessageHistoryHandler.RecordComplete` removes `StartedUtc IS NOT NULL` guard from WHERE clause so `DurationMs=0` is written for sub-millisecond completions (ISSUE-014) |
4 | 24 | - Test: Redis `Purge_Handles_Missing_Hash_Gracefully` asserts `CompletedUtc` is never read in orphan path via `DidNotReceive()` (ISSUE-017) |
|
43 | 63 | - RelationalDatabase: drop `StartedUtc IS NOT NULL` guard from `RecordComplete` UPDATE; the guard made the UPDATE a no-op for sub-ms rows even though the C# computed `DurationMs = 0` correctly |
44 | 64 |
|
45 | 65 | ### 0.9.16 — 2026-04-03 (Dashboard.Api, Dashboard.Ui only) |
46 | | -- Fix: pre-load plugin assemblies into AppDomain at startup so Newtonsoft `TypeNameHandling` can resolve user POCO types during deserialization |
| 66 | +- Fix: pre-load plugin assemblies at startup; needed by Newtonsoft `TypeNameHandling` to resolve user POCO types |
47 | 67 | - Diagnostic logging in `ResolveMessageBodyType` (debug per stage, warning on failure) |
48 | 68 |
|
49 | 69 | ### 0.9.15 — 2026-04-03 (Dashboard.Api, Dashboard.Ui only) |
|
52 | 72 |
|
53 | 73 | ### 0.9.14 — 2026-04-03 |
54 | 74 | - Dashboard UI: replace connection/queue cards with compact tables; remove nav drawer, make title clickable |
55 | | -- Dashboard UI: self-contained mode runs UI and API in one process (for Docker) |
| 75 | +- Dashboard UI: self-contained mode — UI and API in one process (for Docker) |
56 | 76 | - `IConfiguration` overload for JSON-based transport registration (`DashboardConnectionConfig` POCO) |
57 | 77 | - Docker image: `blehnen74/dotnetworkqueue-dashboard` on Docker Hub |
58 | 78 |
|
|
95 | 115 | - History for all 6 transports |
96 | 116 | - `ClearHistoryMonitor` for retention purge, wired into `QueueMonitor` |
97 | 117 | - Dashboard API: history endpoints (list, detail, count, purge) |
98 | | -- Dashboard UI: History tab with status filter, pagination, expandable exceptions, purge |
99 | | -- `MessageId` and `CorrelationId` pushed into `ILogger` scope during handler execution (always on, zero config) |
| 118 | +- Dashboard UI: History tab with status filter, pagination, inline exceptions, purge |
| 119 | +- `MessageId` and `CorrelationId` pushed into `ILogger` scope during handler execution (zero config) |
100 | 120 |
|
101 | 121 | ### 0.9.8 — 2026-03-17 |
102 | 122 | - Fix: `InvokeMovedToErrorQueue` now increments the error counter — messages moved to the error queue were not being counted |
|
121 | 141 | - SQLite transport: `EnableWalMode` option (default `true`) — sets WAL journal mode on new file-based queues |
122 | 142 | - Metrics now prefixed with `dotnetworkqueue.` — in Prometheus, search for `dotnetworkqueue_` to find all queue metrics |
123 | 143 |
|
124 | | -### 0.9.4 — 2026‑03‑11 |
| 144 | +### 0.9.4 — 2026-03-11 |
125 | 145 | - Switch from forked GuerrillaNtp DLLs to official [GuerrillaNtp 3.1.0](https://www.nuget.org/packages/GuerrillaNtp/) NuGet package |
126 | 146 | - Move SNTP time provider (`SntpTime`) into the core library; any transport can now use NTP time, not just Redis |
127 | 147 | - Reuse a single `NtpClient` instance per provider (per official docs) |
|
130 | 150 | - Dashboard API: Named interceptor profiles (`AddInterceptorProfile`) — register once, reference per-queue |
131 | 151 | - Dashboard API: Interceptor misconfiguration and missing message type assemblies now return specific error messages instead of 500 |
132 | 152 |
|
133 | | -### 0.9.3 — 2026‑03‑10 |
| 153 | +### 0.9.3 — 2026-03-10 |
134 | 154 | - Dashboard API consumer tracking — consumers register via HTTP, send heartbeats, get pruned when stale |
135 | 155 | - `DotNetWorkQueue.Dashboard.Client` — standalone client library (no core dependency): |
136 | 156 | - `DashboardApiClient` — typed C# wrapper for all Dashboard API endpoints |
|
139 | 159 | - Dashboard UI: Consumer count badges on queue cards |
140 | 160 | - `DashboardOptions.EnableConsumerTracking`, `ConsumerHeartbeatIntervalSeconds`, `ConsumerStaleThresholdSeconds` |
141 | 161 |
|
142 | | -### 0.9.1 — 2026‑03‑09 |
| 162 | +### 0.9.1 — 2026-03-09 |
143 | 163 | - **Breaking Change** — Replace `App.Metrics` with built-in `System.Diagnostics.Metrics`; `DotNetWorkQueue.AppMetrics` package removed. Use OpenTelemetry.Metrics exporters instead. |
144 | 164 | - **Breaking Change** — Remove `SamplingTypes` enum from `IMetrics.Histogram()` and `IMetrics.Timer()` |
145 | 165 | - **Breaking Change** — Replace `dynamic CollectedMetrics` with typed `MetricsSnapshot GetCollectedMetrics()` on `IMetrics` |
|
163 | 183 | - Two-click delete confirmation for single-record deletes |
164 | 184 | - Edit body for messages in Error status |
165 | 185 |
|
166 | | -### 0.9.0 — 2026‑03‑04 |
| 186 | +### 0.9.0 — 2026-03-04 |
167 | 187 | - Dashboard API for viewing and modifying messages in transports |
168 | 188 | - Polly V7 to V8 |
169 | 189 |
|
170 | | -### 0.8.1 — 2026‑02‑22 |
| 190 | +### 0.8.1 — 2026-02-22 |
171 | 191 | - Fix various long-standing race conditions |
172 | 192 | - Fix multiple heartbeat schedulers sharing state in the same process |
173 | 193 |
|
174 | | -### 0.8.0 — 2026‑01‑05 |
| 194 | +### 0.8.0 — 2026-01-05 |
175 | 195 | - .NET 10 target |
176 | 196 | - Remove out-of-support frameworks |
177 | 197 | - **Breaking Change** — SQL client changed from `System.Data.SqlClient` to `Microsoft.Data.SqlClient`; may affect SQL Server connection strings |
178 | 198 |
|
179 | | -### 0.7.6 — 2024‑02‑02 |
| 199 | +### 0.7.6 — 2024-02-02 |
180 | 200 | - Remove connection objects from DataStore when queue is complete |
181 | 201 |
|
182 | | -### 0.7.5 — 2024‑01‑09 |
| 202 | +### 0.7.5 — 2024-01-09 |
183 | 203 | - Only verify internal container setup in debug mode, as it pins the memory it uses |
184 | 204 |
|
185 | | -### 0.7.4 — 2024‑01‑08 |
| 205 | +### 0.7.4 — 2024-01-08 |
186 | 206 | - Add test for scheduler creation with memory queue |
187 | 207 | - Move two logging messages from info to debug |
188 | 208 | - .NET 8.0 target |
189 | 209 | - Remove queue param for workgroups, as it was no longer being used |
190 | 210 |
|
191 | | -### 0.7.3 — 2023‑11‑28 |
| 211 | +### 0.7.3 — 2023-11-28 |
192 | 212 | - Error notification will not happen if a rollback notification is being performed |
193 | 213 |
|
194 | | -### 0.7.2 — 2023‑11‑28 |
| 214 | +### 0.7.2 — 2023-11-28 |
195 | 215 | - Add notification of queue events to ConsumerQueues |
196 | 216 |
|
197 | | -### 0.7.1 — 2023‑11‑21 |
| 217 | +### 0.7.1 — 2023-11-21 |
198 | 218 | - Add property to obtain creation script from `IQueueCreation`. Supported by SQL Server, SQLite, and PostgreSQL. |
199 | 219 |
|
200 | | -### 0.7.0 — 2023‑10‑26 |
| 220 | +### 0.7.0 — 2023-10-26 |
201 | 221 | - Fix retry logic for SQLite commands; changes in `System.Data.Sqlite` required changes in transport |
202 | 222 | - Switch to `DecorrelatedJitterBackoffV2` for SQL Server, PostgreSQL, and SQLite retries |
203 | 223 |
|
204 | | -### 0.6.9 — 2023‑10‑25 |
| 224 | +### 0.6.9 — 2023-10-25 |
205 | 225 | - Update various packages to latest versions |
206 | 226 | - Replace `OpenTelemetry.Exporter.Jaeger` with `OpenTelemetry.Exporter.OpenTelemetryProtocol` |
207 | 227 | - Remove .NET 5.0 as a supported version |
208 | 228 |
|
209 | | -### 0.6.8 — 2022‑07‑19 |
| 229 | +### 0.6.8 — 2022-07-19 |
210 | 230 | - Update Npgsql |
211 | 231 | - Add initial admin interface |
212 | 232 |
|
213 | | -### 0.6.7 — 2022‑06‑30 |
| 233 | +### 0.6.7 — 2022-06-30 |
214 | 234 | - Update various packages to latest versions |
215 | 235 |
|
216 | | -### 0.6.6 — 2022‑04‑29 |
| 236 | +### 0.6.6 — 2022-04-29 |
217 | 237 | - Fix issue with custom default constraints in SQL Server transport |
218 | 238 |
|
219 | | -### 0.6.5 — 2022‑02‑06 |
| 239 | +### 0.6.5 — 2022-02-06 |
220 | 240 | - Relational database transports now allow additional columns to be used as part of the dequeue |
221 | 241 |
|
222 | | -### 0.6.4 — 2022‑01‑12 |
| 242 | +### 0.6.4 — 2022-01-12 |
223 | 243 | - `ILogger` will now be created using the queue name for the category |
224 | 244 |
|
225 | | -### 0.6.3 — 2022‑01‑11 |
| 245 | +### 0.6.3 — 2022-01-11 |
226 | 246 | - Remove Polly Bulkhead; does not correctly work with our task-limited scheduler |
227 | 247 | - Remove `MaxQueue` feature from async processing, as it depended on Polly Bulkheads |
228 | 248 | - Switch to `ILogger` from `Microsoft.Extensions.Logging.Abstractions` |
229 | 249 |
|
230 | | -### 0.6.2 — 2021‑12‑19 |
| 250 | +### 0.6.2 — 2021-12-19 |
231 | 251 | - .NET 6.0 target |
232 | 252 |
|
233 | | -### 0.6.1 — 2021‑09‑28 |
| 253 | +### 0.6.1 — 2021-09-28 |
234 | 254 | - Producer will throw an exception on a non-public class used as a message due to internal delegate handling limitations |
235 | 255 |
|
236 | | -### 0.6.0 — 2021‑09‑07 |
| 256 | +### 0.6.0 — 2021-09-07 |
237 | 257 | - Switch from https://opentracing.io/ to https://opentelemetry.io/ |
238 | 258 | **Breaking Change** — OpenTracing always added an entry to headers; OpenTelemetry only adds entries if enabled. Queues must be empty before updating. |
239 | 259 |
|
240 | | -### 0.5.4 — 2021‑05‑19 |
| 260 | +### 0.5.4 — 2021-05-19 |
241 | 261 | - Fix error with adding items to a memory queue that has started shutdown |
242 | 262 | - Asking for list of error messages should not throw if transport fails; added flag to indicate if errors are loaded |
243 | 263 |
|
244 | | -### 0.5.3 — 2021‑05‑18 |
| 264 | +### 0.5.3 — 2021-05-18 |
245 | 265 | - Fix performance issue with in-memory queues |
246 | 266 |
|
247 | | -### 0.5.2 — 2021‑04‑18 |
| 267 | +### 0.5.2 — 2021-04-18 |
248 | 268 | - LiteDB transport now supports direct and memory connections; all connections must be made in the same process |
249 | 269 |
|
250 | | -### 0.5.1 — 2021‑04‑00 |
| 270 | +### 0.5.1 — 2021-04-00 |
251 | 271 | - LiteDB transport |
252 | 272 | - .NET 5 target; many references do not yet support 5.0 |
253 | 273 |
|
254 | | -### 0.5.0 — 2020‑12‑08 |
| 274 | +### 0.5.0 — 2020-12-08 |
255 | 275 | - Change how connections are set up; **breaking change** to support generic connection settings not expressible in connection strings |
256 | 276 | - .NET 4.8 target |
257 | 277 | - .NET Standard 2.0 target for SQLite transport; Microsoft SQLite transport deprecated |
258 | 278 | - SQL Server transport now supports creating queues in schemas other than `dbo` |
259 | 279 |
|
260 | | -### 0.4.6 — 2020‑09‑02 |
| 280 | +### 0.4.6 — 2020-09-02 |
261 | 281 | - Redis transport: re-cache LUA scripts when no longer in cache; fixes issue with server restarts |
262 | 282 |
|
263 | | -### 0.4.5 — 2020‑02‑28 |
| 283 | +### 0.4.5 — 2020-02-28 |
264 | 284 | - Make previous error types and count available to message processing |
265 | 285 | - Consumer queues now remove errors by default after 30 days; configurable |
266 | 286 |
|
267 | | -### 0.4.4 — 2019‑12‑23 |
| 287 | +### 0.4.4 — 2019-12-23 |
268 | 288 | - Fix issue with SQL Server transport and heartbeat reset |
269 | 289 |
|
270 | | -### 0.4.3 — 2019‑10‑29 |
| 290 | +### 0.4.3 — 2019-10-29 |
271 | 291 | - Fix issue with registration of message rollback |
272 | 292 |
|
273 | | -### 0.4.2 — 2019‑10‑29 |
| 293 | +### 0.4.2 — 2019-10-29 |
274 | 294 | - .NET 4.6.1 target |
275 | 295 | - Upgrade packages to latest versions |
276 | 296 |
|
277 | | -### 0.4.1 — 2019‑06‑08 |
| 297 | +### 0.4.1 — 2019-06-08 |
278 | 298 | - Fix issue with retry policies using seconds instead of milliseconds |
279 | 299 |
|
280 | | -### 0.4.0 — 2019‑06‑02 |
| 300 | +### 0.4.0 — 2019-06-02 |
281 | 301 | - Remove RPC |
282 | 302 | - Implement OpenTracing https://opentracing.io/ |
283 | 303 | - Fix message interception |
284 | 304 |
|
285 | | -### 0.3.1 — 2019‑04‑26 |
| 305 | +### 0.3.1 — 2019-04-26 |
286 | 306 | - Correct versioning for NuGet publish |
287 | 307 |
|
288 | | -### 0.3.0 — 2019‑04‑26 |
| 308 | +### 0.3.0 — 2019-04-26 |
289 | 309 | - All modules now target .NET 4.7.2 and .NET Standard 2.0 |
290 | 310 | - **Breaking Change** — changes to metrics interface to switch to AppMetrics |
291 | 311 | - Deprecated Metrics.NET |
292 | 312 | - `DotNetWorkQueue.AppMetrics` replaces `DotNetWorkQueue.Metrics.Net` |
293 | 313 |
|
294 | | -### 0.2.1 — 2017‑09‑30 |
| 314 | +### 0.2.1 — 2017-09-30 |
295 | 315 | - Refactoring to better share logic between transports |
296 | 316 | - **Breaking Change** — fixed various spelling mistakes affecting public signatures |
297 | 317 | - **Breaking Change** — fixed typo with internal Redis property; queues should be drained before upgrading |
|
300 | 320 | - **Breaking Change** — heartbeat configuration now uses Schyntax format instead of timespan |
301 | 321 | - New SQLite transport using Microsoft driver |
302 | 322 |
|
303 | | -### 0.1.10 — 2017‑03‑19 |
| 323 | +### 0.1.10 — 2017-03-19 |
304 | 324 | - Route support for SQL Server, SQLite, Redis, and PostgreSQL transports |
305 | 325 |
|
306 | | -### 0.1.9 — 2016‑10‑08 |
| 326 | +### 0.1.9 — 2016-10-08 |
307 | 327 | - Fix issue with deleting messages with errors for SQL Server, SQLite, PostgreSQL transports |
308 | 328 |
|
309 | | -### 0.1.8 — 2016‑09‑24 |
| 329 | +### 0.1.8 — 2016-09-24 |
310 | 330 | - Refactor default task scheduler to allow easier extension |
311 | 331 |
|
312 | | -### 0.1.7 — 2016‑08‑16 |
| 332 | +### 0.1.7 — 2016-08-16 |
313 | 333 | - Fix issue with PostgreSQL transport returning wrong message body |
314 | 334 | - Update to msgpack.cli 8.0 for Redis transport |
315 | 335 |
|
316 | | -### 0.1.6 — 2016‑08‑12 |
| 336 | +### 0.1.6 — 2016-08-12 |
317 | 337 | - PostgreSQL transport |
318 | 338 |
|
319 | | -### 0.1.5 — 2016‑08‑04 |
| 339 | +### 0.1.5 — 2016-08-04 |
320 | 340 | - Recurring job scheduler |
321 | 341 | - Metrics for LINQ serialization, compiling, and execution |
322 | 342 |
|
323 | | -### 0.1.4 — 2016‑06‑22 |
| 343 | +### 0.1.4 — 2016-06-22 |
324 | 344 | - Minor refactor to poison message handling |
325 | 345 | - Redis-on-Windows integration tests |
326 | 346 | - Refactor `IConnectionInformation` to be immutable |
327 | 347 | - Send LINQ expressions as queue items |
328 | 348 | - Fix scope issue with scheduler and multiple consumer queues |
329 | 349 |
|
330 | | -### 0.1.3 — 2016‑02‑18 |
| 350 | +### 0.1.3 — 2016-02-18 |
331 | 351 | - Fix formatting issue with poison message exception |
332 | 352 | - Fix formatting issue with user/system exception |
333 | 353 | - Don't run monitor delegates if queue is shutting down |
334 | 354 | - SQLite transport |
335 | 355 |
|
336 | | -### 0.1.2 — 2015‑11‑22 |
| 356 | +### 0.1.2 — 2015-11-22 |
337 | 357 | - Fix issue with removing SQL Server queues |
338 | 358 | - Fix issue with message expiration module running even if transport doesn't support expiration |
339 | 359 |
|
340 | | -### 0.1.0 — 2015‑11‑03 |
| 360 | +### 0.1.0 — 2015-11-03 |
341 | 361 | - Initial release to GitHub |
342 | 362 |
|
343 | 363 |
|
|
0 commit comments