Release prep for v3.0.0 (version bump, upgrades rename, changelog)#1126
Merged
Conversation
- Bump Version/AssemblyVersion/FileVersion/InformationalVersion to 3.0.0 in Dashboard, Lite, Installer, and Installer.Core. The Installer/Installer.Core AssemblyVersion bump is load-bearing: ScriptProvider.FilterUpgrades only applies an upgrade folder whose ToVersion <= the installer's own assembly version, so without it the 2.11.0-to-3.0.0 folder would be silently skipped. - Rename upgrades/2.11.0-to-2.12.0 -> upgrades/2.11.0-to-3.0.0. - Write the [3.0.0] CHANGELOG section: an Important note plus the gaps the release audit flagged (code-review hardening sweep #1093-#1108, the off-UI-thread perf overhaul #1116/#1121, object/index-level collection #1103, the Recommendations/Apply-Fix engine, #1085, #1092/#1122, #1096, #754, #749, #768), and fix the stale "2.11.0 -> 2.12.0" upgrade-script reference. Validation: Installer unit tests 61/61; Installer integration tests 19/19 against live SQL2022 (idempotency, version detection, adversarial upgrade paths) at the 3.0.0 assembly version. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…FinOps object/index analysis) Lite collector table/count 24->25 with the new index_object_stats row; Dashboard collector count 32->33; FinOps description gains the per-object table/index size/growth/usage/locking analysis (#1103). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…arseable events The second-phase parsers (collect.process_blocked_process_xml -> sp_HumanEventsBlockViewer, collect.process_deadlock_xml -> sp_BlitzLock) only marked a captured event processed when the parse produced >= 1 row. Events that legitimately parse to zero rows -- a self-block or non-lock wait (e.g. a memory-grant RESOURCE_SEMAPHORE wait that tripped blocked_process_threshold, reported as a session blocking itself), or an unparseable deadlock graph -- were never marked, so every cycle re-ran the CPU-intensive parser over the same dead events and re-logged a perpetual NO_RESULTS; the staging table never drained. Both processors now mark events processed after any clean parse run and log SUCCESS. The XACT_STATE()/CATCH paths still roll back and retry genuine failures. The blocked-process processor's half-open parse window (event_time < @end_date) also dropped single-timestamp batches (MIN = MAX, the common case when a monitor loop emits all reports at one instant); the upper bound is padded +1s to match the deadlock processor, which already did this. Validated: sql2017's real 11-event self-block backlog drains (SUCCESS, no re-loop); sql2025's 733 real chains + 81k parsed deadlocks confirm the parse path is unchanged. Regression test tools/test_blocked_process_processor.sql (real self-block + two-session samples at a single timestamp) passes all assertions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…" edition
SERVERPROPERTY('Edition') returns the legacy "SQL Azure" string on Azure SQL
Database, which showed verbatim in the FinOps Server Inventory Edition column.
Both the Server Inventory live query (LocalDataService.FinOps.ServerProperties)
and the server_properties collector (RemoteCollectorService.ServerProperties)
now map engine edition 5 to "Azure SQL Database (<service tier>)" using
DATABASEPROPERTYEX(DB_NAME(),'Edition') -- e.g. "Azure SQL Database (General
Purpose)". On-prem editions are unchanged; the recommendation engine only
string-matches "Enterprise", which neither value contains, so logic is unaffected.
Verified live against an Azure SQL DB GP-serverless test instance: the Server
Inventory Edition column now reads "Azure SQL Database (General Purpose)".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mirror the Lite edition fix (b144697) across the Dashboard and the SQL-side collectors so "SQL Azure" is never shown or stored for an Azure SQL DB anywhere: - Dashboard FinOps Server Inventory live query (DatabaseService.FinOps.Inventory) - install/53_collect_server_properties.sql (stored server_properties.edition) - install/42_scheduled_master_collector.sql (server inventory edition) All map engine edition 5 to "Azure SQL Database (<service tier>)" via DATABASEPROPERTYEX(DB_NAME(),'Edition'); on-prem editions take the unchanged ELSE branch. The licensing-recommendation queries (Lite + Dashboard) are left raw and identical -- they only do a Contains("Enterprise") check and never display the edition for Azure. Verified: Dashboard CASE returns "Azure SQL Database (General Purpose)" against a live Azure SQL DB; both install scripts deploy clean (0 errors) to SQL2019 and the Dashboard builds with 0 warnings/errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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.
Release prep for v3.0.0 (last release v2.11.0;
devis 288 commits ahead ofmain). Called 3.0.0 rather than 2.12.0 to reflect the scale — a codebase-wide hardening pass, a major UI-responsiveness overhaul, object/index-level collection, and the Recommendations/Apply-Fix engine — even though there are no breaking changes (existing installs upgrade in place).What's in this PR
AssemblyVersionbump is load-bearing —ScriptProvider.FilterUpgradesskips any upgrade folder whose ToVersion > the installer's own assembly version, so without it the upgrade folder would be silently skipped and existing users stamped back at 2.11.0.upgrades/2.11.0-to-2.12.0/→upgrades/2.11.0-to-3.0.0/(pure rename; the four scripts are idempotency-guarded and unchanged).CHANGELOG.md[3.0.0]section — kept the existing detailed entries, added an Important note, and filled the audit-flagged gaps: code-review hardening sweep (Fix shared-lib defects from Fable code review (chunk 1) #1093–Fix SQL schema/job/validation defects from Fable code review (chunk 7) #1108), off-UI-thread perf overhaul (Perf: fix long-session leaks in both apps (P4) #1116/Perf: off-thread alert-check DuckDB queries (Lite UI freeze under load) #1121), object/index collection ([FEATURE] Collect & visualize table/index sizes, growth, index usage, and per-object locking (Dashboard + Lite) #1103), Recommendations/Apply-Fix engine, [BUG] FinOps recommends Standard Edition even though AGs running #1085, [BUG] server‑tab alert badge can't be cleared from any obvious place #1092/Lite: Dismiss Selected clears the server-tab badge too (#1092) #1122, Exclude CDC capture jobs from long-running query alerts #1096, [QUESTION] #754, [QUESTION] Failed Job Alerts #749, [FEATURE] Allow custom database file locations during install #768; fixed the stale2.11.0 → 2.12.0reference.Validation
IdempotencyTests/VersionDetectionTests/AdversarialTests, which use a throwawayPerformanceMonitor_TestDB): 19/19 at the 3.0.0 assembly — covers install idempotency, version detection, and adversarial upgrade paths (upgrade-failure-doesn't-drop-DB, cancellation-mid-upgrade, partial-install recovery, restricted-permissions), and confirms the renamed2.11.0-to-3.0.0folder is applied at 3.0.0.Still needed before the release tag (NOT in this PR)
#772gate.[3.0.0]CHANGELOG wording.dev: thedev → mainrelease PR (CIcheck-version-bumpwill now pass), then publish the GitHub release (not just a tag push) so SignPath signing + Velopack packaging fire.🤖 Generated with Claude Code