Repository navigation
A15/A16 remainder: the six named drifts were already landed (#3665/#3696/#3697) — this pins the three that had no pin: get_ag_health names its reader's traps, the catalogue's duration-trend line says rates not percentiles, server-tabs.js reads the Stamped tools by captured_at (#3653) - #3801
Merged
Merged
Conversation
…ption names its reader's two documented traps, the web catalogue's duration-trend line says rates and never percentiles, and server-tabs.js reads every Stamped tool by captured_at (partial #3653 A15/A16) The six drifts item 17 still listed were all delivered before this branch (#3665, #3696, #3697); three of the fixed texts had nothing holding them. Pins only, no wire change: - DarlingMcpAgToolsSurfaceTests.Description_SurfacesTheReadersTwoDocumentedTraps anchors on DarlingAgReader's own bolded paragraph headers, then holds the description and the instructions paragraph to each trap's mechanism, consequence and tell (NO row for a server with no AGs / last non-empty snapshot / collection_time; lag and queue depth NOT banded / secondary_lag_seconds / is_suspended / 0 lag while suspended). - DarlingMcpTrendToolsSurfaceAndSqlTests.QueryDurationTrend_CatalogueLine_NamesTheRatesThePayloadCarries_NotPercentiles holds the catalogue line to ms/sec + executions/sec + 'not percentiles', SerializeTrend to the two rates it projects, and the whole catalogue to 'percentile' only ever negated. - ServerPageTabsTests.TheStampedReads_AreReadByTheirStamp_NeverTheRetiredKey derives the Stamped + SearchBound roster from McpLatestSnapshotStampTests.LatestTools, slices every stat/table/fanout call by bracket balance, and refuses key: "collection_time" in any descriptor array bound to one of them; the four named reads must be reached; SESSION_STATS must show captured_at. Each red against its defect, then green, in the Mac harness.
Closed
39 tasks done
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.
The lie
Item 17 of #3653 (A15/A16, description drift + envelope vocabulary) still listed six drifts as open after #3793:
audit_configclaiming edition-awareness and answeringno_config_datafor a PostgreSQL target; plantop_operatorssilentlyTake(10)and switching its ranking basis;missing_indexes.impactan unlabelled statement-scoped percentage;get_ag_healthhiding its reader's two documented traps; the web catalogue calling the query duration trend "percentiles"; andserver-tabs.jsreading the fourStampedUnderCollectionTimetools by the old key. Read at source on dev32096b62, all six were already delivered — by #3665 (thenot_collectedenvelope), #3696 (the other five descriptions and the plan formatter), and #3697 (the JS tile). The item text was stale, not the work.What was NOT delivered was the pin. Three of the six fixed texts had nothing holding them: the AG description's two trap sentences, the catalogue line's "not percentiles", and the Sessions tile's
captured_atread. Each is a fix that fails nothing when it regresses — a description tidy drops a sentence and the reader's doc comment goes on being right in a file no agent opens; a catalogue edit reintroduces a word no payload backs; a JS key drifts back and the tile renders a dash where the snapshot's age was, still drawing, still "working". This PR is those three pins, and nothing else changes on the wire.Mechanism, per pin
DarlingMcpAgToolsSurfaceTests.Description_SurfacesTheReadersTwoDocumentedTraps. Anchored first onDarlingAgReader's own bolded paragraph headers (<b>Latest collection per server.</b>,<b>What the badge deliberately does NOT band: lag and queue depth.</b>), so the pin fails with "re-anchor" if the reader stops documenting a trap rather than passing against prose that no longer exists. Then the description, for each trap's mechanism, consequence and tell: the collectors writeNO row for a server with no AGs→last non-empty snapshot→collection_time;lag and queue depth are NOT banded→secondary_lag_seconds→is_suspendedand the DMV's0 lag while data movement is suspended. Then the instructions' AG paragraph, which carries the same two in its own words beside the perspective trap (LOCAL-replica-only columns) it always had.DarlingMcpTrendToolsSurfaceAndSqlTests.QueryDurationTrend_CatalogueLine_NamesTheRatesThePayloadCarries_NotPercentiles. Both ends. The catalogue line (DarlingWebEndpoints.CatalogDescriptors["get_query_duration_trend"]) must namems/secandexecutions/secand saynot percentiles;SerializeTrend— the helper the duration trio shares — must still projectelapsed_ms_per_second = p.Valueandexecutions_per_second = p.ExecutionsPerSecondand contain no "percentile"; and across the whole catalogue the word may appear only negated ((?<!not )percentiles?matches nothing), because no read here computes one. A read that genuinely returned a percentile would add itself beside that sentence rather than fall through it.ServerPageTabsTests.TheStampedReads_AreReadByTheirStamp_NeverTheRetiredKey. Derived, not listed. The roster isMcpLatestSnapshotStampTests.LatestToolsfiltered toStampedandSearchBound— every read of those shapes publishes its stamp once at the top ascaptured_atand nothing undercollection_timeanywhere in its payload (the census's negative sweep refuses the top-level key, and none of those fifteen tools projects the word into a row either), so any descriptor the page binds to one of them that nameskey: "collection_time"is a dead read, tile or column alike. The page side is parsed by bracket balance: everystat(…),table(…)andfanout(…)call, its first read-shaped literal, and every*_STATS/*_COLUMNStoken in it, resolved to the module's top-levelconst NAME = [ … ];arrays. Twelve bindings over the roster are examined today; the four reads the item named must each be reached or the test fails on the parser rather than passing on nothing.Windowedreads are excluded on purpose:get_memory_grants/get_resource_semaphorerows carry a per-rowcollection_timethat IS a series column. The positive half is the one tile the item named —SESSION_STATSmust show{ key: "captured_at", label: "Collected", format: "reltime" }— so the pin cannot pass by the tile being deleted.Why this shape
Pins only, no prose edits, because every sentence the item asked for was already on the surface and re-wording a correct description to "own" it would be churn on the wire an agent reads. The AG pin is phrase-matched rather than paraphrase-tested because these are the exact words a caller searches a description for. The JS pin is derived from the stamp roster rather than naming the four reads, so a fifth read joining the roster is covered the day it joins — the four are asserted as a reach check on the parser, not as the population.
What this does NOT do
get_resource_semaphore's interval key. The trend family's window floor is window_truncated on both SKUs, not the page dialect's truncated: get_query_trend, the duration-trend trio and get_query_store_top publish the store's reach under its own key, every consumer and description follows, and the vocabulary census holds the two facts apart (partial #3653 — item 17) #3793 inventoried the crossed pair:get_resource_semaphore(both SKUs) publishes the null-when-unknowable interval under the raw spellingsample_interval_secondsbesideinterval_known, whileget_file_io_stats/get_perfmon_trendpublish the raw stored column under the same key with0meaning unknowable, andget_latch_stats/get_spinlock_statspublish null-when-unknowable underinterval_seconds. Every one of those is described truthfully at its site today (the two raw-column descriptions already say what a stored 0 means). One fact, two encodings, three spellings — unifying it is a wire change on a well-described surface, which is the maintainer's ruling, not this lane's. Stated on the issue.CREATE INDEXfrom the MCPmissing_indexes[]rows (column lists +impact_basis+ a hint-not-design note stay; the plan viewer still renders the DMV text for a human). The ruling now runs the other way: whether the MCP surface stays DDL-free. Left as it landed; stated on the issue.PgTarget*.cs,PgBaselineProvider.cs,DarlingPgSessionStatesReader.cs. No schema rung. NoCHANGELOG.md. No Lite twin: Lite hosts no AG tool, no web catalogue and noserver-tabs.js, so there is nothing on that SKU for these three pins to hold.Verified here
Builds
-c Release -p:EnableWindowsTargeting=true, 0 warnings:PerformanceMonitor.Darling.Viewer,PerformanceMonitor.Darling.Service,Darling.Tests.Darling.Tests through a
Darling.Tests-named net10.0 harness on this Mac (the whole test tree compiled against the built dlls):lag and queue depth are NOT bandedsentence removed → red on that phrase; the catalogue line reverted toQuery duration percentiles over time.→ red onms/secand again on the whole-catalogue sweep namingget_query_duration_trend; theSESSION_STATStile keyed back tocollection_time→ red namingget_session_stats/SESSION_STATSand the retired key. All three green on the head.RepoFileAdoptionTests,McpPageContractTests,McpPayloadContractCensusTests,MeasurementContractCensusTests,FactSourceRegistryTests,DocCommentHygieneTests,McpLatestSnapshotStampTests; the three host classes in full (ServerPageTabsTests,DarlingMcpAgToolsSurfaceTests,DarlingMcpTrendToolsSurfaceAndSqlTests).First executed in CI: nothing on this surface — every changed assertion ran here.
Partial #3653 — item 17 (A15/A16)