Skip to content

Changelog: second splice — 63 entries from the #3653, #3542 and #3691 waves, #3704, #3710, #3712, #3735 (65 merged PRs, two seats; 22 Added / 9 Changed / 32 Fixed; text-only) - #3751

Merged
erikdarlingdata merged 1 commit into
devfrom
chore/changelog-splice-2
Sep 19, 2026
Merged

erikdarlingdata merged 1 commit into
devfrom
chore/changelog-splice-2

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

What this is

Sixty-five PRs merged to dev since #3672 (the first splice) across two seats — the coordinator's #3653 brains-review residue lanes (plus #3704, #3710, #3712, #3735 and one no-issue guard fix) and the wave-2 worker's #3542 / #3691 PostgreSQL-target engine lanes — and by rule none of them touched CHANGELOG.md: each returned its entry to a buffer so that sixty-plus PRs would not each rebase the same lines of [Unreleased]. This is the one splice. Text-only; one file; nothing outside ## [Unreleased] and the definition block moves.

Mechanism

Added vs Changed vs Fixed — the judgment

The first splice had no ### Changed; this one needs it, because nine of these entries describe a designed behaviour that now behaves differently — not a new capability, not a wrong reading corrected. The rule applied: the headline's subject decides. If the subject is the new thing (a fact family, column, tool, document, census) → Added. If the subject is a route, gate, grade, wire shape or label that changed by ruling → Changed. If the subject is the wrong behaviour (a false number, a missing tier, a fabricated zero, "silently", "never") → Fixed.

Changed (9):

PR Issue Why Changed
#3673 — The guard's drift arm (a #2229 design) now distinguishes a pending reviewed fix from hostile drift — a gating refinement, not a defect.
#3692 #3653 tempdb Space moves behind the shared persistence gate (3 collections to fire) — a ruling on an alert that behaved as designed.
#3693 #3653 The RUNNING_JOBS finding names the job instead of counting — the finding's content changed by design.
#3719 #3653 WIRE CHANGE: one error envelope for every tool, PostgreSQL failures 200 → 500 on the web surface.
#3723 #3691 Bars the fleet measured flip threshold_lineage 0 → 1; "No bar value changed." Metadata by ruling, not a fix.
#3724 #3653 The AnomalyGate judges peak AND mean — a gate redesign; no cutoff moved.
#3732 #3712 Confidence chooses the channel — routing by design, with the analysis.uncorroborated_route knob to restore the old route.
#3734 #3653 Blocking Wait Time's two-arm gate and the LRQ opt-out knob — gating by ruling, seeded from the production read.
#3747 #3691 Saturation amplified on the queueing signature; the raw TPS co-fire retired as noise — a grading change.

Added calls a reviewer might read differently (the rest of Added are the sixteen new PostgreSQL fact families / rungs and are unambiguous):

PR Issue Why Added
#3701 #3653 MeasurementContractCensusTests — a new census pinning a ten-rule contract. Not a feature, not a fix; Added is the least wrong of three (flagged).
#3718 #3710 .github/REVIEW-TRAPS.md, the blind first phase, the structured-verdict contract, the Opus/Sonnet paths filter — new review capability.
#3720 #3653 CONFIG_CHANGED is a new finding.
#3725 #3653 recurring_at_this_hour / recurrence_weeks / maintenance_window_moved — new label and payload fields; "label, not discount" (ruling Q3).
#3730 #3653 V134 / v63: sample_time_utc and time_zone_id are now stored — the headline's subject is the new columns; "an hour wrong across DST" is the consequence they remove.
#3736 #3653 V135: the LRQ opt-out knob gets a store home and becomes editable on Darling — the follow-on #3734 announced, not a defect.

Fixed calls that add a column but stay Fixed (the #3540 precedent from #3672: a column that exists to stop a false reading is an honesty fix): #3708 (cntr_type — A falling gauge read as a counter reset), #3717 (integer division in the Full-edition computed column). Fixed calls a reviewer might read as Changed: #3713 and #3748 (compare_analysis sigma-banding PG keys) — kept Fixed because the tool contradicted its own detector in the same window, which is a wrong verdict, not a policy; #3749 (local-clock baselines) — a bucket pooled two local hours and named an hour nobody keeps, a wrong key. Any of these is a one-line move if the coordinator reads it otherwise.

Audit trail — every entry's PR → issue → section

# Section PR(s) Issue Seat Title
1 Added #3669 [#3542] lane 8 wave-2 A PostgreSQL target's durability posture is stated, not inferred
2 Added #3670 [#3542] lane 7 wave-2 A PostgreSQL analysis pass now names the statement
3 Added #3671 [#3542] lane 2 wave-2 The two PostgreSQL knobs learn to speak
4 Added #3674 [#3542] wave-2 A PostgreSQL target's analysis pass gains its vacuum family, graded on the same bars the Tier-0 alerts page on
5 Added #3677 [#3542] wave-2 A PostgreSQL pool near its connection ceiling is graded as the outage it is
6 Added #3681, #3685 [#3542] wave-2 A PostgreSQL analysis pass now names temp-file spill and gates work_mem on it
7 Added #3683, #3686 [#3542] wave-2 A PostgreSQL analysis pass reads the wait profile — measured on Aurora, estimated on stock, and says which
8 Added #3689 [#3542] lane 9 wave-2 A PostgreSQL target learns its own normal
9 Added #3701 [#3653] coordinator The measurement contract had ten rules and two tests
10 Added #3715 [#3691] wave-2 v2 plumbing for the PostgreSQL-target engine, and the wait-profile anomaly now folds onto its wait and can page
11 Added #3716 [#3691] wave-2 Schema 133: the PostgreSQL saturation numerator and the sampler's duty cycle are stored
12 Added #3718 [#3710] coordinator The pull-request review learns the repository's traps and stops answering LGTM by default
13 Added #3720 [#3653] coordinator A server configuration change now has a consequence the engine states — CONFIG_CHANGED compares the ±4 h around it and says what moved, or that nothing did
14 Added #3721 [#3691] wave-2 PostgreSQL deadlock cards carry the captured exemplars, grouped by shape and ranked by recurrence
15 Added #3722 [#3691] wave-2 The PostgreSQL bloat family grades fourteen-day GROWTH behind a size floor, never a spot percentage
16 Added #3725 [#3653] coordinator A chain that fired every Tuesday at the same hour was rated a fresh incident each week and nobody was told; the pass now labels it "recurring at this hour" at unchanged severity, and a weekly Agent job whose slot slid gets "maintenance window moved"
17 Added #3726, #3729 [#3691] wave-2 PostgreSQL read latency is now a graded fact, and the pass says why when it cannot know
18 Added #3727 [#3691] wave-2 Replication lag and slot retention stories for the PostgreSQL-target engine
19 Added #3730 [#3653] coordinator The CPU sample's UTC instant and the server's time-zone id are now stored, so UTC-window readers stop deriving an offset that is an hour wrong across DST
20 Added #3733 [#3691] wave-2 PostgreSQL sessions: an operator now learns which application left a transaction open and walked away
21 Added #3736 [#3653] coordinator The Long-Running Query opt-out knob was read-only on Darling — V135 gives it a store home with the production read's seeds as the column default, editable in the Viewer and through update_alert_settings on both SKUs
22 Added #3750 [#3691] wave-2 PostgreSQL blocking: the pass names the head of the chain, how long the sessions behind it really waited, and whether the log agrees
23 Changed #3673 — coordinator The review guard tells a pending workflow fix from hostile drift
24 Changed #3692 [#3653] coordinator The tempdb Space alert stops paging on a single collected sample
25 Changed #3693 [#3653] coordinator The analysis names the Agent job that is running long instead of counting it
26 Changed #3719 [#3653] coordinator MCP tool failures were two wire shapes — a bare sentence on 214 tools and a JSON envelope on the PostgreSQL reads — and a status-keyed client read the sentences as successful text; now every tool on both SKUs answers a caught exception with one envelope through McpHelpers.FormatError
27 Changed #3723 [#3691] wave-2 PostgreSQL bars the fleet measured now say so
28 Changed #3724 [#3653] coordinator Anomaly detectors fired on one hot sample and fired more the longer the window was; the gate now judges the window peak AND the window mean, and I/O reads the pair like its siblings
29 Changed #3732 [#3712] coordinator Confidence chooses the channel
30 Changed #3734 [#3653] coordinator Blocking Wait Time paged on one snapshot and cleared on the next, and Long-Running Query had no way to stop reporting the same permanent background sessions forever; blocking now fires on one snapshot at 3× the bar or on 3 consecutive collections through the shared persistence gate, and long-running queries gain an opt-out knob seeded from the production read
31 Changed #3747 [#3691] wave-2 PostgreSQL saturation now tells queueing from load
32 Fixed #3679 [#3653] coordinator get_pg_server_config counted the page and called it the server
33 Fixed #3680 [#3653] coordinator The four PostgreSQL host alerts fire with the tier they earned instead of no tier at all
34 Fixed #3682 [#3653] coordinator Darling's get_pvs_stats trend drew an unmeasured pass as 0 MB
35 Fixed #3684 [#3653] coordinator The Query Store duration chart now says what served it and where the rollup's floor cut the window
36 Fixed #3687 [#3653] coordinator The analysis pass no longer says "collection appears to have stopped … NOT an all-clear" for a window the coverage witness proves the collector observed
37 Fixed #3688 [#3542] wave-2 The PostgreSQL analysis vocabulary absorbs what six content lanes reported back
38 Fixed #3694 [#3653] coordinator A target that restarted, failed over or was re-pointed no longer keeps subtracting from the old instance's counters
39 Fixed #3695 [#3653] coordinator A quiet hour no longer halves the next hour's Query Store rate
40 Fixed #3695 [#3653] coordinator The query-stats trends read the interval the store has, on both SKUs
41 Fixed #3695 [#3653] coordinator Compose delta aggregates exclude the restart marker
42 Fixed #3696 [#3653] coordinator mute_analysis_finding stops writing the hash as the path and stops registering the same mute twice, remove_server can remove a server that never connected, and eight MCP descriptions stop saying what the code does not do
43 Fixed #3697 [#3653] coordinator The web server page labelled page sums as totals, drew one instant as a trend, and four tools called their capture time by another name
44 Fixed #3698 [#3653] coordinator The wait and perfmon anomaly baselines stop counting every restart's fabricated zero as a quiet sample
45 Fixed #3699 [#3653] coordinator Three PostgreSQL pages stop guessing truncation from a full page, and four of the eleven payload rules stop being sentences
46 Fixed #3700 [#3653] coordinator The MCP query-duration trend still divided a restart's zero into 0.00 after the viewer stopped, and two sentences that #3695/#3696 made false
47 Fixed #3702 [#3653] coordinator The perfmon chart plotted deltas under a "Value" label with the divisor sitting unused on the row, and a latch/spinlock restart read as zero
48 Fixed #3703 [#3653] coordinator One payload said NoData and No Data, and the page cut had five names
49 Fixed #3705 [#3653] coordinator Five families subtracted from the old instance once before anyone noticed it had changed, and Aurora's wait counters had no one watching for a restart at all
50 Fixed #3706 [#3653] coordinator Lite's plan-cache trend descriptions rated every point over the gap since the previous one, the shared unrated_note named one of two unrated reasons, and the latch/spinlock restart row was spelled two ways across SKUs
51 Fixed #3707 [#3653] coordinator Fifteen rate arms spelled "unknowable" as 0 behind a guard that happened to hide it
52 Fixed #3708 [#3653] coordinator A falling gauge read as a counter reset because the store did not know it was a gauge
53 Fixed #3709 [#3704] coordinator A maintenance job's own sub-threshold anomalies fold onto the job's incident and name the job
54 Fixed #3711 [#3691] wave-2 PostgreSQL baselines survive a shortened retention, and pg_cpu carries the CPU dispersion floor
55 Fixed #3713 [#3691] wave-2 compare_analysis sigma-bands the PostgreSQL baselined metrics
56 Fixed #3714 [#3691] wave-2 get_analysis_facts now runs the anomaly detector on both engines
57 Fixed #3717 [#3653] coordinator Full-edition perfmon_stats.cntr_value_per_second divided as an integer, so every counter under one event per second read 0/sec
58 Fixed #3728 [#3691] wave-2 The write family tells Aurora the truth
59 Fixed #3731 [#3653] coordinator Three hourly rollups counted every restart's fabricated zero as a sample, and a service outage longer than a day left a two-hour hole under a floor that said covered
60 Fixed #3737 [#3691] wave-2 The PostgreSQL engine absorbs what the v2 lanes reported back
61 Fixed #3738, #3746 [#3735] coordinator get_fleet_overview runs its collection-health rollup once per minute per host, however many overview calls race
62 Fixed #3748 [#3691] wave-2 compare_analysis sigma-bands the v2 PostgreSQL baselined metrics, and the write family has one definition of "WAL tracked"
63 Fixed #3749 [#3653] coordinator Hour-of-week baselines key on the target's local clock, not UTC

Verification

  • python3 tools/changelog/changelog_archive.py verify — all PASS: 1,483 bold-titled entries (1,420 + 63; floor 1,329), 1,363 distinct refs resolve, 1,372 definitions, CRLF throughout (3,416 CR = 3,416 CRLF = 3,416 LF), 409,263 bytes under the 768,000 ceiling, every archive's prose digest unchanged (nothing archived was touched).
  • Brief's check — refs=set(re.findall(r'\(\[#(\d+)\]\)',s)); links=…; print(sorted(refs-links)) → []; the broader every-[#N]-anywhere check → []; duplicate definitions → [].
  • Client hygiene: a case-insensitive grep over the file for the house's forbidden identifiers (client brand and host-prefix names, cloud instance ids, managed-database hostnames) → 0 hits, and the same over this body. Every entry says "one production store class" / "the largest production store" / "a large production fleet" / "50 Aurora PostgreSQL clusters" — populations, not names.
  • Darling.Tests/ChangelogIndexAndArchiveTests (five facts: archived range, archive digests, headings + archive links, refs + byte ceiling, entry floor) pins the same rules the script verifies; CI's build is its first execution here — the script's PASS on identical checks is the pre-flight.

What this does NOT do

… PRs across the #3653, #3542 and #3691 waves, #3704, #3710, #3712 and #3735, spliced once

Sixty-five PRs merged to dev since #3672 (the first splice) across two seats -
the coordinator's #3653 brains-review residue lanes and the wave-2 worker's
#3542 / #3691 PostgreSQL-target engine lanes - and by rule none touched this
file; each returned its entry to a buffer. This is the one splice. Text-only;
one file; nothing outside ## [Unreleased] and the definition block moves.

[Unreleased] gains a ### Changed between ### Added and ### Fixed (Keep-a-Changelog
order) for the nine entries whose subject is a designed behaviour that now behaves
differently - routing (#3712 confidence chooses the channel), gating (#3692 tempdb
persistence, #3734 blocking/LRQ gates, #3724 peak-and-mean), the wire shape
(#3719 one error envelope), the review guard's drift arm (#3673), lineage
metadata (#3723) and two grading changes (#3693, #3747). Twenty-two new
capabilities append to ### Added (the sixteen PostgreSQL-target fact families and
rungs, CONFIG_CHANGED, the recurrence label, the V134/V135 columns, the review
traps file, the measurement census); thirty-two defects append to ### Fixed.
Order within each section is ascending PR number, as #3672 did.

Every entry is one line and verbatim from its buffer (trailing whitespace only).
Four PR pairs fold into one entry as the buffers wrote them (#3738+#3746,
#3683+#3686, #3681+#3685, #3726+#3729); #3695 carries three entries. #3673 has
no issue and cites none, like the file's ninety-six other ref-less entries. Five
definitions added ([#3691], [#3704], [#3710], [#3712], [#3735]) at the end of the
[Unreleased] run, which stays one ascending run (3517..3735). No archive touched;
the split was not run.

tools/changelog/changelog_archive.py verify: all PASS (1,483 bold entries, floor
1,329; 1,363 distinct refs resolve; 1,372 definitions; CRLF throughout; 409,263
bytes under the ceiling). Client-hygiene grep over the file: zero hits.
@erikdarlingdata
erikdarlingdata merged commit 00ff250 into dev Sep 19, 2026
7 of 8 checks passed
@erikdarlingdata
erikdarlingdata deleted the chore/changelog-splice-2 branch September 19, 2026 15:51
erikdarlingdata added a commit that referenced this pull request Sep 21, 2026
…s across the #3653/#3691 waves, the Azure quad, the night queue, V137 and the post-crash repairs, spliced once (#3843)

Sixty-six PRs merged to dev since #3751 (the second splice, 2026-09-19T15:51Z)
and by rule none touched this file. Fifty-two returned an entry to a buffer;
fourteen did not, because the /tmp wipe of 2026-09-20 took their lanes with it.
This is the one splice. Text-only; one file; nothing outside ## [Unreleased] and
the definition block moves.

Forty-four entries are verbatim from the two buffers (trailing whitespace only),
recovered from session transcripts and now living on the bus rather than in /tmp.
Eleven are written here from the merged PRs' own bodies in the file's voice, and
say so in the pull request: the V137 rung and the Query Store clutter reader
(whose buffer headers were placeholders waiting on reports that never came), the
capture-mode publish, the store TOAST/checkpointer consumers, the route knob's
store home, the clutter viewers, the dev-red repair, the companion-object remedy,
the collector-regression band, the TimescaleDB availability re-probe, and one
ref-less bullet folding the wave's four orphan census pins.

Twenty-one new capabilities append to ### Added, eight designed behaviour changes
to ### Changed (two pair gates, the CONFIG_CHANGED anchor, the refusal envelope's
wire shape, the WAL ceiling's derivation, a story's consumed leaves, the second
fleet read's lineage and the bad actor's own-normal grading), twenty-six defects
to ### Fixed. Order within each section is ascending PR number, as the first two
splices did. Two entries have no issue to cite and cite none, like the file's
ninety-six other ref-less entries; every other citation is the ISSUE the PR
closes or partially addresses, checked against the API rather than the branch
name. Twenty-three definitions added at the end of the [Unreleased] run, which
stays one ascending run (3517..3830).

tools/changelog/changelog_archive.py verify: all PASS. Every (([#N])) resolves to
a definition in the same file; no duplicate definitions; CRLF throughout (read
and written as bytes); 469,093 bytes, under the render ceiling. No archive
touched; the split was not run. ChangelogIndexAndArchiveTests executed locally
5/5 through a one-file net10.0 xunit harness inside this worktree, because a
CHANGELOG-only change takes CI's docs fast path and that class does not run
there; mutation control - deleting one definition this splice introduced reds
EveryFile_ResolvesItsOwnReferencesAndRendersOnGitHub by name, and the restore is
byte-identical. Client-hygiene scan over the whole [Unreleased] section: zero
hits across three name families and nine structural shapes (managed-database and
cloud hostnames, instance ids, account ids, resource names, addresses, instance
and UNC paths).
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