Repository navigation
The write family tells Aurora the truth: checkpoint pressure and max_wal_size are not applicable where storage owns checkpointing, and WAL volume is graded against its own baseline where the engine reports it (partial #3691) - #3728
Merged
Merged
Conversation
…wal_size are not_applicable where storage owns checkpointing, and WAL volume is graded against its own baseline where the engine reports it (partial #3691) Lane 15 of #3691 (design §3.11, calibration §A4 / §A7). Half one — Aurora not_applicable. Fifty Aurora clusters over fourteen days reported sixty timed "checkpoints" an hour and a requested share of 0 on every one: Aurora storage owns checkpointing and the counters are synthetic. PG_CHECKPOINT_PRESSURE and CONFIG_PG_MAX_WAL_SIZE are still emitted on aurora-postgres (the operator sees the shape — timed_per_hour, requested_share — and the reason) but carry not_applicable = 1 / not_applicable_on_aurora = 1 / reason_aurora_storage_checkpointing = 1 in metadata (the numeric-metadata flag idiom the buffer composite's hit_ratio_suppressed set; Fact.Metadata has no string slot and no status vocabulary is invented). Both scorers return 0 off the flag with no lineage stamp; base 0 means no amplifier runs, the pressure → knob edge's predicate is false, and no card roots — planted requested-dominant checkpoints on an Aurora-stamped server form no checkpoint story (pinned, live). Advice on the flagged facts is one sentence: what Aurora does instead and where to look. Stock PostgreSQL is byte-identical: lane 2's pins pass unchanged and the contrast is re-run beside the Aurora shape. Half two — PG_WAL_VOLUME_SHIFT + ANOMALY_PG_WAL_VOLUME. A new read, PgTargetWalVolumeSql, rates Δwal_bytes per collection over its own gap (the checkpoint read's reset-clamped differencing, the pg_tps arm's gap rule). The shift is a CONTEXT fact — mean and peak bytes/s, base 0, threshold_lineage = 1 because no bar was chosen (WAL volume is server-relative) — or unavailable = 1 with one reason flag (reason_wal_stats_not_reported: Aurora / all-zero; reason_pg_stat_wal_absent: major < 14, no rows). The anomaly is the graded instrument: the window's peak against the pg_wal_bytes_per_sec bucket (new baseline arm, same differencing, half-open, untracked rows excluded) through the shared gate, floor 1 MiB/s and fallback 16 MiB/s (AnomalyThresholds lane-15 block; unmeasured and un-calibratable on an all-Aurora fleet, stated), threshold_lineage = 0. The detector reads the window FIRST and skips the 30-day bucket on an untracked window. The checkpoint fact's trigger amplifier now reads the anomaly (the thing that can have fired); the anomaly folds onto the checkpoint incident through AnomalyToFamilies (P2). Lane 2's inert shift → pressure graph edge is removed: a base-0 fact can neither root nor be walked to, and re-keying it onto the anomaly was rejected (an anomaly-rooted path would cap a paging pressure story at 1.49 and flap the persisted root key) — the graph file records the argument. Censuses re-pinned deliberately: PgTargetAnomalyTests (served metrics 5 → 6, the (metric, table) row, the detector SQL roster, the AnomalyThresholds name list, the stub list minus lane 15), PgTargetKnobsTests (the shift-edge pin → no edge; the churn e2e now reads two write facts). New PgTargetWriteTests: 19 unit pins + two DARLING_TEST_PG e2es (Aurora requested-dominant → no story, not_applicable facts; stock 31 d of WAL at 1 MiB/s then 12 MiB/s → anomaly at 12 MiB/s, pressure story at exactly 1.5 with the trigger matched, anomaly folded onto its incident). Executed locally: 443/444 green in-worktree harness against a throwaway timescale 2.28.1-pg18 (the one red is the harness csproj's own presence). Boundary extension: one delegating case arm in PgTargetAdvice.Anomaly.cs (ComposeAnomaly) to the WAL anomaly's composer in PgTargetAdvice.Write.cs — without it the anomaly card renders without advice.
erikdarlingdata
force-pushed
the
feat/3691-pg-write-aurora-truth
branch
from
September 19, 2026 12:38
70499aa to
a33fcae
Compare
This was referenced Sep 19, 2026
erikdarlingdata
added a commit
that referenced
this pull request
Sep 22, 2026
…t at the tool that renders it (#3868) (#3874) Lane 15 of #3691 (#3728) taught the write family to tell Aurora the truth, and it stamped one knob. CONFIG_PG_MAX_WAL_SIZE carries not_applicable / not_applicable_on_aurora on an aurora-postgres target because the calibration read fifty clusters over fourteen days and found sixty timed "checkpoints" an hour with a requested share of 0 on every one: Aurora's storage layer owns checkpointing, so max_wal_size at its shipped default is not a convention finding there, it is the parameter group's value for a knob the engine does not consult. Its sibling, CONFIG_PG_CHECKPOINT_TIMEOUT, came out of the same method in the same pass unqualified. That is what #3867 found while pinning rider 1 of Erik's ruling, and it fixed the symptom it could reach: audit_config renders both checkpointing knobs not_applicable on Aurora, the second through an engine-side arm in the tool. The rider is satisfied for that one surface. Everything else that reads the fact -- get_analysis_facts, the story walk, the drill-downs -- still read a graded, unqualified fact, and its composed advice still ended with "tune it with max_wal_size, not instead of it," which on Aurora sends an operator to a knob the storage layer ignores. Belt, not braces: the fact is the truth the rest of the engine reads, and it disagreed with the tool. The stamp is mirrored, not invented. PgTargetFactCollector.Config.cs now stamps checkpoint_timeout the way it stamps max_wal_size, in the same method, off the same single read: the is_aurora flag on the SERVER_MAJOR_VERSION registry fact emitted just before this method, which comes from MonitoredEngineKind and never from a column's presence (#2530). The value is still emitted -- what a parameter group holds for a knob nothing reads is a fact about the parameter group and worth seeing, and the write partial reads checkpoint_timeout_s off max_wal_size's metadata regardless. PgTargetScorer.Config.cs needed no change and got none: its not_applicable read already returns 0 for a stamped fact, as it has for the sibling since lane 15, so no advisory roots and FactScorer.ScoreAll skips amplifiers at base 0. This knob was base 0 anyway; the stamp is about what the fact SAYS. One line had to move. audit_config keeps its engine-side arm, now honestly commented as belt and braces -- one read of a flag that is already true, kept because this tool is where rider 1's guarantee is made to a reader. But the tool also APPENDS the Aurora sentence to checkpoint_timeout's recommendation, and that append was gated on the fact being UNSTAMPED. That gate was correct when only the engine knew. Stamping the fact would have silently stopped appending the one sentence the rider exists to guarantee -- a fix that quietly regressed #3867's own acceptance, with a green build. The gate now discriminates by KEY: max_wal_size's composed block carries lane 15's not-applicable sentence inline and needs no append, while checkpoint_timeout's block is the base-0 context one with no Aurora arm, so the sentence is appended there. Found by reading #3867's live pins before running them. The write family's Aurora e2e now pins the pair where it pinned one: through the real get_analysis_facts, checkpoint_timeout reads 300 s with base 0 and both metadata flags set, beside the existing max_wal_size assertions, so a future edit that stamps only one knob again fails a test instead of shipping. PgTargetAuditConfigTests (#3867, two live arms) is untouched and green, which is the evidence that the surface did not move while the fact underneath it changed. Both config-family lineage censuses were run for lane 15's not_applicable-stamps-no-lineage contract and needed no exemption: they walk scorer SOURCE for lineage markers rather than counting facts per family, and this lane adds no bar and stamps no threshold_lineage. Verified against a live timescaledb-pg18 store: PgTargetAuditConfigTests 2/2, PgTargetWriteTests 29/29, PgTargetKnobsTests 43 (1 skipped), PgTargetThresholdLineageTests 4/4, PgTargetMeasuredLineageTests 4/4, plus PgTargetFactCollectorTests 8/8, DarlingMcpToolsTests 16/16, McpPayloadContractCensusTests 67/67, PgTargetSharedSwitchRoutingTests 28/28 and RepoFileAdoptionTests 2/2. Zero warnings. Closes #3868. Co-authored-by: erikdarlingdata <erik@erikdarling.com>
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 does this PR do?
Headline mechanism. Lane 15 of #3691 (design §3.11; calibration §A4 / §A7) makes the PostgreSQL-target write family tell Aurora the truth, in two halves. On
aurora-postgres,PG_CHECKPOINT_PRESSUREandCONFIG_PG_MAX_WAL_SIZEarenot_applicable— emitted with the shape the operator can see and the reason, scored 0, rooting nothing. Where the engine reports WAL,PG_WAL_VOLUME_SHIFTstates the window's WAL volume andANOMALY_PG_WAL_VOLUMEgrades it against the server's own hour-of-week baseline, lifting and folding onto the checkpoint incident it leads. PARTIAL for #3691 — do not close. Checklist lines completed verbatim: Aurora-suppressPG_CHECKPOINT_PRESSUREandCONFIG_PG_MAX_WAL_SIZEandPG_WAL_VOLUME_SHIFT.Half one — what fifty Aurora clusters measured, and what the product said about it
The calibration pass (§A4) read fourteen days of
pg_write_statson every PostgreSQL target the fleet monitors — fifty Aurora clusters — and found the same shape on all fifty: sixty timed "checkpoints" an hour (one a minute), a requested share whose p99 was 0 and whose maximum was 0.033. That is not fifty well-tuned servers. Aurora's storage layer owns checkpointing; the checkpointer counters the engine surfaces are synthetic, andmax_wal_sizegoverns nothing there. So v1'sPG_CHECKPOINT_PRESSUREwas a permanent, measured 0 that meant nothing, andCONFIG_PG_MAX_WAL_SIZEat its shipped default was a convention finding about a knob the engine never consults — a 0.4 advisory on every Aurora target in the fleet, forever, for a setting nothing reads.The mechanism. The registry fact's
is_aurora(MonitoredEngineKind, never a column's presence — #2530; the same read the buffer composite takes) gates two stamps:PgTargetFactCollector.Write.cs) still emits the pressure fact — the operator should see WHY — and stampsnot_applicable = 1,not_applicable_on_aurora = 1,reason_aurora_storage_checkpointing = 1, plustimed_per_hourbeside the existingrequested_share. The config collector stamps the knob factnot_applicable = 1/not_applicable_on_aurora = 1(the fact is still emitted: the write partial readscheckpoint_timeout_sandbytesoff it, and the value is true).PgTargetScorer.Write.cs,.Config.cs) return 0 off the flag before any bar is consulted, and take no lineage stamp — there is nothing graded, so there is no bar whose lineage the fact should disclose.FactScorerskips amplifiers at base 0 (the knob's co-fire can never lift it), the pressure → knob edge readsBaseSeverity > 0and is false,InferenceEngineroots nothing at 0. An Aurora-stamped server with planted requested-DOMINANT checkpoints — two requested and one timed a minute, a shape Aurora cannot produce — forms no checkpoint story and nomax_wal_sizeadvisory (pinned, live).timed_per_hourand share are stated), and where to look (get_pg_io_stats, the CPU and wait findings;get_pg_write_statsshows the synthetic series). No sizing arithmetic — there is no knob to turn.Why metadata flags and not a status.
Fact.MetadataisDictionary<string, double>and the pipeline has no fact-status vocabulary; the existing idiom for "this arm is structurally absent on this flavour" is a numeric flag whose KEY is the meaning (hit_ratio_suppressed,wal_tracked,evictions_tracked). "Status" and "reason" are therefore flag keys —not_applicable,reason_aurora_storage_checkpointing, and on the shift factunavailable/reason_wal_stats_not_reported/reason_pg_stat_wal_absent— rendered byget_analysis_factsexactly as every other flag is. Inventing a parallel status field was considered and rejected: it would touch the shared model and every renderer for one family's benefit.Stock PostgreSQL is byte-identical. Lane 2's pins (
PgTargetKnobsTests) pass unchanged;PgTargetWriteTestsre-runs the same facts with and without the flag side by side.Half two —
PG_WAL_VOLUME_SHIFTstates,ANOMALY_PG_WAL_VOLUMEgrades§A7:
wal_byteswas 0 on all fifty clusters for the whole span — Aurora does not populatepg_stat_wal(the collector types the WAL columns NULL there;pg_stat_get_wal()raises0A000). So a WAL-volume fact on this fleet would be a fabricated 0, and the shift is built for the engines that report it, with the honestunavailablewhere they do not.One differencing, three readers. A new read,
PgTargetFactCollector.PgTargetWalVolumeSql, rates Δwal_bytesper collection over the collection's own gap — the checkpoint read's reset-clamped differencing (LAGper sample,GREATEST(raw, 0),wal_stats_reset IS DISTINCT FROM its LAG), thepg_tpsarm's second-truncatedLAG(collection_time)gap — and returns the window's peak, mean, rated-sample count, total bytes,wal_records, reset count and trackedness. The detector's window read is this text by alias (PgTargetAnomalyDetector.WalVolumeWindowSql), and the newpg_wal_bytes_per_secbaseline arm (PgTargetBaselineProvider.Wal.cs) is the samesampled/cleanwith the half-open upper bound,wal_bytes IS NOT NULLso an untracked series yields an EMPTY bucket rather than thirty days of zeros with a zero MAD, under the oneRobustTierScaffold. The fact's mean and peak, the detector's peak and the bucket are one unit — bytes of WAL per second per collection.The shift is CONTEXT.
PG_WAL_VOLUME_SHIFT:Value= the window's mean bytes/s,peak_wal_bytes_per_secbeside it, base 0 always,threshold_lineage = 1— not "measured" but "no bar was chosen to have a lineage": WAL volume is a server-relative quantity (9 MiB/s is routine on one server and a deployment gone wrong on another), so this family draws no absolute bar for it anywhere. Trackedness is read three ways because the store has three ways of saying "not reported": all-NULLwal_bytes(Aurora, pre-14) →unavailable = 1,reason_wal_stats_not_reported; zero bytes AND zero records across a window in which checkpoints ran → the same reason (a livepg_stat_walwrites a record per commit); a registry major below 14 with no rows at all →reason_pg_stat_wal_absent. A known 14+ major with no rows emits nothing — the coverage witness already describes that gap.The anomaly is the graded instrument.
DetectWalVolumeAnomalies(PgTargetAnomalyDetector.Wal.cs) judges the window's peak against thepg_wal_bytes_per_secbucket through the shared gate — robust modified-z at 3.5 with median/MAD, classical 2σ otherwise — withPgWalBytesFloorPerSec= 1 MiB/s as the magnitude floor andPgWalBytesFallbackPerSec= 16 MiB/s as the bar on an untrustworthy bucket (16 MiB/s fills the shipped 1 GBmax_wal_sizein about a minute — the rate at which a default-configured server is already checkpointing on volume). Both are unmeasured, and stated as un-calibratable on the current fleet: no PostgreSQL target the product monitors reports WAL, so the fact carriesthreshold_lineage = 0until a stock population is measured. The detector reads the four-hour window FIRST and returns on an untracked window without asking for the thirty-day bucket — the reverse of the five v1 detectors, on purpose: on this fleet every pass would otherwise run the family's largest read for nothing.baseline_ratiois stamped as peak over the bucket's robust centre (median when it has one, else mean — the centre the deviation prose names, so one paragraph's two numbers are one number).How the anomaly reaches the checkpoint story — and why there is no graph edge. Two relationships, both already where the shared pipeline puts anomaly → parent relationships:
PgTargetFactKeys.AnomalyToFamiliesfolds the anomaly's story onto the checkpoint incident (P2 routed it), and the pressure fact's trigger amplifier now readsANOMALY_PG_WAL_VOLUMEfired — the anomaly, not the context fact, is the thing that can have fired (theanomalysource is inScoreAll's lookup; base 0 on Aurora means the amplifier pass never runs there, and the detector emits nothing where WAL is unreported). Lane 2's inertPG_WAL_VOLUME_SHIFT → PG_CHECKPOINT_PRESSUREedge is removed: a base-0 fact can neither root a story nor be walked to, so the edge was dead by construction and its doc line had become false. Re-keying it onto the anomaly — which the STEP brief sketched — was considered and rejected, with the argument recorded inPgTargetRelationshipGraph.Write.cs:InferenceEngineroots by descending severity and consumes the walked path, so on any pass where the anomaly outranked the pressure fact the persisted finding would root onANOMALY_PG_WAL_VOLUMEwith the pressure as its leaf — capped at the anomaly's 1.49 tuning-class ceiling however hard the pressure paged, and flapping its root key from pass to pass. No v1 anomaly has a graph edge for the same reason. The live pin shows the intended shape instead: pressure at share 1.0 × (1 + 0.3 knob + 0.2 trigger) = exactly 1.5, the trigger carrying it to the notify floor, the anomaly card folded onto that incident.Advice. The shift's block states the measured mean, peak and total (or the reason it cannot, and where per-statement WAL still lives —
get_pg_top_queries). The anomaly's block is the deviation family's (ComposeDeviation: peak, sigmas, centre, sample count; first-occurrence wording on a thin bucket) plus the ratio to the routine rate ("8.76× the 1.1 MB/s this server routinely writes at this hour of the week"), the deployment-correlation framing (a shift is a deploy, a batch, a bulk load or a reindex before it is a setting), whether checkpoint pressure co-fired, and the levers with their costs:wal_compressiontrades CPU for bytes;max_wal_sizeabsorbs volume at the cost ofpg_walfootprint and recovery time; batch sizing is the application's.full_page_writesis posture and appears nowhere (pinned). The static block is built on first use, not as astatic readonlyinitializer — it concatenatess_anomalyHedgefrom another partial file, and static-field order across partial files is unspecified (the aliasing trap the wave-2 brief records).Every file, one line
Darling/…/PgTargetFactCollector.Write.csPgTargetWalVolumeSql; the Auroranot_applicablestamp;PG_WAL_VOLUME_SHIFTin its tracked andunavailableshapes; body split intoReadCheckpointPressureAsync/ReadWalVolumeAsync(notCollect*Async— the collect-surface census reflects those)Darling/…/PgTargetFactCollector.Config.csnot_applicablestamp off the registry factPerformanceMonitor.Analysis/PgTargetScorer.Write.csPerformanceMonitor.Analysis/PgTargetScorer.Config.csmax_wal_sizearm returns 0 off the flagPerformanceMonitor.Analysis/PgTargetRelationshipGraph.Write.csPerformanceMonitor.Analysis/PgTargetAdvice.Write.csPerformanceMonitor.Analysis/PgTargetAdvice.Anomaly.cscaseto the WAL composer, and the summary line it falsifiedPerformanceMonitor.Analysis/Baselines/AnomalyThresholds.cs// lane 15block:PgWalBytesFloorPerSec,PgWalBytesFallbackPerSec, each with its unmeasured lineageDarling/…/PgTargetAnomalyDetector.Wal.csWalVolumeWindowSqlalias; the detector body (window first, bucket second)Darling/…/PgTargetBaselineProvider.Wal.cspg_wal_bytes_per_secarmDarling/Darling.Tests/PgTargetWriteTests.csDARLING_TEST_PGe2es (below)Darling/Darling.Tests/PgTargetAnomalyTests.cspg_wal_bytes_per_sec,pg_write_stats), detector SQL roster + alias pin,AnomalyThresholdsname list + bars in bytes, stub list minus lane 15Darling/Darling.Tests/PgTargetKnobsTests.csPG_SLOT_RETENTIONedge stays pinned by membership); the churn e2e now reads two write facts and pins the shift's planted rateLite twin: none — every touched class is Darling-only or the shared
PerformanceMonitor.Analysis(no Lite copy).deprecated/Dashboard.Testsbuilds clean.What it does NOT do
No rung; no new key, source or metric name (all P2's); no root-file edit (
PgTargetFactKeys.WalVolumeShift's doc line "declared for the write-chain edge" andPgTargetBaselineProvider.cs's retention table list are now stale — reported for the coordinator's shared-file batch). Lane 12'sPG_WAL_VOLUME_SHIFT → PG_SLOT_RETENTIONedge (#3727) is left in place: the same base-0 argument makes it inert, and it is lane 12's file — reported on #3691 for the coordinator, not removed here. No measured WAL bar — none exists to measure. The stock-target 1.30 anomaly ceiling stays a v3 item. A SQL Server target's pass is byte-identical: every new arm is behind apg_-source switch or a PG-only key.Test plan
Builds, zero warnings of ours:
PerformanceMonitor.Analysis,PerformanceMonitor.Darling.Service(pullsDarling.Analysis),Darling.Tests,Lite.Tests,deprecated/Dashboard.Tests(-p:EnableWindowsTargeting=trueon the test projects). The oneLite.Testswarning (LogTailOverlapThresholdPinTests.cs:95xUnit2000) is pre-existing on dev.New tests (
PgTargetWriteTests, 21): scorer 0 off the flag with no lineage stamp and stock at 1.0 with it;max_wal_size0.4 / 0 by flag (theory); an Aurora fact set with requested-dominant pressure → no amplifier ran, no active edge, no write-chain story,shared_buffersstill roots; the same set on stock → pressure → knob (lane 2's contrast); the shift scores 0 in all three shapes with lineage 1 and no amplifier throughScoreAll; the trigger amplifier ignores the context fact and matches the anomaly (0.625 × 1.2 pinned); fold + no edge from either key + no edge INTO either; the gate fires at 9.2 and 2 MiB/s, holds under the 1 MiB/s floor at 20+σ, falls back to 16 MiB/s on a thin bucket; the read's differencing, dialect and alias; the baseline arm's shape; Aurora advice (synthetic shape stated, no sizing), shift advice (rates or reason), anomaly advice (peak, σ, ratio, deploy framing, co-fire sentence, first-occurrence wording, neverfull_page_writes,FactAdvicedelegation equality). Gated e2es: Aurora-stamped, two requested + one timed a minute, WAL NULL → one finding (shared_buffers), pressure factnot_applicablewithtimed_per_hour60 and share ⅔, shiftunavailable/reason_wal_stats_not_reported, knob 0 with the flag; stock-stamped, 31 days at 1 MiB/s (±5 % ripple) then 12 MiB/s for the window, requested-dominant throughout → trusted bucket at the median, anomaly at exactly 12 MiB/s with lineage 0 and ratio in [11, 13], pressure story at 1.5 with the trigger carrying it, anomaly folded onto its incident, shift stating 12 MiB/s, no card on the shift.EXECUTED here through a net10.0 harness (
AssemblyName=Darling.Tests, the 40-file PgTarget census set) run from inside the worktree against a throwawaytimescale/timescaledb:2.28.1-pg18on Docker contextdesktop-linux, migrated to V132 by the fixture, torn down after: 561 / 562 green after the rebase onto dev at50881f8c5(the set plus lanes 11 / 12 / 13 / 5'sPgTargetIoTests,PgTargetReplicationTests,PgTargetBloatTests,PgTargetWaitTests), the one red being the harness csproj's own presence trippingDocCommentHygieneTests.TheDerivedProjectListCoversEveryProjectInTheTree(the artifact #3665 and #3715 recorded). That includes both new e2es and every existing gated e2e in the set (lane 2's churn e2e with its re-pinned two write facts; lane 9's spike e2e). Every number asserted was read off the executed run. First execution of everything outside the set is CI's Windows job.Censuses pre-checked:
PgTargetFactCollectorTests(collect surface unchanged — the two new helpers areRead*, notCollect*Async;AllSqlclosure; FROM/JOIN whitelist; dialect),PgTargetAnomalyTests(all re-pinned above),PgTargetSharedSwitchRoutingTests(delegation equality — the anomaly arm delegates),PgTargetThresholdLineageTests(every new comparison carries a marker or only trivial literals),PgTargetMcpSurfaceTests,StoreSqlClockDisciplineTests,FactSourceRegistryTests,LiveCleanupConversionRatchetTests+LivePostgresCollectionHygieneTests(the new live class is[Collection("live-postgres")]withLiveStoreCleanup.RunAsync),AuroraOnlySqlIsGatedTests(no new file mentionsaurora_stat_),DocCommentHygiene(green in-worktree),RepoFileAdoptionTests(the new test reads no repo files).Which component(s) does this affect?
How was this tested?
Above. No production store or fleet server was read; the calibration numbers quoted are the coordinator's announced pass (measurements-3691 §A4 / §A7).
Checklist
dotnet build -c Debug)Partial for #3691 (lane 15). CHANGELOG deliberately untouched — the coordinator splices this wave's entries. Not armed (review-dark window).