Skip to content

QS Overview review followups, brand sweep, version unification#315

Merged
erikdarlingdata merged 1 commit intodevfrom
fix/qs-overview-and-versioning
May 9, 2026
Merged

QS Overview review followups, brand sweep, version unification#315
erikdarlingdata merged 1 commit intodevfrom
fix/qs-overview-and-versioning

Conversation

@erikdarlingdata
Copy link
Copy Markdown
Owner

Summary

Three logical chunks bundled into one PR — followups from a multi-agent review of c90bff7 (multi-DB Query Store overview).

QueryStoreOverviewControl fixes

  • Dim-text rule violation: #888888 → theme ForegroundMutedBrush at line 463.
  • Modal-on-every-slicer-drag: ShowWaitStatsErrors modal replaced with an inline badge in the wait-stats panel header. Tooltip lists each [database] message. Clears automatically on a successful refresh.
  • CTS race in OnSlicerRangeChanged: stop disposing the previous CTS while the in-flight refresh still holds its token. Capture the new CTS in a local before assigning to _cts. The DetachedFromVisualTree handler still disposes on teardown — safe because nothing else is racing at that point.
  • Swallowed catch { }: replaced with a RefreshErrorBadge in Row 0 next to the LoadingBar. Tooltip surfaces ex.Message so a failed refresh no longer silently shows a blank chart. Cleared at the start of each new refresh attempt.

Brand sweep ("SQL Performance Studio" → "Performance Studio")

User-visible surfaces only:

  • Issue templates (bug_report.yml, config.yml)
  • .csproj <Product> tags (Core, Web, Cli, Installer; App via inherited)
  • VSIX DisplayName + Description, .vsct ButtonText, VSPackage.resx
  • AssemblyInfo Description + Product
  • All MessageBox titles and error strings in AnalyzePlanCommand.cs
  • Locate-app dialog title and file filter in AppLauncher.cs
  • install.cmd user-visible messages, installer console banner

Compatibility surfaces left unchanged: pipe name SQLPerformanceStudio_OpenFile, registry key SOFTWARE\DarlingData\SQLPerformanceStudio, internal-ID Program-Files paths, legacy plan-b candidate. Spaced "SQL Performance Studio" Program-Files paths preserved as additional fallbacks so existing installs still launch.

Version unification

  • New src/Directory.Build.props sets Version, Authors, Company, Product, Copyright once. Picked up by every SDK-style project under src/.
  • Removed duplicated metadata from PlanViewer.App, Core, Cli, Web, Ssms.Installer csprojs (all inherit now).
  • PlanViewer.Ssms is legacy non-SDK; bumped manually:
    • Properties/AssemblyInfo.cs 1.0.0.0 → 1.10.0.0 (×2)
    • source.extension.vsixmanifest 1.0.0 → 1.10.0
  • Inheritance verified locally: clean Release build of PlanViewer.Cli and PlanViewer.App both report ProductVersion=1.10.0+<sha>, FileVersion=1.10.0.0, ProductName=Performance Studio.
  • Tests (tests/) and server (server/) projects are outside src/ and unaffected.

Test plan

  • Build the full solution from scratch — confirm 0 errors
  • Drag the QS Overview slicer rapidly — confirm no modal pops; if a wait-stats error occurs, ⚠ badge appears with tooltip on hover
  • Disconnect SQL briefly and drag the slicer — confirm "⚠ refresh failed" badge appears next to the loading bar; restore connection and drag — badge clears
  • Right-click an execution plan in SSMS — context menu reads "Open in Performance Studio"
  • Open About dialog or check assembly properties — Performance Studio and 1.10.0
  • Build the SSMS VSIX — confirm 1.10.0 in the extension metadata
  • If you have a legacy install at C:\Program Files\SQL Performance Studio\ available — confirm it still launches via the SSMS context menu

🤖 Generated with Claude Code

QueryStoreOverviewControl fixes:
- Replace #888888 with theme ForegroundMutedBrush (dim-text rule)
- Convert wait-stats error modal to inline warning badge with tooltip
- Drop dispose-while-in-flight on the OnSlicerRangeChanged CTS race
- Replace blanket catch{} with an inline RefreshErrorBadge so failed
  refreshes surface their SqlException instead of silently blanking

Brand sweep ("SQL Performance Studio" -> "Performance Studio"):
User-visible surfaces only — issue templates, .csproj <Product>,
VSIX manifest, vsct ButtonText, VSPackage.resx, AssemblyInfo,
all SSMS dialog titles + error messages, install.cmd, installer
console banner. Internal IDs (pipe name, registry key) and
Program-Files paths kept; legacy spaced "SQL Performance Studio"
Program-Files paths kept as additional fallbacks so existing
installs still launch.

Version unification:
- New src/Directory.Build.props centralizes Version + identity
  for all SDK-style projects under src/
- Removed duplicated <Version>/<Authors>/<Company>/<Product>/
  <Copyright> from App, Core, Cli, Web, Installer csprojs
- PlanViewer.Ssms is legacy non-SDK and bumped manually:
  AssemblyInfo.cs 1.0.0.0 -> 1.10.0.0, vsixmanifest 1.0.0 -> 1.10.0
- Tests/server projects are outside src/ and unaffected

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit eb1f4d5 into dev May 9, 2026
2 checks passed
@erikdarlingdata erikdarlingdata deleted the fix/qs-overview-and-versioning branch May 9, 2026 16:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant