Repository navigation
Release 3.11.0: version, changelog, archive - #6306
Draft
erikdarlingdata wants to merge 10 commits into
Draft
erikdarlingdata wants to merge 10 commits into
erikdarlingdata wants to merge 10 commits into
Conversation
… counts, stale collector and tool counts
…ore-state never shipped
3 of 4 tasks
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.
Release 3.11.0: version, changelog, archive
Why
The 3.11.0 release is cut on 2026-10-22. This PR is the dev side of release checklist steps 1, 2 and 2a, plus the upgrade ladder fixture. It does not open the dev-to-main PR, tag or release.
What changes
Directory.Build.props:<Version>3.11.0</Version>, the one line. A tree grep for3.10.0found only test fixtures, comments andverify_release_signatures.pyself-test sample names (PerformanceMonitorDarling-3.10.0.zip), none a version stamp; none changed.CHANGELOG.mdanddocs/changelog/3.11.md: an empty## [Unreleased]and a## [3.11.0] - 2026-10-22block (Important 3, Added 96, Changed 25, Fixed 152 = 276 entries after truth-check round 2 (280 after round 1, it was Important 3, Added 104, Changed 38, Fixed 191 = 336), the 14 entries that sat in [Unreleased] kept verbatim at the top of their sections).split,census,verify,roundtripoftools/changelog/changelog_archive.pywere run;tools/changelog/archive-census.txthas the 3.11.0 row. 247 new link definitions appended; no existing link line touched.Darling/Darling.Tests/Fixtures/migration-ladder-v3.10.0.sql: 172 rungs, top V173, generated from agit worktreeof tagv3.10.0withDarling/tools/generate-ladder-fixtureand-p:StorageProject=pointing at that worktree. The extra worktree is removed.written-by-lane, in.release-3110/entries.json): the Darling store migrations V174 through V210 (none rewrites a large table or needs an offline window; V175, V182 and V206 touch existing rows and are named), and Lite DuckDB schema 67 to 77 (only v71 discards rows, derived data). The third Important entry is An agent can kill one SQL Server session after checking it is still the one it named (#5632) #6106's own (self-managed stores re-runprovision-roles.sql). Entries by other PRs that also say to re-runprovision-roles.sql: Per-server threshold overrides: loader, PostgreSQL counts, set_alert_threshold_override (#5916) #5933, Set a notification route's fallback route from the viewer and MCP (#6036) #6040, Query tags: web page to manage query tags, assignments and rules (#5986) #6050, Investigation reports can schedule a follow-up request (#6008) #6053, Darling MCP: incident controls (collection state, connection test, purge, analyze, plan undo) (#6230) #6240 (left in Added, as their PR bodies put them).Test plan
bash .github/scripts/pre-push.sh: GATE GREEN.[guard-darling] Total: 4441, Failed: 0,[guard-lite] Total: 1196, Failed: 0,classes: darling 0, lite 0(this diff selects none).*ChangelogIndexAndArchive*Total 5, Failed 0;*ProductVersionDeclaration*Total 26, Failed 0;*MigrationUpgradeLadder*Total 8, Failed 0, Skipped 7 (the live ones need a PostgreSQL rig;TheMostRecentRelease_HasALadderFixtureran and passed).DARLING_RELEASE_CUT=1 ... -method "*StatementCensus_PendingEntries_BlockARelease*": pass, "pending entries: 0".dotnet build PerformanceMonitor.sln -c Debug -t:Rebuild:0 Warning(s),0 Error(s).Cutoff
PRs merged to
devfrom 2026-10-08T00:00Z, 416 of them, highest number #6290. The last merge included is #6289 at 2026-10-21T10:58:52Z; the last merge in the set is #6289 at 2026-10-21T10:58:52Z. PRs merged after that go in a follow-up splice tomorrow.Accounting (every PR in exactly one row)
Notes on the accounting:
pr-body), not rewritten. The only entry I wrote for Agent dispatch: alerts start an agent investigation, and opt-in agents act through MCP tools that check and log every action (supersedes #2138) #5632 is Starter agent file: use a small model for the first step #6237 (starter agent file; body had an informal line), sourcebody-informal. An agent can kill one SQL Server session after checking it is still the one it named (#5632) #6106's entry says "PostgreSQL kill is not built", which kill_session ends one PostgreSQL session after checking it is still the one the agent named (#5632) #6126 supersedes: for the truth-check reviewers.([#PR])was inserted after the bold title,[#PR]placeholders replaced,(#N)turned into([#N]), inline[#N](url)links turned into[#N]with a link definition, a leadingENTRY:dropped. Prose untouched.No entry found (the coordinator decides)
User-visible by title: #5657, #5658, #5664, #5674, #5679, #5680, #5766. The rest look like CI, tests or housekeeping; the Dependabot bumps are #5746, #6090, #6092, #6107.
Entries that name a class, method, file or code comment
Heuristic match (backticked identifiers with camelCase or a file extension, or class-like names). MCP tool names, settings and JSON keys are user-facing and not listed unless they matched. PR: matches.
mcp.allowWindowsAuthOverUnverifiedTls,trustedProxiesSalesA.dbo.T1QueryIdentitymcp.allowServerAdmin,mcp.allowWriteskeyPath,pfxPassword,pfxPath, darling.ps1reads.maxHeavyReadsmaskLiterals,mcp.allowInvestigations,mcp.allowWrites,mcp.dataDetailmcp.dataDetailDarlingMcpWritePolicyTestsAnchorClock,TestWait.WaitUntilPerformanceMonitor.Common,PerformanceMonitor.PlanAnalysismcp.allowWritesmcp.allowWritesmcp.dataDetailmcp.allowWritesmaskLiterals,metadataOnlyalerts.excludedVolumes,darling.json,settings.jsondarling.jsonmcp.allowWritesmcp.allowWritesmcp.allowWritesmcp.allowWritesmcp.dataDetailSalesReportqueryStoreFetchTopNmcp.allowServerAdminEntry-line proof
Sorted SHA-256 of the entry lines per section, built set against the lines read back from disk (
CHANGELOG.mdbeforesplit;docs/changelog/3.11.mdon disk and in the git blob after), all MATCH:The worktree
CHANGELOG.mdis CRLF only and the blob is LF (git ls-files --eol:i/lf w/crlf attr/text=auto eol=crlf). Every older line ofCHANGELOG.mdis unchanged: the text outside the old [Unreleased] block is a prefix of the new file and the only addition after it is link definitions. Aftersplitthe index holds 336 compact lines, one per entry.For the coordinator
.release-3110/entries.json(untracked, in this worktree:C:\GitHub\PerformanceMonitor\.claude\worktrees\agent-abe57856088b4f80b\.release-3110\entries.json) holds one object per PR (all 416, withkind) and, for PRs with entries,entries[]with section, entry text, source and cited issues. Truth fixes belong indocs/changelog/3.11.mdand the index line inCHANGELOG.md; rerunsplitonly on an unsplit file.README sync
Step 2b of the release checklist. The root
README.mdis a short landing page: it has no collector table, tab list, edition comparison or platform table (those live indocs/andDarling/README.md). The two tables the checklist names that do sit in a README are inDarling/README.md. I changed onlyREADME.mdandDarling/README.md;Lite/README.mdhas none of these tables. I did not touchdocs/(out of this lane's scope).README.mdSetup.exeand ZIP; Darling service ZIP, ViewerSetup.exe, Linux and Compose tarballs) and that the Full Dashboard and CLI installer ship nothing (last builds in v3.2.0). Checked against the packaging steps in.github/workflows/build.yml.Darling/README.md, "Which collectors run on which platform"attention(no gate),database_states,ag_replica_statesandag_database_replica_states(not Azure SQL DB), Query Store health andquery_store_forced_plans(2016+),plan_correction(2017+),pvs_stats(2019+). The note now says nine collectors are gated off Azure SQL DB, plus job history.query_store_forced_plansadded to the per-database collectors underCONNECT ANY DATABASE.How I counted
CollectorCatalog.All, 73 total, 44 SQL Server and 29 PostgreSQL. The gates are each collector'sAppliesTo. New since v3.10.0:AttentionCollectorandQueryStoreForcedPlansCollector(the catalog diff againstv3.10.0is those two lines).[McpServerTool(Name = ...)]names in non-test source: Darling 245, Lite 113. The README files state no tool count, so nothing changed here.docs/mcp-server.mdanddocs/editions.mdsay 245 and 113, which matches.docs/lite-guide.md, outside this lane. I did not check it.Checks
README.mdclean after one long sentence was split; the new-facts list is only the new links, CLI, RAM and vCPU.pre-push.sh: GATE GREEN. Guard darling 4441 total, 0 failed; Guard lite 1196 total, 0 failed;classes: darling 0, lite 0(markdown-only diff).release/v3.11.0as 4d6c91b (the merge of the branch was a no-op).Truth-check round
Applied from the 10 chunk ruling files, the coordinator rulings and
new-entries.md. Entries 336 -> 280 (Important 3, Added 99, Changed 26, Fixed 152); round 2 below takes them to 276 (Added 96, Changed 25, Fixed 152).split,census,verifyandroundtriprerun and clean; the census row for 3.11.0 is regenerated (280 entries after round 1).docs/changelog/3.11.mdis the source andsplitrewrote the CHANGELOG.md index from it.bash .github/scripts/pre-push.sh: GATE GREEN (guard-darling 4441 passed, guard-lite 1196 passed, 0 selected classes).DARLING_RELEASE_CUT=1 ... *StatementCensus_PendingEntries_BlockARelease*1 passed;*Changelog*5 passed.Counts applied per kind:
Overrides of rulings:
Misses fixed by hand: #5704-0 (mojibake only in the chunk file, the changelog already holds the real sigma, no edit), #5704-21, #5705-8 and -13, #5706, #5722/#5791, #5771 (closing period), #5830 (trailing comma), #6065, #6209, #6229, the Important Lite entry, and every FOLD sentence.
Not done: the "Style notes" about PR-vs-issue link numbers (#6251, #6258 and others) left as is, both resolve. Spacing
([#N])- textwas fixed globally.Docs sync
Claude posting for Erik Darling. Pushed from branch
release/v3.11.0-docs(commit 29a079d). I did not touchCHANGELOG.mdordocs/changelog/. Gate: GATE GREEN. Guard: Darling.Tests Total 4441, Failed 0; Lite.Tests Total 1196, Failed 0. The gate selected 0 classes for a docs-only diff, so I also ranLlmsTxtCollectorCensusTests(2 passed) and the 7 Darling classes that read these docs as text (310 run, 0 failed, 2 skipped).Files changed
README.md: the agent sentence. Lite lets the agent read and report (checked: Lite has four investigation tools, and noagent_actionand no tool that changes a server). Darling can change alert settings (mutes, custom alert rules, thresholds), and can force or unforce a Query Store plan, evict a cached plan or kill a session. Each has its own switch per server, all off until a person turns them on. A person can undo alert-setting changes and plan forces. A plan eviction and a session kill cannot be undone. Sources:docs/darling-agent-dispatch.md("Level 3 server actions", "Undo and its limits") andAgentChangeUndo.UndoableKinds(mute, custom rule, threshold override, signature merge) plus plan force and unforce.docs/editions.md: new rows for SQL Server collectors (Lite 43, Darling 44), PostgreSQL collectors (Darling 29), agent investigations, agent changes on a monitored server, query tags, and routes limited to a server or tag. MCP row now reads Lite 113 (97 by default), Darling 245 (183 by default). Dashboard column: no features added.docs/lite-guide.md: the "43 collectors" claim and table are correct, so they stay. The Darling paragraph now says Darling runs these 43 plusquery_store_forced_plans(44th, not in Lite) and 29 PostgreSQL collectors. DuckDB 1.5.2 changed to 1.5.5 (Directory.Packages.propspins DuckDB.NET 1.5.5, whose release notes say "Updated to DuckDB v1.5.5").docs/mcp-server.md: counts, the boundary paragraph (three Darling tools act on a monitored server, through a remediation login, behind per-server switches), and new table rows: Investigations, Agent actions, Collector control, Quiet windows, Alert tuning (Darling).docs/postgres-first-target-runbook.md: "other 27 collectors" to 24 (29 minus the five extension-backed ones); the applies table 28/24/26/21 of 28 to 29/25/27/22 of 29 (matches the Darling README's probe examples).docs/uat-onboarding.md: removed the stale "93 read endpoints out of 112 tools" and "101 tools".llms.txt: "93-202 tools" to "113 tools in Lite, 245 in Darling" (LlmsTxtCollectorCensusTestspasses).Counts and how I counted them
Lite/Services/ScheduleManager.cs(43new() { Name = ...}entries, 43 unique;long_query_completionsships disabled; 5 run on connect). All 43 names and every frequency match the lite-guide table. The shippedLite/config/collection_schedule.jsonholds only 25 entries; it is the older defaults file, not the registration.CollectorCatalog.Allhas 73 entries, 29 of themPg*. The first lane's count is confirmed. The 44 SQL Server collectors are Lite's 43 plusquery_store_forced_plans.[McpServerTool(Name = ...)]names in non-test source (Darling 245, Lite 113,deprecated/Dashboard66). 111 names are shared. Lite-only:get_blocked_process_reports(Darling'sget_blocking) andunmute_analysis_finding. Darling-only: 134. This matches the 245 / 111 / 134 inDarlingMcpInstructions.CatalogCensus.add_servers,remove_server,edit_server,set_server_action) and 2 investigation tools (WriteToolshas 60 names, 4 of them admin;InvestigationToolshas 2).set_server_action: it reports 3 admin tools, where the code has 4, and it totals 243. The code, its census string and its tests all say 245, so the docs say 245. A service started before the upgrade reports the older count until it restarts. The mcp-server page now says so.grep -rn -E '[0-9]+ (collectors|MCP tools|tools)' docs/hits outside the changelog were checked. Fixed: the runbook's 27 and its 28-based table, and uat-onboarding's 93/112 and 101. Left, because they are correct or not a collector count: runbook line 750 (history quoted on purpose) and "71 of them, 29 PostgreSQL" (the hypertable count, 71 pluscollection_log, pinned at 72 byTimescaleSupport.HypertableCount).Plain-English check
Run on each changed file against the same file from
origin/release/v3.11.0. README.md is clean. The remaining hits on changed lines are old text I only changed a number in (dashes and long sentences in the runbook table rows, the DuckDB bullet, uat line 791) and the first sentence of mcp-server's intro paragraph, which I did not rewrite. New facts listed by the checker are the counts and tool names above, each verified in code.Truth-check round 2
Rule: an entry describes the state at the 3.11.0 cut as a change from v3.10.0; a "before" sentence is false when that state never shipped, and a PR that extends a feature new since v3.10.0 folds into the feature's entry. Entries 280 -> 276 (Important 3, Added 96, Changed 25, Fixed 152).
split,census(3.11.0 row: 276),verify,roundtriprerun and clean;bash .github/scripts/pre-push.shGATE GREEN (guard-darling 4441, guard-lite 1196 passed, 0 selected classes);*Changelog*classes 7 and 5 passed;DARLING_RELEASE_CUT=1 ... *StatementCensus_PendingEntries_BlockARelease*1 passed. Pushed to release/v3.11.0.mcp.allowServerAdmin(set_server_action) turn each switch on and off. The entry now says switches start off after an upgrade, who turns them on and where, and that each change is journaled. #6275's "were off with no way to turn them on short of a SQL statement" before-state is dropped; its own entry is gone.git grep submit_investigation_report v3.10.0andgit grep InvestigationRequest v3.10.0return nothing (investigation requests are new in 3.11.0).NotificationRoutein v3.10.0 sources).grep -E "5965|5974|5994" docs/changelog/.git grep -l -i <name> v3.10.0: #5919 (test_custom_alert_rulepresent), #6227 and #6230 (MCP write tools such ascreate_mute_rulepresent;pause_collection,set_collector_*absent, so "no MCP tool" is true), #6211 (query_store collector), #5688 (Dismiss All), #5732 (web pages, favicon), #5771 (Lite monthly archive merge inArchiveService.cs), #6071 and #6070 (--backfill-rollups,query_store_stats_daygrain_daily), #6105 (Job History), #6169, #6251 (DarlingCommandExecutor), #6115 (query_store_stats_interval), #5679. The "waited" hits in #5792, #6073 and #5955 describe data fields or CI job timing, not a shipped-state claim, and the CI entry's before-state is the real CI layout.Never-shipped evidence is
git grepagainst thev3.10.0tag;get_query_store_abortsandget_forced_plansare also absent there.