Skip to content

Close out #3898: bank the tools/list savings, drop the last issue ref - #4141

Merged
erikdarlingdata merged 2 commits into
devfrom
feature/3898-close-out
Sep 24, 2026
Merged

erikdarlingdata merged 2 commits into
devfrom
feature/3898-close-out

Conversation

@erikdarlingdata

@erikdarlingdata erikdarlingdata commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Closes #3898.

Why

#3898 split every MCP tool's description into a short served head plus an on-demand reading guide. It also set a growth-only ceiling on the total tools/list payload, so a later PR cannot quietly regrow it. Every content PR that converted a tool family, and both feature PRs, have now merged to dev.

This PR is the close-out. It banks the saving those PRs already earned, by lowering both ceilings to what the payload actually measures today. It also removes the one issue reference (#3653) still riding on the wire in shared text.

What changes

Both total ceilings drop to the measured total

Product Before After Cut
Darling 329,494 bytes 170,798 bytes 158,696 bytes (48.2%)
Lite 148,216 bytes 89,719 bytes 58,497 bytes (39.5%)

The "before" figures are each ceiling's value as first committed in #3898's Phase 0 (git log -S TotalCeilingBytes). Neither ceiling was ever lowered before this PR. Each was only raised once, deliberately, in the #4048 D9 round. The "after" figures are the measured totals with this PR's change applied. They come from the budget test's own failure message, read with the ceiling temporarily set to 0.

McpHelpers.WindowTruncatedDescription drops its issue reference

This sentence is appended to several tools' descriptions on both products to explain the window_truncated field. Issue references come off unless they carry a rule (D4). WIRE CHANGE: spelled truncated before #3653. becomes WIRE CHANGE: formerly named truncated. The fact stays: the field used to be called truncated. The lane's first version, spelled truncated before., no longer said before what. The PR tender reworded it at the same length. Every other word in the constant is unchanged.

That six-character shrink only reaches a tool's served (budgeted) text where the constant lands in the head. That happens on exactly one tool per product, get_query_trend, which drops from 798 to 792 bytes on both Darling and Lite. On every other tool that carries the constant, it is appended after the <<GUIDE>> marker. There it lands in the tail get_tool_guide serves on demand, and the served head does not move. Two test assertions in McpPayloadContractCensusTests.cs quoted the old literal text. Both are updated to match.

Converted tool counts, and what still serves more than 620 characters unconverted

Product Total tools Converted (carry <<GUIDE>>) Unconverted
Darling 159 105 54
Lite 89 52 37

Darling tools still serving more than 620 characters unconverted:

Tool Characters
analyze_query_store_plan 914
get_query_heatmap 799
get_table_index_sizes 794
get_pg_wait_trend 792
get_pg_wraparound_risk 792
get_query_trend 792
update_custom_view 785
get_pg_deadlock_detail 759
get_waiting_tasks 751
get_pg_lock_stats 722
get_pg_buffer_usage 684
get_object_locking 661
get_server_summary 648
get_lock_wait_trend 646
get_running_jobs 642
get_cpu_scheduler_pressure 640

Lite tools still serving more than 620 characters unconverted:

Tool Characters
get_query_heatmap 799
get_table_index_sizes 794
get_query_trend 792
get_waiting_tasks 751
get_object_locking 661
get_server_summary 648
get_lock_wait_trend 646
get_running_jobs 642
get_cpu_scheduler_pressure 640

analyze_query_store_plan stays unconverted on purpose. It is not in Lite's list above because Lite already serves it in 210 characters. Darling serves it in 914. An identical converted head grows Lite's payload instead of shrinking Darling's, so it stays as is.

This PR converts no tool and edits no description other than WindowTruncatedDescription. There is no changelog entry: every converted tool already has one buffered from its own content PR.

PR tender verification

Test plan

  • Darling.Tests builds with 0 Warning(s), 0 Error(s).
  • Lite.Tests builds with 0 Warning(s), 0 Error(s).
  • Darling: McpToolsListBudgetTests, McpPayloadContractCensusTests, QueryStoreClutterTests, QueryStoreTopWindowTests (the classes a git grep for WindowTruncatedDescription finds), and every McpToolGuide* class. 280 total, 0 failed.
  • Lite: McpToolsListBudgetTests and every McpToolGuide* class. 80 total, 0 failed.
  • Darling full suite, once: 13,471 total, 0 failed, 638 skipped. The skips are live PostgreSQL tests. This lane runs no live rig. 1 test did not run, a pre-existing row unrelated to this change.
  • Lite full suite, once: 5,299 total, 0 failed, 0 skipped, 0 not run.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QQh8LczP1HGLXQYAx4oTZC

erikdarlingdata and others added 2 commits September 24, 2026 01:34
Every content PR and both feature PRs have merged to dev. This banks
the accumulated saving by lowering both total ceilings to their
measured totals, and drops the one remaining issue reference (#3653)
from the shared window_truncated wire text (D4: issue refs go unless
they carry a rule).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQh8LczP1HGLXQYAx4oTZC
…s called

"spelled truncated before." no longer said before what, once the issue ref was cut. "formerly
named truncated." says it at the same length, so neither ceiling nor the get_query_trend budget
lines move. The doc comment above the constant also stops saying no on-demand guide exists: on
a split tool the notice sits in the guide tail get_tool_guide serves.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUU29PuGg9TUFBsACgZg2K
@erikdarlingdata
erikdarlingdata marked this pull request as ready for review September 24, 2026 05:42
@erikdarlingdata
erikdarlingdata enabled auto-merge (squash) September 24, 2026 05:42
@erikdarlingdata
erikdarlingdata merged commit 715a07a into dev Sep 24, 2026
16 of 18 checks passed
@erikdarlingdata
erikdarlingdata deleted the feature/3898-close-out branch September 24, 2026 05:49
erikdarlingdata added a commit that referenced this pull request Sep 24, 2026
* Add 48 buffered CHANGELOG entries in one splice

Adds 48 entries and 48 link refs (#4057, #4077, #4079, #4081, #4082, #4083, #4084, #4085, #4086, #4087, #4088, #4089, #4090, #4091, #4092, #4093, #4095, #4096, #4099, #4100, #4101, #4103, #4105, #4106, #4107, #4108, #4109, #4110, #4111, #4113, #4114, #4115, #4116, #4117, #4118, #4119, #4120, #4121, #4122, #4123, #4124, #4125, #4126, #4127, #4131, #4133, #4136, #4141). Each PR's entry was buffered, and this lands every entry whose PR was merged on origin/dev when it ran.

Entries found under a bare section line (none unless the old script ran again) move into the matching ### section, below the new entries.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQh8LczP1HGLXQYAx4oTZC

* Changelog splice: add #4137's entry, which merged before the splice but was missed

#4137 (pg_plan_capture reads csvlog) merged at 05:57Z with a CHANGELOG entry section in its
body. It was neither spliced nor listed as needing no entry. Its entry goes under Fixed, right
after #4136's, and #4136's last sentence now points to it instead of saying plan capture is
unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUU29PuGg9TUFBsACgZg2K

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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