Skip to content

Two V137 pins met the rungs that landed around them: the v62→v63 DuckDB climb asserted the ladder's top was 63 forever, and the eight-column no-reader census read #3797's null-placeholder query_capture_mode key as a reader — dev red since #3813 (V137 residue) - #3821

Merged
erikdarlingdata merged 1 commit into
devfrom
fix/v137-lite-v63-climb-pin
Sep 20, 2026

Conversation

@erikdarlingdata

@erikdarlingdata erikdarlingdata commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Two V137 pins met the rungs that landed around them — one said "63" meaning "nothing above me", one read a null placeholder as a reader

(1) Lite.Tests.TimeHonestyRungReadTests.AV62Database_ClimbsToV63_AndItsOldRowsReadNull — dev red on f2e1816

Mechanism. The test stamps a real DuckDB file back to 62, re-initializes it, and asserted MAX(version) == 63. DuckDbInitializer.InitializeAsync runs every block above the stamp in one pass, so the version a re-initialized database lands on is the CURRENT top — 64 since #3813 (V137 / Lite v64, the Query Store capture modes) — and the literal was a top-rung claim hiding inside a test about v63's two columns.

Evidence. Dev run 35526527790 at f2e1816 (the #3813 merge): build red on exactly this one test — Expected: 63, Actual: 64 — with Darling PostgreSQL tests and the whole-tree guards green.

Why this shape. The pin now reads (long)DuckDbInitializer.CurrentSchemaVersion — the idiom PerfmonCounterTypeTests' v61→v62 climb already uses — and additionally asserts CurrentSchemaVersion >= 63 so the rung's own floor stays stated. The v63 half the test owns (both columns back, nullable, trailing; the pre-rung rows NULL through the re-expanded v_ views; post-rung rows landing) is untouched; the literal top belongs to the newest Lite rung's own test (QsCaptureModeRungTests.AV63Database_ClimbsToV64_AndItsOldRowsReadNull), where it will move again when v65 lands.

(2) QsCaptureModeRouteKnobToastRungTests.NoReaderNamesAnyOfTheEightColumnsYet — would red on 20215a4

Mechanism. The census scans product code (comments stripped, string constants kept) for the eight V137 column names, so a consumer lane has to retire its arm deliberately. #3797's get_query_store_clutter (4492479, merged 40 minutes after #3813) publishes query_capture_mode = (string?)null beside capture_mode_known = false and a note saying the column lands with V137 — the payload KEY so a caller's shape is stable, never a value read from the store — and DarlingMcpInstructions names the key in the prose that tells an agent what the tool will say. Pointers, not readers: the V136 shape's PgTargetToolRecommendations exclusion.

Why this shape. The two files are excluded from the eight-name scan, and the clutter tool is held POSITIVELY to its pointer state — the null placeholder present, no wait_stats_capture_mode, and no SELECT … FROM [v_]query_store_health span of its naming query_capture_mode — so the moment #3797's reader half lands the arm reds and is retired on purpose, which is what the census is for. Red-then-green on this Mac: the original pin reds against dev + #3797 naming DarlingMcpInstructions.cs; the edited pin passes 7/7.

What this does NOT do

No product code. No other pin moves: a scan of Lite.Tests for literal schema-version equalities finds no other, and the V136 handoff pins in PgDatabaseSizeStatsAndHostMemoryRungTests are green as merged (lane 32's positive-census reshaping and this lane's top-arm handoff landed in different regions of the same file within eight seconds and both survived).

Tests

Executed on this Mac: TimeHonestyRungReadTests 5/5, TimeHonestyRungTests 6/6, QsCaptureModeRungTests 3/3, PerfmonCounterTypeTests 17/17, WatermarkFrameReadTests 3/3 (Lite); QsCaptureModeRouteKnobToastRungTests 7/7 red-then-green, PgDatabaseSizeStatsAndHostMemoryRungTests 6/6, RepoFileAdoptionTests 2/2 (Darling). The V137 lane ran the sibling TimeHonestyRungTests class by name and not this WPF-hosted one; the full Lite sweep had (1) and was not read before push — stated so the census habit is the lesson, not the pin.

Fixes the dev red left by #3813 (partial #3796, partial #3712, partial #3783).

@erikdarlingdata
erikdarlingdata enabled auto-merge (squash) September 20, 2026 18:00
…kDB climb asserted the ladder's top was 63 forever (a re-initialized database climbs to CurrentSchemaVersion, 64 since v64), and the eight-column no-reader census read #3797's null-placeholder query_capture_mode key as a reader — dev red on f2e1816 and next on 20215a4 (#3813 residue)

(1) Lite.Tests.TimeHonestyRungReadTests.AV62Database_ClimbsToV63_AndItsOldRowsReadNull
stamped a real DuckDB back to 62, re-initialized it, and asserted
MAX(version) == 63. InitializeAsync runs every block above the stamp in
one pass, so the top it lands on is whatever the newest rung is - 64
since #3813's Lite twin - and the literal was a "there is no rung above
me" claim hiding inside a test about v63's two columns. The v63 half is
unchanged; the pin now reads CurrentSchemaVersion (the
PerfmonCounterTypeTests v61->v62 idiom) and asserts >= 63.

(2) QsCaptureModeRouteKnobToastRungTests.NoReaderNamesAnyOfTheEightColumnsYet
scans product code, comments stripped, for the eight column names.
#3797's get_query_store_clutter (4492479, merged 40 minutes after
#3813) publishes `query_capture_mode = (string?)null` beside
`capture_mode_known = false` and a note that the column lands with
V137 - the payload KEY, so a caller's shape is stable, never a value
read from the store - and DarlingMcpInstructions names the key in
prose. Both are pointers, the V136 shape's PgTargetToolRecommendations
exclusion; the census now excludes the two files and holds the clutter
tool POSITIVELY to that state (null placeholder present, no
wait_stats_capture_mode, no SELECT of the capture mode from the health
table), so the moment it reads the column the arm reds and is retired
deliberately. Red-then-green on this Mac against dev + #3797.

The V137 lane ran TimeHonestyRungTests (the sibling class) and not the
WPF-hosted Read class; the full Lite sweep had (1) and was not read
before push.
@erikdarlingdata
erikdarlingdata force-pushed the fix/v137-lite-v63-climb-pin branch from a75e166 to 482d5e4 Compare September 20, 2026 18:02
@erikdarlingdata erikdarlingdata changed the title The v62→v63 DuckDB climb pin asserted the ladder's top was 63 forever; a re-initialized database climbs to CurrentSchemaVersion, which Lite v64 made 64 — dev red since #3813 (V137 residue) Two V137 pins met the rungs that landed around them: the v62→v63 DuckDB climb asserted the ladder's top was 63 forever, and the eight-column no-reader census read #3797's null-placeholder query_capture_mode key as a reader — dev red since #3813 (V137 residue) Sep 20, 2026
@erikdarlingdata
erikdarlingdata merged commit 6163165 into dev Sep 20, 2026
9 of 10 checks passed
@erikdarlingdata
erikdarlingdata deleted the fix/v137-lite-v63-climb-pin branch September 20, 2026 18:14
erikdarlingdata added a commit that referenced this pull request Sep 20, 2026
…which holds no SQL: the reader and judgment files — where a capture-mode READ would land — are now held to naming neither column (#3797 lane 6, after #3821)

#3821 allowed get_query_store_clutter's null-placeholder query_capture_mode key in the tool file and the instructions row, and fenced the read with a regex over SELECT ... FROM v_query_store_health in the tool file. The tool file has no SELECT in it — the clutter view's statements live in DarlingQueryStoreClutterReader (ConfigSql names the health row's columns) and its judgment in QueryStoreClutter — so that fence matches nothing and a reader wiring the column would pass it. This adds the fence where the read would land: both files are asserted to name neither capture-mode column, with the message saying which arm to retire. Test roster only, one file, twenty lines.
erikdarlingdata added a commit that referenced this pull request Sep 20, 2026
…which holds no SQL: the reader and judgment files — where a capture-mode READ would land — are now held to naming neither column (#3797 lane 6, after #3821) (#3822)

#3821 allowed get_query_store_clutter's null-placeholder query_capture_mode key in the tool file and the instructions row, and fenced the read with a regex over SELECT ... FROM v_query_store_health in the tool file. The tool file has no SELECT in it — the clutter view's statements live in DarlingQueryStoreClutterReader (ConfigSql names the health row's columns) and its judgment in QueryStoreClutter — so that fence matches nothing and a reader wiring the column would pass it. This adds the fence where the read would land: both files are asserted to name neither capture-mode column, with the message saying which arm to retire. Test roster only, one file, twenty lines.
erikdarlingdata added a commit that referenced this pull request Sep 20, 2026
…: the V137 eight-column no-reader census is retired whole rather than exempted file by file — #3814 released the clause forty minutes after the rung, #3821 bought one merge by name, and #3796, #3712 and #3783 were each about to red the same method and race to edit it (follow-up to #3813)

QsCaptureModeRouteKnobToastRungTests.NoReaderNamesAnyOfTheEightColumnsYet
scanned the five product projects, comments stripped, for the eight V137
column names and threw on the first hit. Dev red at 20215a4:

  DarlingMcpInstructions.cs names query_capture_mode

capture_mode_known = false — a pointer, not a read — and the census cannot
tell the two apart. #3821 exempted the two files and added a positive arm;
green, but the three code halves the rung exists for name the columns in
product source outside any exemption (measured: #3796's pushed branch,
edit to the method. Three lanes editing one test body whose only job left
is to be edited is the race, not the fix.

The method and its summary go; the class doc records the history in the
file's voice; every other fact stays byte-for-byte, including the (d)
no-WRITER arm on StoreSelfMetrics.cs inside the dimension-sweep fact (one
file, one lane, #3783 retires it with the row). WithoutComments stays for
that arm. No product file touched. Lite.Tests/QsCaptureModeRungTests has
no reader-roster fact to retire.

Darling.Tests -c Release -p:EnableWindowsTargeting=true: 0 warnings.
In-process on this Mac: the class 6/6; the 20215a4 version of the class
in the same harness fails exactly the quoted fact; RepoFileAdoptionTests,
DocCommentHygieneTests, CommentFilterAdoptionTests and the census list
green.
erikdarlingdata added a commit that referenced this pull request Sep 20, 2026
…: the V137 eight-column no-reader census is retired whole rather than exempted file by file — #3814 released the clause forty minutes after the rung, #3821 bought one merge by name, and #3796, #3712 and #3783 were each about to red the same method and race to edit it (follow-up to #3813) (#3825)

QsCaptureModeRouteKnobToastRungTests.NoReaderNamesAnyOfTheEightColumnsYet
scanned the five product projects, comments stripped, for the eight V137
column names and threw on the first hit. Dev red at 20215a4:

  DarlingMcpInstructions.cs names query_capture_mode

capture_mode_known = false — a pointer, not a read — and the census cannot
tell the two apart. #3821 exempted the two files and added a positive arm;
green, but the three code halves the rung exists for name the columns in
product source outside any exemption (measured: #3796's pushed branch,
edit to the method. Three lanes editing one test body whose only job left
is to be edited is the race, not the fix.

The method and its summary go; the class doc records the history in the
file's voice; every other fact stays byte-for-byte, including the (d)
no-WRITER arm on StoreSelfMetrics.cs inside the dimension-sweep fact (one
file, one lane, #3783 retires it with the row). WithoutComments stays for
that arm. No product file touched. Lite.Tests/QsCaptureModeRungTests has
no reader-roster fact to retire.

Darling.Tests -c Release -p:EnableWindowsTargeting=true: 0 warnings.
In-process on this Mac: the class 6/6; the 20215a4 version of the class
in the same harness fails exactly the quoted fact; RepoFileAdoptionTests,
DocCommentHygieneTests, CommentFilterAdoptionTests and the census list
green.
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