Repository navigation
ObservedHours states what its zero-coverage fallback defends and pins it: the nominal window, never a near-zero divisor, moot behind the collectors' unobserved guard (#3538 A7 follow-through from #3616 review) - #3623
Merged
Merged
Conversation
…window, not a near-zero divisor, and moot behind the collectors' unobserved guard (review note on #3616)
erikdarlingdata
enabled auto-merge (squash)
September 18, 2026 18:05
|
Reviewed. This is a comment+test-only change (confirmed via diff — no logic lines touched in
No correctness, security, or parity issues found. |
There was a problem hiding this comment.
LGTM — verified this is comment+test-only (no logic change in FactScorer.cs), confirmed the doc comment's claim about both collectors' zero-coverage guard against the actual Waits.cs files in Lite and Darling, and checked the new pinned test's arithmetic against the threshold constant.
5 of 7 tasks
erikdarlingdata
added a commit
that referenced
this pull request
Sep 19, 2026
…spliced once Fifty-nine PRs merged to dev today across the coordinator's lanes and the wave-2 worker's; each lane returned its entry to a buffer instead of touching this file, so that fifty-plus PRs did not each rebase the same twenty lines. This is the one splice. Every entry is one line (the archiver's compact() and the pins read them that way); riders fold into their parent's entry (#3599 under #3590, #3619 under #3611, #3623 under #3616, #3640 under #3633; #3617 test-only and #3661 re-cut as #3666 carry none); #3657's entry is in because it MERGED to dev - the twin to main is what is still pending. [Unreleased] gains a `### Added` above `### Fixed` (Keep-a-Changelog order) for the six new capabilities: per-user theme colours (#3606 / #3577 arm B), routed alert families (#3668 / #3598), the PostgreSQL logging audit tool (#3643 / #3607), the service-side wait sampler (#3645 / #3604), and the log-event classifier with its temp-file / autovacuum parser families (#3646 / #3601, #3664 / #3602 #3603). The other forty-eight are honesty fixes to existing surfaces and append to `### Fixed` after the wave-1 bullets, in PR-number order. Thirty-six reference definitions added for the issues the new entries cite and the index did not yet define; the [Unreleased] group is one ascending run again, which moves [#3557] into its slot (the one deleted line). Nothing under ## [3.8.0] or older is touched; the archive script was not run. One editorial touch: the #3585 entry ended in a dangling "Darling" and now reads "Darling only." (the tool exists only in the Darling MCP host). tools/changelog/changelog_archive.py verify: all PASS (1420 bold entries, floor 1,329; 1,358 distinct refs resolve; CRLF throughout; 356,539 bytes under the 750 KiB ceiling). ChangelogIndexAndArchiveTests: 5/5 pass via a net10.0 harness.
erikdarlingdata
added a commit
that referenced
this pull request
Sep 19, 2026
…spliced once (#3672) Fifty-nine PRs merged to dev today across the coordinator's lanes and the wave-2 worker's; each lane returned its entry to a buffer instead of touching this file, so that fifty-plus PRs did not each rebase the same twenty lines. This is the one splice. Every entry is one line (the archiver's compact() and the pins read them that way); riders fold into their parent's entry (#3599 under #3590, #3619 under #3611, #3623 under #3616, #3640 under #3633; #3617 test-only and #3661 re-cut as #3666 carry none); #3657's entry is in because it MERGED to dev - the twin to main is what is still pending. [Unreleased] gains a `### Added` above `### Fixed` (Keep-a-Changelog order) for the six new capabilities: per-user theme colours (#3606 / #3577 arm B), routed alert families (#3668 / #3598), the PostgreSQL logging audit tool (#3643 / #3607), the service-side wait sampler (#3645 / #3604), and the log-event classifier with its temp-file / autovacuum parser families (#3646 / #3601, #3664 / #3602 #3603). The other forty-eight are honesty fixes to existing surfaces and append to `### Fixed` after the wave-1 bullets, in PR-number order. Thirty-six reference definitions added for the issues the new entries cite and the index did not yet define; the [Unreleased] group is one ascending run again, which moves [#3557] into its slot (the one deleted line). Nothing under ## [3.8.0] or older is touched; the archive script was not run. One editorial touch: the #3585 entry ended in a dangling "Darling" and now reads "Darling only." (the tool exists only in the Darling MCP host). tools/changelog/changelog_archive.py verify: all PASS (1420 bold entries, floor 1,329; 1,358 distinct refs resolve; CRLF throughout; 356,539 bytes under the 750 KiB ceiling). ChangelogIndexAndArchiveTests: 5/5 pass via a net10.0 harness.
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.
The zero-coverage fallback in
ObservedHourssays what it is for, and is pinnedFollow-through on #3616's third review round: the reviewer's non-blocking inline note asked that the
coverage_fraction == 0arm ofFactScorer.ObservedHourseither be documented as the0/0defence it is, or reconsidered. #3616 auto-merged at0e1a7f75seconds before the commit carrying the answer pushed, so that commit is cherry-picked here unchanged; the inline reply on #3616 names it.What the arm does and why. A
coverage_fractionof exactly 0 is whatWindowCoverage.Unobservedstamps. Both collectors (DuckDbFactCollector.Waits.cs,PgFactCollector.Waits.cs) emit no wait fact whenObservedDurationMs <= 0, so a fact carrying zero coverage and a non-zerowait_time_msis a fact no shipped collector produces — the arm defends the arithmetic against0/0and should be moot. It deliberately falls back to the nominal window rather than to a near-zero divisor: dividing by ~0 would turn any trace on such a fact into an enormous hourly rate and fire on the artifact, whereas the nominal reading is the pre-#3538 form — the least-sensitive honest one. The doc comment now says so.Pinned, so the choice cannot silently flip:
Score_PerHourGates_ReadZeroCoverageAsTheNominalWindow_NotAsNearZero— 12,000 ms of PAGELATCH_UP over a nominal 4 h withcoverage_fraction = 0reads as 3 s/hr → 0. Executed against the builtPerformanceMonitor.Analysis.dllbefore pinning (0, as expected); the xunit test first runs in CI.What it does NOT do
Nothing else — two files, 22 added lines, no behaviour change (the arm's result is unchanged; it is now documented and pinned).
Partial for #3538 (A7 follow-through). Builds:
PerformanceMonitor.Analysis,Lite.Tests— 0 warnings, 0 errors.Which component(s) does this affect?
How was this tested?
Compile-verified; the pinned value executed against the built shared library; xunit execution is CI's.
Checklist
dotnet build -c Debug)