Skip to content

Release 3.11.0: version, changelog, archive - #6306

Merged
erikdarlingdata merged 24 commits into
devfrom
release/v3.11.0
Oct 22, 2026
Merged

erikdarlingdata merged 24 commits into
devfrom
release/v3.11.0

Conversation

@erikdarlingdata

@erikdarlingdata erikdarlingdata commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Claude posting for Erik Darling.

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

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_HasALadderFixture ran 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).
  • Not run: the full suites (laptop; CI decides), the live ladder tests on a rig.

Cutoff

PRs merged to dev from 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)

Row Count PRs
Entry in a section (PR body CHANGELOG section; 0 taken from the buffer, see below) 260 #5631, #5687, #5688, #5690, #5694, #5697, #5698, #5699, #5700, #5702, #5704, #5705, #5706, #5707, #5708, #5709, #5712, #5714, #5720, #5721, #5722, #5723, #5724, #5726, #5727, #5730, #5732, #5734, #5740, #5741, #5742, #5751, #5752, #5753, #5764, #5769, #5771, #5774, #5778, #5782, #5790, #5791, #5792, #5795, #5799, #5800, #5801, #5803, #5805, #5806, #5816, #5817, #5818, #5819, #5826, #5827, #5828, #5829, #5830, #5831, #5832, #5835, #5836, #5837, #5838, #5839, #5840, #5841, #5842, #5845, #5848, #5850, #5852, #5853, #5854, #5855, #5856, #5859, #5869, #5870, #5871, #5877, #5879, #5880, #5885, #5886, #5895, #5900, #5901, #5902, #5906, #5930, #5933, #5934, #5935, #5936, #5937, #5952, #5954, #5958, #5959, #5962, #5964, #5965, #5966, #5967, #5968, #5972, #5974, #5975, #5976, #5994, #5995, #5996, #6013, #6014, #6015, #6016, #6017, #6018, #6019, #6020, #6021, #6022, #6023, #6024, #6025, #6026, #6028, #6029, #6030, #6031, #6032, #6037, #6038, #6039, #6040, #6041, #6045, #6046, #6047, #6049, #6050, #6051, #6052, #6053, #6054, #6055, #6056, #6057, #6058, #6059, #6061, #6062, #6063, #6064, #6065, #6067, #6068, #6069, #6075, #6076, #6077, #6078, #6079, #6080, #6082, #6083, #6084, #6085, #6087, #6088, #6093, #6095, #6101, #6103, #6105, #6106, #6108, #6109, #6110, #6111, #6118, #6120, #6124, #6125, #6126, #6141, #6142, #6144, #6145, #6146, #6147, #6148, #6149, #6150, #6151, #6152, #6161, #6162, #6163, #6164, #6165, #6166, #6167, #6168, #6169, #6171, #6172, #6173, #6184, #6185, #6187, #6188, #6190, #6191, #6192, #6193, #6195, #6197, #6202, #6208, #6209, #6210, #6213, #6219, #6220, #6222, #6228, #6229, #6232, #6233, #6237, #6238, #6239, #6240, #6241, #6242, #6246, #6248, #6249, #6250, #6251, #6253, #6255, #6258, #6259, #6260, #6266, #6270, #6271, #6272, #6273, #6274, #6275, #6280, #6282, #6287, #6288, #6289
Folded into another entry 0 none folded automatically; possible folds listed below
None by design (the body says so) 34 #5681, #5686, #5689, #5696, #5717, #5747, #5756, #5757, #5760, #5762, #5765, #5767, #5770, #5777, #5781, #5784, #5786, #5866, #5884, #5893, #5932, #5939, #5963, #5969, #6100, #6116, #6174, #6189, #6198, #6201, #6203, #6204, #6218, #6290
No entry found 27 #5648, #5657, #5658, #5662, #5664, #5671, #5674, #5676, #5679, #5680, #5683, #5692, #5728, #5739, #5746, #5766, #5788, #5973, #6035, #6090, #6092, #6107, #6121, #6122, #6153, #6176, #6283
Shipped in 3.10.0 (merge commit is an ancestor of the 3.10.0 release head 0c3a5f7) 82 #5488, #5490, #5491, #5492, #5494, #5497, #5499, #5500, #5501, #5502, #5503, #5504, #5505, #5509, #5510, #5511, #5512, #5524, #5527, #5528, #5529, #5530, #5532, #5533, #5534, #5535, #5536, #5537, #5538, #5539, #5540, #5542, #5543, #5544, #5545, #5546, #5548, #5550, #5552, #5553, #5554, #5556, #5557, #5563, #5564, #5566, #5567, #5570, #5572, #5573, #5576, #5577, #5579, #5580, #5584, #5585, #5588, #5590, #5591, #5593, #5595, #5598, #5599, #5604, #5605, #5609, #5610, #5611, #5612, #5613, #5615, #5619, #5620, #5621, #5622, #5623, #5624, #5626, #5628, #5635, #5636, #5637
Already in the old [Unreleased] block (kept) 13 #5659, #5663, #5665, #5668, #5682, #5907, #5908, #5919, #5920, #5921, #5922, #5925, #5926

Notes on the accounting:

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.

  • #5702: mcp.allowWindowsAuthOverUnverifiedTls, trustedProxies
  • #5704: SalesA.dbo.T1
  • #5721: QueryIdentity
  • #5722: mcp.allowServerAdmin, mcp.allowWrites
  • #5724: keyPath, pfxPassword, pfxPath, darling.ps1
  • #5799: darling.ps1
  • #5801: select.py
  • #5806: reads.maxHeavyReads
  • #5819: maskLiterals, mcp.allowInvestigations, mcp.allowWrites, mcp.dataDetail
  • #5853: mcp.dataDetail
  • #5880: DarlingMcpWritePolicyTests
  • #5965: AnchorClock, TestWait.WaitUntil
  • #5974: select.py
  • #6013: PerformanceMonitor.Common, PerformanceMonitor.PlanAnalysis
  • #6018: mcp.allowWrites
  • #6020: mcp.allowWrites
  • #6038: mcp.dataDetail
  • #6040: mcp.allowWrites
  • #6067: maskLiterals, metadataOnly
  • #6109: alerts.excludedVolumes, darling.json, settings.json
  • #6147: darling.json
  • #6238: mcp.allowWrites
  • #6240: mcp.allowWrites
  • #6240: mcp.allowWrites
  • #6241: mcp.allowWrites
  • #6246: mcp.dataDetail
  • #6258: SalesReport
  • #6266: queryStoreFetchTopN
  • #6275: mcp.allowServerAdmin

Entry-line proof

Sorted SHA-256 of the entry lines per section, built set against the lines read back from disk (CHANGELOG.md before split; docs/changelog/3.11.md on disk and in the git blob after), all MATCH:

Section Entries SHA-256 (first 16)
Important 3 b82865afd5ca2546
Added 104 998ec530233f9e69
Changed 38 3ea556b4038bfa8e
Fixed 191 1989e601feac08cf

The worktree CHANGELOG.md is CRLF only and the blob is LF (git ls-files --eol: i/lf w/crlf attr/text=auto eol=crlf). Every older line of CHANGELOG.md is unchanged: the text outside the old [Unreleased] block is a prefix of the new file and the only addition after it is link definitions. After split the 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, with kind) and, for PRs with entries, entries[] with section, entry text, source and cited issues. Truth fixes belong in docs/changelog/3.11.md and the index line in CHANGELOG.md; rerun split only on an unsplit file.
  • Scripts that built this are in the session scratchpad, not committed.

README sync

Step 2b of the release checklist. The root README.md is a short landing page: it has no collector table, tab list, edition comparison or platform table (those live in docs/ and Darling/README.md). The two tables the checklist names that do sit in a README are in Darling/README.md. I changed only README.md and Darling/README.md; Lite/README.md has none of these tables. I did not touch docs/ (out of this lane's scope).

README.md

  • Docs table: added Agent dispatch, Signed webhooks and Darling store sizing (all new in 3.11.0). The Permissions row now links to the agent remediation login in Agent dispatch rather than repeating it.
  • Editions: one new paragraph saying both editions can hand an alert to an AI agent you run (Lite reads and reports; Darling can also change a server setting, with every change recorded and undoable).
  • Deprecation callout: now says what ships (Lite Setup.exe and ZIP; Darling service ZIP, Viewer Setup.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"

  • Five groups became seven. Added attention (no gate), database_states, ag_replica_states and ag_database_replica_states (not Azure SQL DB), Query Store health and query_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.
  • Permissions table: the event-session grant said "two XE sessions"; it is three shared sessions. query_store_forced_plans added to the per-database collectors under CONNECT ANY DATABASE.

How I counted

  • Collectors: the entries in CollectorCatalog.All, 73 total, 44 SQL Server and 29 PostgreSQL. The gates are each collector's AppliesTo. New since v3.10.0: AttentionCollector and QueryStoreForcedPlansCollector (the catalog diff against v3.10.0 is those two lines).
  • MCP tools: unique [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.md and docs/editions.md say 245 and 113, which matches.
  • Not counted from code: the Lite collector count (43) is in docs/lite-guide.md, outside this lane. I did not check it.

Checks

  • plain-english: README.md clean 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).
  • Pushed to release/v3.11.0 as 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, verify and roundtrip rerun and clean; the census row for 3.11.0 is regenerated (280 entries after round 1). docs/changelog/3.11.md is the source and split rewrote 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:

  • FIX: 68 exact before/after replacements by script (all matched inside the right entry), plus about 40 by hand where the ruling had an ellipsis, a whole-entry rewrite or a note.
  • SECTION: 3 moves to Changed (#5705 Alert History grid, #5952, #5967); #6051 removed.
  • FOLD: 35 entries folded into their root with the folded refs added to the root (chain #6233 -> #6171 -> #6079; #6271 into #5936 and #6080, with one sentence in #6080; #6039 and #6063 into two roots each). Sentences added only where the ruling gave one.
  • INTERNALS: rewrites applied for #5688, #5704-7, #5706, #5707, #5712, #5721, #5817, #6032, #6045, #6213, #6241, #6260, #5900, #5965, #5974, #5994, and the two Important entries (#6106 provision-roles, V174 to V210 and Lite 67 to 77).
  • Dropped: 27 (CI, test-only and developer tooling: #5801, #5835, #5836, #5837 to #5842, #5848, #5870, #5877, #5879, #5880, #5895, #5930, #5935, #5962, #5995, #5996, #6016, #6051, #6083, #6068; and #5845 and the test-only #5886 and #5906). The Guard-stage test-deletion entries have no user-visible effect, so no combined entry.
  • New entries: 6 (#5657, #5658 with #5674, #5664, #5679, #5680, #5766), link definitions added.
  • Superseded statements fixed beyond the ruled ones: #5920 ("nothing reads the new tables yet"), #5921 (store-backed overrides now exist, #5933), #5925 ("will go through"), #5989 ("nothing is shown in the UI yet"), #5819 ("agent only reads", now scoped to Level 1), #6069 ("read comes in a later change"), #6080, #6106, #6126, #6184 as ruled.

Overrides of rulings:

  • #5706: the ruling's "about 60,000 pages read" is a logical-read figure, so I removed it instead of rewording it.
  • #5709, #6031, #6032: the rulings only flip a PR ref to its issue; ignored.
  • #5837: the ruling's combined "Source-text tests removed" entry was not written, since the coordinator rule drops entries with no user-visible effect.
  • #5886 and #5906 were ruled OK with "consider dropping" (test-only); dropped by the coordinator's test-only rule.
  • #5900, #5965, #5974, #5994 kept as the ruling's rewrites even though they are dev-facing; coordinator may drop them.
  • #6273 fold target was not named; folded into #5819 with its start-up warnings sentence.
  • #6253 into #6069 with no sentence (the timing numbers were not user-visible and one was unverified).

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])- text was fixed globally.

Docs sync

Claude posting for Erik Darling. Pushed from branch release/v3.11.0-docs (commit 29a079d). I did not touch CHANGELOG.md or docs/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 ran LlmsTxtCollectorCensusTests (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 no agent_action and 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") and AgentChangeUndo.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 plus query_store_forced_plans (44th, not in Lite) and 29 PostgreSQL collectors. DuckDB 1.5.2 changed to 1.5.5 (Directory.Packages.props pins 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" (LlmsTxtCollectorCensusTests passes).

Counts and how I counted them

  • Lite collectors: 43. The default list in Lite/Services/ScheduleManager.cs (43 new() { Name = ...} entries, 43 unique; long_query_completions ships disabled; 5 run on connect). All 43 names and every frequency match the lite-guide table. The shipped Lite/config/collection_schedule.json holds only 25 entries; it is the older defaults file, not the registration.
  • Darling collectors: 73 = 44 SQL Server + 29 PostgreSQL. CollectorCatalog.All has 73 entries, 29 of them Pg*. The first lane's count is confirmed. The 44 SQL Server collectors are Lite's 43 plus query_store_forced_plans.
  • MCP tools: Darling 245, Lite 113, Dashboard 66. Unique [McpServerTool(Name = ...)] names in non-test source (Darling 245, Lite 113, deprecated/Dashboard 66). 111 names are shared. Lite-only: get_blocked_process_reports (Darling's get_blocking) and unmute_analysis_finding. Darling-only: 134. This matches the 245 / 111 / 134 in DarlingMcpInstructions.CatalogCensus.
  • Lite 97 by default = 113 minus 12 write tools minus 4 investigation tools. Darling 183 by default = 245 minus 56 write tools, 4 server-admin tools (add_servers, remove_server, edit_server, set_server_action) and 2 investigation tools (WriteTools has 60 names, 4 of them admin; InvestigationTools has 2).
  • The gap between 245 and the running server's "182 of 243". Not an error in the code. That running service predates 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.
  • Other stated counts. The 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 plus collection_log, pinned at 72 by TimescaleSupport.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, roundtrip rerun and clean; bash .github/scripts/pre-push.sh GATE 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.

  • FOLDED #6275 into #5632 "Level 3 routes, and a per-server switch for each server action" (now "each starting off"; refs add [#6275]). "Nothing in this release turns one on" was false: #6275 (merged 10-21, in this release) lets an admin (Viewer, web) or an MCP client under 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.
  • DROPPED #5900 (Investigation code shared with Lite): "Nothing behaves differently", code moved to shared libraries. Its ref definition is removed.
  • FOLDED #5997 (store tables and columns for investigation work) into its users: no entry of its own. Evidence retention (90 days) went to #6001 (evidence frozen at the open), the read-only viewer and MCP roles' no-read on signing keys to #5998 (signed webhooks), and the 30-day deadlock signature counts to #6006 (merge deadlock signatures). One added sentence each, refs add [#5997]. The migrations stay named in the Important upgrade entry.
  • FOLDED #6265 into #5907 (Investigations panel): "the Viewer could and the web could not" described a Viewer/web split of features that are new in 3.11.0, and #5907 said both panels are read-only, which #6265 made false for the web. #5907 now says the Lite window is read-only and adds one sentence on the admin web actions (close a request, write a note, start a practice request).
  • REWRITTEN #5908 (agent notes): dropped "waited as pending with no way to approve it, so no brief ever carried one"; now "is pending until a person decides it". Evidence it never shipped: git grep submit_investigation_report v3.10.0 and git grep InvestigationRequest v3.10.0 return nothing (investigation requests are new in 3.11.0).
  • REWRITTEN #5769 (route scope): "A route used to match" now "A Darling route used to match", because Lite had no notification routes in 3.10.0 (the entry says so itself). Darling routes shipped (NotificationRoute in v3.10.0 sources).
  • Not changed: #5965, #5974, #5994: no entry in the changelog (#5965 and #5974 are test-only PRs, #5994 shares code with no user-visible change). Checked with grep -E "5965|5974|5994" docs/changelog/.
  • Sweep, kept (before-state shipped in v3.10.0), checked with git grep -l -i <name> v3.10.0: #5919 (test_custom_alert_rule present), #6227 and #6230 (MCP write tools such as create_mute_rule present; 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 in ArchiveService.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 grep against the v3.10.0 tag; get_query_store_aborts and get_forced_plans are also absent there.

Fold (10-22)

Merged origin/dev (through 296d79a, #6442) into release/v3.11.0 with a normal merge commit, then folded and spliced. [Unreleased] is empty. [3.11.0] now holds 309 entries (Important 4, Added 114, Changed 27, Fixed 164), up from 276. split, census, verify and roundtrip pass (roundtrip: "PROSE INTACT"); the 3.11.0 census row is regenerated. Plain-English check on the entries I wrote or edited: only the file's own " - " separator, long-sentence and semicolon style hits, plus a few "could" modals on past facts; no real hits left. Merge conflicts: CHANGELOG.md (kept the release branch's index and re-added dev's [Unreleased] entries as prose in docs/changelog/3.11.md, so no entry was lost), and docs/editions.md (kept the release side's rows; set the Darling MCP tool count to 247 and dropped the "183 served by default" figure, see below).

Folded from dev's [Unreleased] (21 entries not yet in the archive): #6296/#6297/#6298 (I/O Trends, collector duration), #6300 (Compare picker, with the "top 100" caveat), #6292 (block chain, with the Viewer/Lite transaction-start display-mode fix), #6295, #6302 and #6299 (both say Lite's tool is unchanged), #6261, #6294, #6293, #6303, #6291, #6308 (Lite only), #6311, #6312, #6305, #6310 (with the Saving-line and "kill session" fixes), #6315 (with the fix rounds), #6309 (Darling and Lite), #6257. I removed a stray inline REF: text from the end of the #6257 entry.

Spliced from merged PRs, truth-checked against each PR's file list and key hunks:

  • Added: #6324 (Client Timeouts relative bars, after the #5736 scripts entry), #6342 (Query Store replica; Darling and Lite), #6404 (Viewer Collection Health run now), #6405 (unmute_analysis_finding; its "add to the Important line" note is now in the Important entry), #6354 (time-range slicer), #6368 (same-machine flag; I wrote "Darling's MCP list_servers" because the diff has no Lite file), #6367 (known patterns; Darling only, the entry now says so).
  • Changed: #6376 (PLAN_REGRESSION drill-down per-day totals; Darling only).
  • Fixed: #6357 (named-pipe host refusal; I added "SQL Server" because PostgreSQL hosts are not held to the rule), #6366 (mirroring partner), #6437 (Linux default trace retry), #6442 (Hyperscale File I/O; Lite and Darling), #6362 (#6096; Lite only, the PR touches only Lite, so the entry says "Lite's" and "Darling's read is unchanged").
  • Folded into existing entries per the fold rule: #6307 and #6372 into the #6234 change-watch entry (the feature is new in 3.11.0; plan-change reads work on TimescaleDB 2.30, detection runs at most once an hour per target, retry after 5 minutes on failure); #6340 (#6285, #6339) into the Level 3 routes entry (add_servers/edit_server refuse a second registration of a machine an agent route covers, even under another name; needs store schema 212); the #6264 entry edit from the notes (managed store: the web lists, the Viewer makes the change).
  • Important: the first line now reads V174 through V214 (store schema 173 to 214) and names V211 to V214; the Lite line reads version 67 to 78 and names v78 (collection_log.read_source); the provision-roles.sql line is now one entry for four causes (#6066, #6254, #6383, #6334); new Important line for #6357: a remote SQL Server reachable only over a named pipe no longer connects, turn on TCP/IP.
  • No entry (per their PR bodies): #6290, #6361, #6363, #6364, #6371, #6353 and the test-only PRs. #6451 (#6445 part 1) is covered by the #6264 edit above and has no separate line.
  • Not in the notes but merged and now spliced: #6354, #6368, #6366, #6357, #6362, #6367, #6376, #6404, #6405, #6437.

Pending splice: #6448 (get_wait_trend empty vs not_collected), #6449 (#6441 part 1, XE ring buffer truncation warning), #6451 (covered by the #6264 edit; adds nothing unless its entry says more), #6461 (#6452, Viewer Known Patterns and Threshold Overrides boxes), #6463 (#6391, Viewer Job History Azure server filter). All five were still open at 11:21Z. Everything else from the earlier pending list is in (see Late splice).

For the coordinator to check: docs/mcp-server.md still says Darling exposes 245 tools (writes 56) and docs/editions.md I set to 247 from DarlingMcpInstructions.CatalogCensus; the "served by default" counts for Lite (97) and Darling (was 183) were not re-derived. RungRewindArtifacts for V211 to V214 and the README rollback lines are not part of this fold.

Late splice (10-22)

Merged origin/dev (091fd4a) into release/v3.11.0 with a normal merge; no conflicts, [Unreleased] is still empty. Spliced the PRs that merged after the fold, each checked against its diff:

  • #6447 (#6444): folded into the "Notification routes can now set a fallback route" entry (feature new in 3.11.0), with its link. It also names the agent level, limits, lease and expiry minutes, which the diff adds to the route cache key. Darling only.
  • #6443 (#6439): the Azure tempdb wording folds into the I/O Trends entry (#6296 to #6298), and the System Events intro into the #6295 entry. The diff also changes the MCP answer: get_server_trend for tempdb_file_io now answers not_collected on an Azure SQL Database, so I added that to the I/O Trends entry. The Job History Category fix is a new Fixed entry (web only, per-server category list).
  • #6450 (#6440): new Fixed entry. It is a product race in SingleReleaseSlot in DarlingWebEndpoints.cs, web server edits and adds (429 "busy"), so it gets an entry. No feature of the guard is new in 3.11.0, so it does not fold.
  • #6451: no change; the #6264 entry already carries the managed-store wording.
  • Link definitions for #6443, #6447 and #6450 added; split, census, verify and roundtrip pass ("PROSE INTACT"); the 3.11.0 census row is regenerated. Plain-English check on the added text: only the changelog's own " - " separator and long-sentence style hits remain after I split the long sentences I wrote.

Docs changed (README sync, release-3110/readme-sync.md, each claim re-checked against code on the branch):

  • docs/mcp-server.md: Darling 247 tools (180 by default), 112 shared with Lite, 135 Darling-only; allowWrites serves 61. Derived from DarlingMcpInstructions.cs (247, 112, 135) and DarlingMcpWritePolicy (61 write, 4 server-admin, 2 investigation; 247 - 67 = 180). I also counted 247 distinct McpServerTool names in the service and 113 in Lite. The tool table gained the Collection state row and find_database, get_known_patterns, the query tag reads, dismiss_alert_history, restore_alert_history, update_notification_route, set_notification_route_fallback, merge_deadlock_signatures and undo_plan_change; every name exists in the service.
  • docs/editions.md: Darling cell reads "247 tools, 180 served by default".
  • Darling/README.md: V214 rollback line after V213 (same form as the V207 line). Provision-roles paragraph for V214 added: the three known-pattern write functions and their grants to admin and viewer live only in Darling/tools/provision-roles.sql and managed provisioning, not in the V214 migration, so a bring-your-own store must re-run the script. Viewer aggregate tabs list now matches MainWindow.xaml (Alert History, Availability Groups shown once the fleet has one), plus the Known Patterns button and Manage Investigations sentence. The MCP intro sentence no longer says "same names as Lite and the Dashboard": the Dashboard shares 62 of its 66 names with Darling, and Lite 112 of 113.
  • docs/tabs.md: web sidebar gained Investigations, Known Patterns, Query Tags and Query Tag Usage; the ten Admin tabs; I/O Trends on the server page. One sentence on the Lite sidebar buttons and the Viewer's Investigations window (the Viewer has no Query Tags management window, so I did not claim one).
  • docs/alerts.md: resolutions paragraph (Send resolutions per channel, off by default, route override).
  • docs/troubleshooting.md: named-pipe host rule, in the Lite list and the Darling section. I did not add a host row to docs/lite-guide.md: it has no host row to extend.
  • Not done: V209 and V211 rollback lines (an older build ignores both; the list's rule is what an older build reads differently, so I left that decision to you).

Plain-English check on the docs I edited: hits are the files' existing dash, semicolon and long-sentence style; I fixed the long sentence I added in the README.

Final splice (10-22)

  • 58d452c: merged dev at a52632a and added Fixed entries for #6446 (#6448), #6451, #6452 (#6461) and #6391 (#6463). The #6264 fold sentence already matched what #6451 shipped, so it is unchanged.
  • 4143127: merged dev at ae06477 and added the Fixed entry for #6449 (#6441 part 1: a truncated Extended Events ring buffer now shows WARNING in collection health). The event-file reader is #6441 part 2 and is not claimed.
  • No entry by design: #6464, #6466 (CHANGELOG none), #6477 (test map, test-only).
  • At 4143127: CHANGELOG split, census, verify and roundtrip pass (archive census 3.11.0 row: 316 entries). dotnet build PerformanceMonitor.sln -c Debug -t:Rebuild: 0 Warning(s), 0 Error(s). DARLING_RELEASE_CUT=1 StatementCensus_PendingEntries_BlockARelease: Total 1, Failed 0.
  • No new migration, no new MCP tool, and no change to Darling/tools/*.ps1 or the upgrade-shapes script since 39fb910, so the upgrade-shapes run 39772036543 (14/14) still stands.

…t shipped release

The legs built their U1-U3 base from 3.9.0, so they checked an upgrade from a release one behind the one users run. Release checklist 8a(a).
…ning, tab lists, MCP tool table, resolutions, named-pipe hosts)
….10.0 base leaves it

3.10.0 hardens only timestamped backup names, so on a 3.10.0 base the leg's
precondition never held. In the field the file is already service-owned from an
earlier start; the leg sets that state and checks it again.
@erikdarlingdata
erikdarlingdata marked this pull request as ready for review October 22, 2026 14:55
@erikdarlingdata
erikdarlingdata enabled auto-merge (squash) October 22, 2026 14:55
@erikdarlingdata
erikdarlingdata merged commit 8fea705 into dev Oct 22, 2026
55 of 62 checks passed
@erikdarlingdata
erikdarlingdata deleted the release/v3.11.0 branch October 22, 2026 15:03
@erikdarlingdata erikdarlingdata mentioned this pull request Oct 22, 2026
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