Release v1.10.0#309
Merged
erikdarlingdata merged 21 commits intomainfrom May 4, 2026
Merged
Conversation
Replace per-section tinted backgrounds (brown/green/blue/purple) with a single InsightCard style — lifted #1E2228 surface, 1px #353942 border, 8px corner radius, subtle box-shadow. Per-section identity now lives only in the accent-colored header text. Headers move to a shared InsightHeader class (14pt SemiBold). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Insights panel: unify section borders into card style
Revert insight card style refactor (#294)
Adds src/PlanViewer.Core/Resources/WaitStats.json as the single source of truth for wait stat handling, populated only with attributes 1-5 (name, isPreemptive, isExternal, isImplemented, isEnabled). Attributes 6-12 (calc model, applicable operators, descriptions, URLs, internal comment) are intentionally null pending domain-expert review. 52 entries: 46 currently implemented (matched explicitly or via prefix in BenefitScorer / PlanViewerControl / WaitStatsKnowledge), 6 common waits that today fall to the 'Other' bucket (THREADPOOL, BACKUPIO, BACKUPBUFFER, HADR_SYNC_COMMIT, DBMIRROR_DBM_EVENT, SQLTRACE_BUFFER_FLUSH). No code is wired to this file yet — that's part 2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fix/MFA authentication
Match the visual rhythm of the surrounding rows in the dialog (Margin 0,0,0,12 / inter-control Spacing 16). Follow-up nit from review of #298. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…cing Connection dialog: bump test-status row spacing 6 -> 8
…g-seed Seed wait stats config file (#215 part 1)
- Trim WaitStats.json from 52 to 44 entries — drop server-level / instance- level waits (THREADPOOL, BACKUPIO, BACKUPBUFFER, HADR_SYNC_COMMIT, DBMIRROR_DBM_EVENT, SQLTRACE_BUFFER_FLUSH) and connection-setup waits (PREEMPTIVE_OS_AUTHENTICATIONOPS, PREEMPTIVE_OS_LOOKUPACCOUNTSID) that don't appear in plan XML's <WaitStats> element. - Populate attributes 6-8 (showWaitCount, showAverageWaitTime, timeCalculationModel) from existing tool behavior. Attributes 9-12 (applicable operators, descriptions, URLs, internal comment) remain null — those need domain expertise. - Add WaitStatsConfig loader (PlanViewer.Core.Services.WaitStatsConfig) that reads the JSON from an embedded resource at first access and caches by name (case-insensitive). Resource lookup is suffix-based so the file works whether embedded under PlanViewer.Core.* or PlanViewer.Web.* manifest prefixes. - BenefitScorer.IsExternalWait now delegates to WaitStatsConfig.IsExternal. Lookup misses fall back to false, preserving prior default for unknown waits. EmitWaitStatWarnings drops the WaitStatsKnowledge dependency entirely. - Delete WaitStatsKnowledge.cs — its ShowEffectiveLatency flag was the only structural data and is now sourced from WaitStatsConfig.ShowAverageWaitTime. Description/HowToFix were intentionally empty since #215 D3, so nothing of substance is lost. - Wire embedded resource into PlanViewer.Core.csproj and link it + WaitStatsConfig.cs into PlanViewer.Web.csproj (which links Core source files rather than referencing the project). All 75 Core tests pass; Core, App, and Web all build clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Rename "(Secondary)" indicator to "(Read-only)" — read-only intent requests routing to a secondary but doesn't guarantee it (the listener may still route to the primary if no readable replica is available). - Deduplicate SqlConnectionStringBuilder construction by adding a GetConnectionString(username, password, db) overload on ServerConnection and routing both the dialog test path and the runtime path through it. - XAML nits: drop redundant Margin and trailing whitespace on the new Read-only intent checkbox. No behavior change. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
When the user explicitly sets OPTION (MAXDOP 2) in the query, the DOP cap is intentional and not the SQL Server Standard Edition batch-mode limitation, so the warning would be misleading. Suppress in that case (both the Standard-Edition-confirmed Warning path and the unknown-edition Info path). Mirrors the existing Rule 3 (Serial Plan) handling for MAXDOP 1 hints. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…op-2-hint Rule 38: suppress when query has explicit MAXDOP 2 hint
…g-part2 Wire wait stats config as single source of truth (#215 part 2)
… open the first line by default (#305)
PR #305 dropped the only caller of ExpandRowRecursive in FetchGroupedPlansAsync. Delete the now-unreachable method (only its self-recursion remained) plus stale Avalonia/SqlClient usings in the same file. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a .gitattributes that pins LF in the repo for source/config and CRLF for Windows-only scripts (.ps1/.cmd/.bat), then runs `git add --renormalize .` to apply it to existing files. Eliminates the recurring "phantom uncommitted changes" caused by editors re-saving files with CRLF when the repo stores LF. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.7 (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.
Summary
Release v1.10.0. Merging this PR triggers
release.yml, which auto-tagsv1.10.0and publishes Windows / Linux / macOS (x64 + arm64) builds plus a Velopack delta.Highlights since v1.9.0
Features
BenefitScorer/WaitStatsConfigUX changes
None→Query Hash; first row no longer auto-expandsFixes
MAXDOP 2hintInternal / chore
ExpandRowRecursiveafter switch the default grid GroupBy from "None" to "Query Hash" and don't… #305.gitattributes+ one-time line-ending normalization (LF for source/config, CRLF for.ps1/.cmd/.bat) to stop phantom CRLF diffs on WindowsPlanViewer.Appversion 1.9.0 → 1.10.0Insight cards UI was tried (#294) and reverted (#295) — not in this release.
Why minor and not patch
A new connection feature (ApplicationIntent ReadOnly) plus a noticeable default-behavior change in the grid is more than a patch.
Test plan
check-version-bumppasses (1.9.0 → 1.10.0)release.ymlcreates thev1.10.0GitHub release and uploads:PerformanceStudio-win-x64.zipPerformanceStudio-linux-x64.zipPerformanceStudio-osx-x64.zip(.appbundle)PerformanceStudio-osx-arm64.zip(.appbundle)SHA256SUMS.txtwinchannel deltaSIGNPATH_API_TOKENis configured)🤖 Generated with Claude Code