Skip to content

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

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

QS Overview review followups, brand sweep, version unification#315
erikdarlingdata merged 1 commit into
devfrom
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
erikdarlingdata added a commit that referenced this pull request May 19, 2026
PR #315 moved <Version> from App.csproj into src/Directory.Build.props
but left four workflows still parsing the old path — every one of them
would have silently produced an empty VERSION on the next release:

- release.yml: would tag as "v" and break Velopack pack/upload
- check-version-bump.yml: empty == empty would block legit bumps
- nightly.yml: nightly tag becomes "-nightly.YYYYMMDD"
- deploy-web.yml: also tried to write <Version> back into Web csproj,
  which no longer has one — drop the obsolete sync step entirely
  (both csprojs now inherit from Directory.Build.props automatically)

Version bumps for 1.11.0:
- src/Directory.Build.props 1.10.0 -> 1.11.0
- PlanViewer.Ssms/Properties/AssemblyInfo.cs 1.10.0.0 -> 1.11.0.0
- PlanViewer.Ssms/source.extension.vsixmanifest 1.10.0 -> 1.11.0

Also ignore untracked local tools/ helper directory.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
erikdarlingdata added a commit that referenced this pull request May 19, 2026
…s missing (#342)

Bootstrap fix for the v1.10.0 -> v1.11.0 release PR (#341). PR #315 (the
version-unification refactor that introduced Directory.Build.props)
landed on dev AFTER v1.10.0 was tagged, so main has never seen
Directory.Build.props — the main-side checkout step fails on Get-Content
with "Cannot find path".

Test-Path now prefers Directory.Build.props and falls back to the legacy
App.csproj location. Becomes dead code after #341 lands on main, but
harmless and self-documenting.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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