Skip to content

CHANGELOG: the 2026-09-18 board — fifty-four entries from two seats' fifty-nine merged PRs, spliced once - #3672

Merged
erikdarlingdata merged 1 commit into
devfrom
chore/changelog-2026-09-18
Sep 19, 2026
Merged

erikdarlingdata merged 1 commit into
devfrom
chore/changelog-2026-09-18

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

What this is

Fifty-nine PRs merged to dev on 2026-09-18 across two seats — the coordinator's lanes and the wave-2 worker's — and by rule none of them touched CHANGELOG.md: each returned its entry to a buffer so that fifty-plus PRs would not each rebase the same twenty lines of [Unreleased]. This is the one splice. Docs-only; one file.

Mechanism

Added vs Fixed — the judgment

New capabilities are Added; honesty fixes to existing surfaces are Fixed.

PR Issue Why Added
#3606 #3577 arm B A Settings Colors section, per-user theme-overrides.json, live re-apply — a feature that did not exist (flagged Added by the lane).
#3668 #3598 A new config_notification_routes table (V131), a closed family taxonomy, three MCP tools, a viewer grid, hot-reload — new routing capability (flagged Added by the lane).
#3643 #3607 get_pg_logging_audit is a new MCP tool; nothing existing was corrected.
#3645 #3604 A service-side wait sampler is a new third instrument tier for PostgreSQL targets; the "empty chart" it replaces was the absence of a capability, not a wrong reading.
#3646 #3601 New collector (collect.pg_log_events, V129), new shared tailer, new get_pg_log_events tool.
#3664 #3602, #3603 New parser families and V130 columns on that collector, plus recent_runs on get_pg_autovacuum_health — extends #3646's new capability rather than correcting an existing surface.

One I left in Fixed per the brief's "everything else" rule but would flag for a second look: #3665 (#3542 v1 plumbing, "PostgreSQL targets enter the analysis pipeline"). Its branch is feat/, it introduces a pg_ fact vocabulary and a second engine component set, and "no schema, no content" is true but it is still a capability PostgreSQL targets did not have. If the coordinator reads it as Added it is a one-line move. The feat/3540-* pair (#3595 V127, #3630 V128) stays Fixed with confidence: the schema columns exist to stop a fabricated 0.00 reading, which is an honesty fix.

Audit trail — every entry's PR → issue

# Section PR(s) Issue(s) Seat Title
1 Added #3606 [#3577] coordinator Maintain your own theme colors, per theme, with a reset to default
2 Added #3643 [#3607] coordinator A PostgreSQL target with every logging setting off no longer looks identical to an instrumented one
3 Added #3645 [#3604] coordinator A stock PostgreSQL target without pg_wait_sampling now has a wait profile instead of an empty chart
4 Added #3646 [#3601] coordinator PostgreSQL's server log is read by a classifier, not by two regexes
5 Added #3664 [#3602], [#3603] coordinator The log said what the spill cost and what the vacuum cost; the store kept the sentence and threw away the number
6 Added #3668 [#3598] coordinator Alert families route to their own channels
7 Fixed #3583 [#3576] coordinator The Locking & Contention grid names the table as schema.table
8 Fixed #3584 [#3526] wave-2 Extreme, corroborated anomaly findings can now cross the notify floor, so the baseline engine is no longer notification-inert at shipped settings
9 Fixed #3585 [#3574] coordinator get_store_metrics' job_history block now says whose eyes its rows are visible to, and proves rows exist where it can
10 Fixed #3586 [#3573] coordinator The forced-plan-failures alert read no longer walks the whole fleet's two-hour slice of Query Store rows to find one server's
11 Fixed #3587 [#3570] coordinator The viewer's tray Snooze now silences the toast itself
12 Fixed #3588 [#3575] coordinator The compression-stuck self-alert no longer pages on a healthy job's run instant
13 Fixed #3589 [#3577] coordinator Text on an accent fill gets a measured ink in every theme, and the FinOps row marks become theme brushes Dark can actually see
14 Fixed #3590, #3599 [#3541] A2 wave-2 The duration-trend trio routes by retention tier and says what it served, so a 7-day request no longer returns 4 days labelled quiet
15 Fixed #3592 [#3538] A2 wave-2 Analysis facts divide by the time the collector actually observed, and a window with a hole in it says so
16 Fixed #3593 [#3539] A4 wave-2 SQL Server's Poison Wait alert measures accumulated starvation over a ten-minute window like its PostgreSQL twin, so one slow wait no longer pages and a THREADPOOL storm no longer sleeps
17 Fixed #3594 [#3541] wave-2 Six MCP pages now say what bounded them, so a limited page stops passing for a complete answer
18 Fixed #3595 [#3540] wave-2 The four naked delta families store the interval their deltas accrued over, so a restart's fabricated zero reads as unknowable instead of 0.00 ms/sec
19 Fixed #3596 [#3539] A2/A3/A8d wave-2 Blocking and CPU health bands are rates over the window they were measured in, tiered from 14 days of fleet blocking and CPU data
20 Fixed #3610 [#3582] coordinator get_store_metrics stops answering for 38% of the store: continuous aggregates and the named plain tables join the inventory, every sweep is reconciled against pg_database_size, and the block says its own coverage
21 Fixed #3611, #3619 [#3581] coordinator The twenty continuous aggregates join the compression ladder
22 Fixed #3613 [#3541] A7 wave-2 PostgreSQL MCP percents name their denominator, so a three-row page stops summing to 100% of everything
23 Fixed #3614 [#3540] A4 wave-2 Every delta family is seeded from the store at service start, and the series-age rescue finally has passes to read, so a restart no longer fabricates one interval of quiet for six families
24 Fixed #3615 [#3541] A14 wave-2 MCP write tools report what happened
25 Fixed #3616, #3623 [#3538] A5/A7 wave-2 The scorer's wait thresholds carry their measurement: WRITELOG stops saturating on a third of routine windows, deadlocks grade 5/hr apart from 90/hr, and the absolute gates scale with the hours actually observed
26 Fixed #3618 [#3612] coordinator Analysis pages with long compound stories now reach Slack instead of dying with invalid_attachments
27 Fixed #3621 [#3620] coordinator Continuous-aggregate materializations are chunked at one raw chunk, like every raw table
28 Fixed #3624 [#3608] coordinator The PostgreSQL first-target runbook stops denying three capabilities that ship
29 Fixed #3625 [#3622] coordinator Slack text cuts land on whole characters, not UTF-16 indexes
30 Fixed #3626 [#3517] coordinator A not-yet-valid web TLS certificate now raises the self-alert instead of reading as healthy
31 Fixed #3627 [#3609] coordinator Light and Cool Breeze status colors read against their own page, and text on a status fill gets a theme ink
32 Fixed #3628 [#3579] coordinator Forced Plan Failing fires once per observation, not once per cooldown
33 Fixed #3629 [#3591] coordinator The compression dead-job alert now says what a -infinity row is on the store's TimescaleDB
34 Fixed #3630 [#3540], Darling V128 / Lite v61 wave-2 Every delta family now stores the interval its deltas accrued over, and query_stats stores the statement offsets its delta key is made of
35 Fixed #3631 [#3539] A8c wave-2 The File Growth threshold means one thing — megabytes per hour — at every surface that shows it
36 Fixed #3632 [#3538] A6/A9 wave-2 Story confidence measures corroboration instead of path length, and the nightly rebuild's three cards become one incident that names the job
37 Fixed #3633, #3640 [#3580] coordinator The daily digest and sweep rollup no longer re-announce on a service restart
38 Fixed #3634 [#3538] A3 wave-2 compare_analysis bands each delta by the server's own dispersion and folds one cause into one row, so same-hour-yesterday noise stops reading as a verdict
39 Fixed #3635 [#3539] wave-2 A server nothing has banded yet is Unknown, not Healthy, and the alert-history grids show the severity the alert fired at instead of the colour its name implies
40 Fixed #3637 [#3541] A10 wave-2 Every latest-snapshot MCP read says when it was captured, and no tool accepts a window it does not read
41 Fixed #3638 [#3539] wave-2 PostgreSQL servers get a measured deadlock band from their own counters, their Long-Running Query alert skips maintenance like SQL Server's does, and every one-sided alert says why it is one-sided
42 Fixed #3639 [#3636] coordinator Database File Growth's rise arm fires once per hourly observation, not once per cooldown
43 Fixed #3641 [#3541] A9/A13 wave-2 The daily summary stops painting purged months green, and every MCP filter is part of the query
44 Fixed #3642 [#3541] A12 wave-2 Zero is a measurement: health parsers say whether their source was ever seen, a regression with no baseline stays null, and the first point of a differenced trend is no longer a fabricated 0
45 Fixed #3647 [#3597] coordinator The interval-hourly Query Store refresh stops paying twelve index inserts per re-materialized row for eleven indexes nothing reads, and the capture-down alert read stops decompressing a server's whole collection log to learn two statuses
46 Fixed #3649 [#3644] coordinator Top CPU Queries reads as one record per query on Slack, not seven fields interleaved across a two-column grid
47 Fixed #3651 [#3648] coordinator Top Cpu Queries' Max Dop is the newest plan's reading, with the cross-plan maximum kept as a dated history
48 Fixed #3655 [#3652] coordinator The force-plan remediation said "eligible, no blockers" for plans automatic plan correction already owned, had failed to force, or had withdrawn
49 Fixed #3657 [#3650] coordinator A Claude review that posted nothing no longer finishes green
50 Fixed #3658 [#3653] wave-2 The deprecated Dashboard mirrors five of the brains-review honesty fixes in its own idiom
51 Fixed #3659 [#3653] wave-2 Six small honesty riders from the brains-review residue
52 Fixed #3660 [#3653] wave-2 The PostgreSQL poison-wait host holds on silence like the SQL Server engine does, and three presence-flat alerts grade their severity from the bars the health bands already measured
53 Fixed #3665 [#3542] v1 plumbing wave-2 PostgreSQL targets enter the analysis pipeline
54 Fixed #3666 [#3653] wave-2 The Darling viewer's trend charts and calendar tell the same truth the MCP tools learned today

Merge-state check (all 59 PRs above): every one reads MERGED with base dev, and every merge commit is an ancestor of this branch's base (git merge-base --is-ancestor). The buffers' [PR open] markers on #3583, #3587, #3588, #3589 were stale — all four had merged. No header in either buffer was still marked PROVISIONAL (already cleaned before I read them); no PR number appears twice.

Not placed (merged after the buffers closed, no buffered entry): #3669 (#3542 durability posture, 6ddee19d) and #3670 (#3542 PG_BAD_ACTOR top statements, e0041b5c) merged to dev while this lane ran. Their entries belong to the #3542 content lanes' buffer and are not in either file I was given; this branch is fast-forwarded onto them (neither touched CHANGELOG.md) so the next splice appends cleanly.

What it does NOT do

  • Does not close any issue (no Closes keyword — there is none to close).
  • Does not touch docs/changelog/*, tools/changelog/archive-census.txt, or any released section.
  • Does not re-order or re-word the 21 wave-1 bullets.
  • Does not judge the 48 Fixed entries' prose beyond the one dangling-word fix — the lanes' voice is the lanes'.

Verification

  • python3 tools/changelog/changelog_archive.py verify — all PASS: 356,539 bytes (ceiling 768,000); CRLF throughout (the .gitattributes eol=crlf checkout form — the splice was done in Python with explicit \r\n so no line was silently converted); every [#N] resolves (1,358 distinct); 1,420 bold entries against the 1,329 floor; every archive's census row still matches.
  • Darling.Tests/ChangelogIndexAndArchiveTests — 5/5 pass, executed on this Mac via a throwaway net10.0 xunit harness compiling that one file with its output under Darling/Darling.Tests/bin/ so the walk-up to PerformanceMonitor.sln resolves (the harness output was removed before commit; git status clean but for CHANGELOG.md).
  • Client-identifying-text scan over the added lines (hostnames, brands, instance ids, IPs, store prefixes): nothing.
  • The mapping table above was generated by the same parser that produced the splice, not transcribed.

Review-dark self-review

  1. File touched: CHANGELOG.md only — the [Unreleased] section and its definition group.
  2. Three riskiest lines: (a) the ### Added heading — new subsection in [Unreleased]; pinned by verify's section parse and the archiver's group_prose, which treats ### as a group boundary. (b) The moved [#3557] definition — a move, not a loss; pinned by "every [#N] resolves" on both instruments. (c) The get_store_metrics: the job_history block said 'recording' and never said whose eyes the rows are visible to — it now evaluates the view's ownership filter for its own reader and proves rows exist where it can (#3574) #3585 Darling only. edit — the one word I wrote; pinned only by the grep that get_store_metrics lives under Darling/.
  3. What I'd want a reviewer to check: whether PostgreSQL targets enter the analysis pipeline: the pass routes by registry engine_kind inside the service, a pg_database_stats coverage witness replaces the tombstone, and every shared switch gains its one pg_ arm so the content lanes can build in parallel (#3542 v1 plumbing) #3665 belongs in Added; whether [#3542]'s single definition is right when three more PostgreSQL-target analysis engine: design and v1 build #3542 lanes (A PostgreSQL target's durability posture is stated, not inferred: fsync and full_page_writes off are CRITICAL policy cards, synchronous_commit off names the commits a crash discards, Aurora's managed pair is present and ungraded, and no tuning path can reach any of them (#3542 lane 8) #3669, A PostgreSQL analysis pass now names the statement: PG_BAD_ACTOR facts from pg_statement_stats carry one shape's share of the window's execution time, its calls/sec and mean, and a drill-down with the normalised text — the query-shaped leaf every PostgreSQL story needs (#3542 lane 7) #3670, and the rest) will cite it — it is, definitions are per file not per entry.

…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
erikdarlingdata merged commit 3f7c40c into dev Sep 19, 2026
6 of 8 checks passed
@erikdarlingdata
erikdarlingdata deleted the chore/changelog-2026-09-18 branch September 19, 2026 01:06
erikdarlingdata added a commit that referenced this pull request Sep 19, 2026
… PRs across the #3653, #3542 and #3691 waves, #3704, #3710, #3712 and #3735, spliced once (#3751)

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.
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