Skip to content

Fix false positive warnings and UI improvements (#178)#180

Merged
erikdarlingdata merged 4 commits intomainfrom
fix/issue-178-warning-improvements
Apr 7, 2026
Merged

Fix false positive warnings and UI improvements (#178)#180
erikdarlingdata merged 4 commits intomainfrom
fix/issue-178-warning-improvements

Conversation

@erikdarlingdata
Copy link
Copy Markdown
Owner

Summary

Addresses all 12 items from issue #178 community feedback:

False positive fixes (Rules):

  • Rule 1 (Filter): Suppress when child subtree < 128 reads/10ms (actual) or cost < 1.0 (estimated)
  • Rule 3 (Serial Plan): Skip trivial statements with cost < 0.01
  • Rule 15 (Join OR): Exclude Merge Interval inside anti/semi joins (NOT IN false positive)
  • Rule 20 (Local Variables): Skip trivial statements with cost < 0.01
  • Rule 26 (Row Goal): Require >= 2x reduction to suppress "1 to 1" noise
  • ShowPlanParser: Gate XML MemoryGrantWarning at 1 GB

Message improvements:

  • Scalar UDF: Added variable assignment + SQL 2019 inlining options

Web UI:

  • Warning badges: Split by severity (critical/warning/info) with color coding
  • Statement tabs: Sorted by elapsed time (actual) or cost (estimated), slowest first
  • Wait stats: Wider type column + double-width card when populated
  • Logo: Swapped to full Darling Data barbell logo at 40px

Test plan

  • 69/69 tests pass
  • Verified all fixes against private test plan from issue reporter
  • Estimated vs actual plan gates work correctly for both plan types

🤖 Generated with Claude Code

erikdarlingdata and others added 4 commits April 6, 2026 23:59
- Rule 3 (Serial Plan): Skip trivial statements with cost < 0.01 — a 0ms
  variable assignment shouldn't warn about MAXDOP 1
- Rule 15 (Join OR Clause): Exclude Merge Interval patterns inside anti/semi
  joins — NOT IN subqueries produce the same operator chain but aren't OR
  expansions
- Rule 26 (Row Goal): Require >= 2x reduction — "1 to 1 (1x reduction)" and
  tiny floating-point differences are noise

Tests load from .internal/examples (gitignored) and skip gracefully on CI.

Closes items 5, 9, 12 from #178.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rule 1 (Filter Operator): Suppress when child subtree is trivial —
  actual plans: < 128 reads AND < 10ms; estimated plans: cost < 1.0
- Rule 20 (Local Variables): Gate on statement cost >= 0.01 to skip
  trivial variable assignments where estimate quality doesn't matter

Both fixes work correctly for estimated and actual plans, using
cost-based fallbacks when runtime stats aren't available.

Closes items 6, 7, 11 from #178.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rule 4/6 (Scalar UDF): Expanded remediation options — mention assigning
  to a variable, SQL Server 2019+ automatic UDF inlining
- Warning badge: Split count by severity (critical/warning/info) with
  color-coded badges instead of a single combined number
- Statement tabs: Show elapsed time instead of cost for actual plans
- Wait stats: Wider wait type column (180px) and double-width card when
  populated for better readability

Closes items 2, 3 (partial), 4, 10 from #178.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Statement tabs sorted by elapsed time (actual plans) or cost (estimated
  plans), slowest first — problem statement is always immediately visible
- Replaced small PNG logo with full Darling Data barbell logo from
  erikdarling.com, bumped height to 40px for legibility
- Default active statement is the first tab (sorted, so the slowest)

Closes items 1, 3 from #178.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit 66de676 into main Apr 7, 2026
2 of 3 checks passed
@erikdarlingdata erikdarlingdata deleted the fix/issue-178-warning-improvements branch April 9, 2026 00:37
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