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
Conversation
… 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
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).
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.
What this is
Sixty-five PRs merged to
devsince #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 touchedCHANGELOG.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
## [Unreleased]: 22 appended to### Added(7 → 29), 9 under a new### Changedplaced between### Addedand### Fixed(Keep-a-Changelog order), and 32 appended to### Fixed(68 → 100).[Unreleased]goes from 75 to 138 bullets. Order within each section is ascending PR number, as CHANGELOG: the 2026-09-18 board — fifty-four entries from two seats' fifty-nine merged PRs, spliced once #3672 did.tools/changelog/changelog_archive.py'scompact()reads the FIRST bold span as the title, so the MCP errors take one wire shape: FormatError returns the {status:"error"} envelope on both SKUs (Partial #3653, Q11) #3719 entry's inline**WIRE CHANGE.**is prose, not a second title (checked against the regex, non-greedy).([#N])is the ISSUE, not the PR. All seven cited numbers verified as issues viagh api repos/…/issues/N(nopull_requestkey): PostgreSQL-target analysis engine: design and v1 build #3542, Brains-review campaign: deferred structural residue (from #3538 / #3539 / #3540 / #3541) #3653, PostgreSQL-target analysis engine: v2/v3 slices and the v1 lanes' residue (from #3542) #3691 (the wave umbrellas), #3632's RUNNING_JOBS fold does not reach the anomaly path: four separate ANOMALY_* pages during one server's own 116-minute index-maintenance job, none naming it #3704, Claude review: LGTM-shaped by construction — give it the repo's traps, a blind read, a structured verdict and the callers rule #3710, get_fleet_overview's collection-health rollup times out at :35 on the largest store — phase-grid signature, discriminate compression-band contention vs plan before fixing #3735 (closed by their PRs), Confidence chooses the channel: uncorroborated findings stop paging and land in the digest — unranked alerts cost the attention the true positives need #3712 (partial). No entry cited a PR number, so none was re-cited. Nothing was collapsed: no PR appears in both buffers and no title repeats a bullet already in the file (checked programmatically).fix/guard-drift-pending, the review guard's drift arm) has no issue — its PR body cites only sibling PRs ([CI] Review guard hard-fails on an unguarded lookup 404 — a lookup failure becoming the verdict its own comments forbid #2309, A Claude review that posted nothing no longer finishes green: read-only tools end the denial churn, the job fails when no verdict was submitted, and the transcript survives the runner #3657, Every alert went to every channel because the model had one routing decision, made at install time: a sparse routes table sends self-monitor, reports, agent-jobs and performance pages where their audiences are, the taxonomy is written down, and the ledger says where each post went (#3598) #3668). The file never cites a PR number in[#N]form and holds 96 ref-less entries already (e.g. Cross-app guard coverage now sees a SKU's test tree), so it follows that precedent rather than inventing a link.[#3691],[#3704],[#3710],[#3712],[#3735]— one for every[#N]the new entries cite that the index did not define ([#3542]and[#3653]were already there). They go at the end of the[Unreleased]group, which CHANGELOG: the 2026-09-18 board — fifty-four entries from two seats' fifty-nine merged PRs, spliced once #3672 made one ascending run and which stays one: 3517 … 3735, 62 lines, no duplicates. Definitions: 1,367 → 1,372.## [3.8.0]or older is touched. The archive script'ssplitwas not run.git diff --stat:CHANGELOG.md | 71 +— 63 bullets + 3 structure lines (### Changedand its two blanks) + 5 definitions, zero deletions (the blob stays LF undereol=crlf; staged with a plaingit add).devbefore inclusion, including the three the buffers marked[armed]at buffer-time — Claude review: traps file, blind read, structured verdict, callers rule, Opus full tier (#3710) #3718 (3adfd23e), compare_analysis sigma-bands the v2 PostgreSQL baselined metrics — I/O read latency, replay lag, WAL volume — so a 16× latency move stops reading by the ladder alone; the write family has one definition of "WAL tracked" (partial #3691) #3748 (32d69d2c), PostgreSQL blocking family: an operator now learns who headed a blocking chain, in what state, and how long the sessions behind it had really waited — PG_BLOCKING_CHAIN from the sampled edges, PG_LOCK_WAIT_EVENTS from the engine's own log lines, PG_LONG_RUNNING_QUERY from the active sessions, and a blocked-sessions anomaly whose baseline counts a quiet capture as zero (partial #3691, lane 17) #3750 (2eec9a50); the branch is cut fromdevat2eec9a50(PostgreSQL blocking family: an operator now learns who headed a blocking chain, in what state, and how long the sessions behind it had really waited — PG_BLOCKING_CHAIN from the sampled edges, PG_LOCK_WAIT_EVENTS from the engine's own log lines, PG_LONG_RUNNING_QUERY from the active sessions, and a blocked-sessions anomaly whose baseline counts a quiet capture as zero (partial #3691, lane 17) #3750's merge), so nothing here describes an un-landed change. Nothing deferred.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):
threshold_lineage0 → 1; "No bar value changed." Metadata by ruling, not a fix.analysis.uncorroborated_routeknob to restore the old route.Added calls a reviewer might read differently (the rest of Added are the sixteen new PostgreSQL fact families / rungs and are unambiguous):
MeasurementContractCensusTests— a new census pinning a ten-rule contract. Not a feature, not a fix; Added is the least wrong of three (flagged)..github/REVIEW-TRAPS.md, the blind first phase, the structured-verdict contract, the Opus/Sonnet paths filter — new review capability.CONFIG_CHANGEDis a new finding.recurring_at_this_hour/recurrence_weeks/maintenance_window_moved— new label and payload fields; "label, not discount" (ruling Q3).sample_time_utcandtime_zone_idare now stored — the headline's subject is the new columns; "an hour wrong across DST" is the consequence they remove.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_analysissigma-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
CONFIG_CHANGEDcompares the ±4 h around it and says what moved, or that nothing didupdate_alert_settingson both SKUsstatus-keyed client read the sentences as successful text; now every tool on both SKUs answers a caught exception with one envelope throughMcpHelpers.FormatErrorget_pg_server_configcounted the page and called it the serverget_pvs_statstrend drew an unmeasured pass as 0 MBmute_analysis_findingstops writing the hash as the path and stops registering the same mute twice,remove_servercan remove a server that never connected, and eight MCP descriptions stop saying what the code does not docompare_analysissigma-bands the PostgreSQL baselined metricsget_analysis_factsnow runs the anomaly detector on both enginesperfmon_stats.cntr_value_per_seconddivided as an integer, so every counter under one event per second read 0/secget_fleet_overviewruns its collection-health rollup once per minute per host, however many overview calls racecompare_analysissigma-bands the v2 PostgreSQL baselined metrics, and the write family has one definition of "WAL tracked"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).refs=set(re.findall(r'\(\[#(\d+)\]\)',s)); links=…; print(sorted(refs-links))→[]; the broader every-[#N]-anywhere check →[]; duplicate definitions →[].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'sbuildis its first execution here — the script's PASS on identical checks is the pre-flight.What this does NOT do
docs/changelog/*.