AG fixture: state the commit-time conclusion the guidance rests on (#991) - #1709
Merged
Merged
Conversation
#1708 corrected the AG lag guidance to "do not derive lag from commit times at all" and cites this file. The file carried both halves of that argument but in separate sections, never drawn together - so a reader who found one half could reasonably conclude the other case was safe to guard against, which is the exact mistake #1708 was fixing. Now stated side by side: on a SUSPENDED replica last_commit_time freezes, so now - last_commit_time stops growing exactly when replication stops (silent, understating at the moment it is worst); on a healthy but QUIET database nothing commits, so the same delta grows without bound (loud, measured 1757 seconds at zero real lag). Guarding only the suspended case does not make a commit-delta trigger safe - it converts a silent failure into a noisy one. The loud half is also the likelier to ship, since it appears the first time anyone points it at a database nobody is writing to. Evidence file and CHANGELOG only, no code. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
erikdarlingdata
enabled auto-merge
July 26, 2026 20:11
erikdarlingdata
added a commit
that referenced
this pull request
Jul 26, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pull Bot
pushed a commit
to ehtick/PerformanceMonitor
that referenced
this pull request
Jul 29, 2026
The 2026-07-26 08:02 action-pin bump moved dorny/paths-filter v3 to v4.
v4 evaluates every filter pattern as an INDEPENDENT predicate under the
default predicate-quantifier 'some' (a filter is true when any changed
file matches at least one rule), so a bare '!**/*.md' line stopped
being a subtraction and became its own rule: 'any file that is not
markdown'. Every area filter ending in that line went true for ANY
non-markdown change anywhere in the repo, and the code: filter ('**'
plus exclusions) could never be false again.
Measured consequences, straight from run logs:
- darling-pg ran the full TimescaleDB suite on every PR since the bump,
including md-only ones. Run 30218459544 (PR erikdarlingdata#1709, two .md files):
'Filter darling = true, Matching files: CHANGELOG.md' - CHANGELOG.md
matched '!Darling/**/*.md' by virtue of not being a Darling markdown.
- A single root .gitignore edit built and tested every product: run
30219202642 (throwaway PR erikdarlingdata#1714) lit lite, dashboard, AND darling,
each reporting 'Matching files: .gitignore' via its '!**/*.md' rule.
- The erikdarlingdata#1712 docs fast path shipped unable to engage: every changed file
matches '**', so code: was always true and setup/restore always ran.
Its measured 1m43s md-only runs were real but came from the area
filters (markdown matches no include), not from the fast path.
The fix keeps v4 (v3 is on the deprecated-runtime track) and removes
every bare negation instead:
- Area filters state the markdown carve-out INSIDE each include as an
extglob - 'Darling/**/!(*.md)' - where quantifier semantics cannot
detach it. The positive-only docs allowlist needed no change.
- The uninvertible code: filter becomes an all: counter. The classify
step decides docs-only by all_count == docs_count, and additionally
refuses to engage while any area filter is lit, because an area build
step with restore skipped would run dotnet build --no-restore against
nothing. Counts and areas derive from the same allowlist today; the
veto exists for the day someone edits one and not the other.
- check-version-bump.yml had the identical '**'-plus-exclusions shape,
so its md-only skip had also silently stopped working. Same counter
fix, same allowlist, and its gate now says why.
Validation: probe commit on throwaway PR erikdarlingdata#1714 (this build.yml plus a
Darling .txt probe and a Darling .md probe) makes the filter log a
per-file truth table; results recorded in the CI-intelligence PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Evidence file and CHANGELOG only, no code. Two files.
#1708 corrected the AG lag guidance to "do not derive lag from commit times at all", and cites
tools/ag-fixture/VALIDATION.md. The file carried both halves of that argument - the freeze in section 6b, the quiet-database case in thelast_commit_timesubsection - but never drew them together. A reader who found one half could reasonably conclude the other case was safe to guard against, which is precisely the mistake #1708 was fixing.Now stated side by side:
now - last_commit_timedoeslast_commit_timefreezes, so the delta stops growing exactly when replication stopsSo guarding only the suspended case does not make a commit-delta trigger safe - it converts a silent failure into a noisy one. And the loud half is the likelier to actually ship, because it shows up the first time anyone points the thing at a database nobody is writing to, whereas the silent half needs someone to suspend something.
The conclusion the file now draws matches the shipped guidance:
secondary_lag_secondsis the lag measure (with the finding-3 caveats), and the*_timecolumns are for showing an operator when something last happened, not for judging whether it is late.Why this is worth a PR on its own
Both facts were already in the file and both were measured. What was missing was the inference between them - and that inference is the entire basis of a guidance line that has already shipped. An evidence file cited by shipped code should support the conclusion, not just the premises.
Test plan
SYNCHRONIZED,is_suspended = 0, zero-lag secondary). No new claims - this adds only the synthesis.dev(97ed4f20, post-Correct the commit-delta guidance: it fails loud, not silent (#991) #1708) and cherry-free; diff is exactlyCHANGELOG.md+tools/ag-fixture/VALIDATION.md, so it cannot conflict with anything in flight.🤖 Generated with Claude Code