Skip to content

Promote dev to main: Updates_20260801 - #848

Merged
erikdarlingdata merged 7 commits into
mainfrom
dev
Jul 29, 2026
Merged

Promote dev to main: Updates_20260801#848
erikdarlingdata merged 7 commits into
mainfrom
dev

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Summary

Second and final promotion for Updates_20260801: the five audit-ruling fixes that finish the release.

  • sp_IndexCleanup: @min_reads/@min_writes floor now gates every dedupe path (Rule 7.6 demonstrably handed below-floor duplicates DISABLE scripts); 16 new regression-proven harness assertions
  • sp_PressureDetector: logging-mode failures raise severity 11 so Agent jobs fail loud; interactive stays informational
  • sp_QueryReproBuilder: three-part db.schema.proc names resolve with sp_QuickieStore's precedence; 26 new regression-proven assertions; two-part behavior byte-identical
  • sp_HumanEvents: waits rate columns compute actual rates (truncation AND an always-1 numerator fixed in the view blob); executions_per_second truncation fixed interactive-side
  • sp_PerfCheck: dead RETURNs removed, check 4103 parameterized, five orphaned #databases columns dropped

The Updates_20260801 tag and release get recreated on the CI build commit after this merges. All version stamps already read .8 / 20260801.

Harness state on SQL Server 2022: QuickieStore 157/157, ReproBuilder 265/265, HumanEvents 195/195, PerfCheck 39/39, IndexCleanup 32/32 + 31/31 + 4/4 + rule coverage green in CI.

🤖 Generated with Claude Code

erikdarlingdata and others added 7 commits July 29, 2026 07:02
The two CATCH blocks that guard logging-mode inserts raise severity 11
instead of downgrading every failure to an informational note, so a
SQL Agent job whose logging silently breaks reports failure instead of
success (verified: exit code 1 under sqlcmd -b with a broken logging
table, both paths firing, collection continuing past the failure). The
two client-path CATCH blocks stay informational and now say why: they
run only when logging is off, so logging breakage cannot reach them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The two RETURNs after severity-11 RAISERRORs in database validation
are removed with comments explaining that control passes to the CATCH
block, whose THROW re-raises. Check 4103 (memory grant timeouts) gets
@memory_grant_timeout_warning (10) and @memory_grant_timeout_critical
(100) mirroring 4101's convention, wired into help, defaulting, and
the README, with boundary-equivalence verified against the old
hardcoded tiers. Five #databases columns orphaned by removed checks
are gone from the table, the dynamic SQL, and the insert list.

Harness: 39 passed, 0 failed on SQL Server 2022.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
waits_per_second/hour/day in HumanEvents_WaitsByDatabase had two
stacked defects: integer division floored every sub-1 rate to zero,
and the numerator was COUNT_BIG(*) over one-row groups, which is
always 1, so the column reported 1/span rather than waits/span. The
view blob is re-encoded with waits.total_waits * 1.0 wrapped in
CONVERT(decimal(38,2), ...), verified by decoding the new blob,
byte-comparing all but the three changed lines, and reading real
numbers off the created view: 3 waits over 50 seconds reads 0.06, 3
waits over 4 days reads 0.75 per day. executions_per_second in the
interactive available-plans result set gets the same truncation fix,
where 100 executions over an hour used to read 0 and now reads 0.03.

Harness: 195 passed, 0 failed on SQL Server 2022.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@procedure_name = 'MyDb.dbo.MyProc', exactly what people paste from
sp_QuickieStore output, now resolves instead of being QUOTENAME'd
whole into a single identifier and blamed on Query Store. The name
parsing hoists above the database defaulting so a parsed database can
feed it, matching sp_QuickieStore's ordering and precedence: an
explicitly passed @database_name always wins, and the three-part
database is adopted only when @database_name is NULL. Two-part and
one-part behavior verified byte-identical against the previous build.

Harness grows a procname family proven as regression tests (all five
three-part cases fail against the pre-fix build with the exact
reported symptom): 265 passed, 0 failed on SQL Server 2022, with
installs verified on 2017, 2019, 2022, and 2025.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The @min_reads/@min_writes floor now gates the Rule 7.5/7.5b/7.6
unique-constraint family and Rule 3's merge-target subquery, matching
the five rules that already honored it and the promise the help text
makes. Rule 7.6 was the live one: a below-floor key duplicate was
demonstrably handed a DISABLE script, reachable precisely because
Rule 5 correctly declines the same pairing. Rule 7.5b's gate is
defensive (transitively covered via Rule 7 today), and Rule 4 is
closed through Rule 3's fix since it only consumes Rule 3's targets.

rule_coverage_test.py gains Group H: 16 assertions over three floor
fixtures, proven as regression tests against the pre-fix build, where
seven behavioral assertions fail with the exact defect scripts. Full
suite on SQL Server 2022: run_tests 32/32, fixture_cases 31/31,
no_access 4/4, rule_coverage 50/53 with the three failures reproduced
identically on the unmodified build (uptime-dependent Rule 1
interactions on a long-running instance; green in fresh CI containers).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The procname fixture failed on a cold CI container: Query Store
initialization is asynchronous, so the desired READ_WRITE state can
lead the actual state and compiles during initialization are silently
lost, leaving zero captured rows for the resolution cases. The fixture
now waits for actual_state_desc = READ_WRITE in both scratch databases
before the workload, and runs the execute-flush-verify sequence in a
retry loop instead of a single shot. 265/265 on SQL Server 2022 and
26/26 procname cases on 2025.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@erikdarlingdata
erikdarlingdata merged commit 60fcebb into main Jul 29, 2026
9 checks passed
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