Context
Found during the #12947 recount (2026-06-12 ~03:4xZ) on merged dev tip d6d6a1c75, fixture examples/grid/lockedColumns (PR #12945), Chromium via the e2e NL fixture, 1920×1080.
Release classification: operator's read — visible blank region on the canonical locked-column fixture; surfaced post-merge-wave during the v13 wrap.
The Problem (live numbers, three sample points)
neo-grid-body-3 (locked-end, single lastUpdated column) mounts 0 of the store's 8 rows while its siblings mount all 8 — stable across rest, post-wheel, and post-drag samples:
| body |
region |
columnPositions |
mountedColumns |
availableRows |
startIndex |
items |
DOM rows |
| body-2 |
locked-start |
3 |
[0,2] |
32 |
0 |
8 |
8 |
| body-1 |
center |
17 |
[0,16] |
32 |
0 |
8 |
8 |
| body-3 |
locked-end |
1 |
[0,0] |
32 |
0 |
0 |
0 |
verify_component_consistency on body-3: consistent: true, counts {dom: 0, items: 0, vdom: 0} — internally coherent, consistently empty: the engine never creates the Row components, so the Updated column renders blank. containerWidth 1920 / availableHeight 1050 present on all three; no console errors either thread.
The Architectural Reality
- The shared layout inputs are healthy (same availableRows/startIndex/buffer as siblings); the failure is upstream of row creation —
Neo.grid.Body#createViewData's guard chain or the locked-end sizing path refuses to build items for this region.
- Echoes the
#9872-era "bodyEnd stays empty" asymmetry hunt (locked-START rendered after the onColumnsMutate fix; locked-END had a distinct failing guard — that investigation thread was never separately ticketed).
- Devindex no longer exercises locked regions (
#12935 removed its locked config), so the fixture is currently the only canonical surface for this path — i.e. the bug currently has no green counter-example for locked-end ROW content anywhere.
- Note: the fixture's e2e specs (
GridColumnCrossBodyDnD, GridColumnOverdragScroll) assert column/header/region-array behavior, not locked-end row content — which is how this shipped green.
The Fix
Bisect createViewData's early-return guards for body-3 (live NL get_method_source + instrumented reads of the guard inputs at the failing return), then fix the guard or the locked-end sizing input it reads. Regression: extend the fixture's whitebox-e2e with a locked-end row-content assertion (cheap once the NL session is up; also closes the no-counter-example gap above).
Acceptance Criteria
Out of Scope
- The
#12947 window-sync invariant (verified clean — that ticket closes with the recount evidence).
- The
#12946 in-flight wedge (separate mechanism; blank-app vs blank-region).
Related
- Surface: #12936 / PR
#12945 (fixture) · Found during: #12947 recount · Historical echo: #9872-era bodyEnd-empty hunt · Siblings: #12939, #12946
Live latest-open sweep: checked latest 20 open issues at 2026-06-12T03:46Z; no equivalent (historical #9486-family archived tickets cover different defects). A2A in-flight sweep: clean.
Origin Session ID: c29b5ccc-d711-4cde-8401-32d1e4bbc4f1
Retrieval Hint: "locked-end body zero rows empty region lockedColumns fixture createViewData guard"
Context
Found during the
#12947recount (2026-06-12 ~03:4xZ) on merged dev tipd6d6a1c75, fixtureexamples/grid/lockedColumns(PR#12945), Chromium via the e2e NL fixture, 1920×1080.Release classification:operator's read — visible blank region on the canonical locked-column fixture; surfaced post-merge-wave during the v13 wrap.The Problem (live numbers, three sample points)
neo-grid-body-3(locked-end, singlelastUpdatedcolumn) mounts 0 of the store's 8 rows while its siblings mount all 8 — stable across rest, post-wheel, and post-drag samples:verify_component_consistencyon body-3:consistent: true, counts {dom: 0, items: 0, vdom: 0}— internally coherent, consistently empty: the engine never creates the Row components, so the Updated column renders blank.containerWidth1920 /availableHeight1050 present on all three; no console errors either thread.The Architectural Reality
Neo.grid.Body#createViewData's guard chain or the locked-end sizing path refuses to builditemsfor this region.#9872-era "bodyEnd stays empty" asymmetry hunt (locked-START rendered after theonColumnsMutatefix; locked-END had a distinct failing guard — that investigation thread was never separately ticketed).#12935removed its locked config), so the fixture is currently the only canonical surface for this path — i.e. the bug currently has no green counter-example for locked-end ROW content anywhere.GridColumnCrossBodyDnD,GridColumnOverdragScroll) assert column/header/region-array behavior, not locked-end row content — which is how this shipped green.The Fix
Bisect
createViewData's early-return guards for body-3 (live NLget_method_source+ instrumented reads of the guard inputs at the failing return), then fix the guard or the locked-end sizing input it reads. Regression: extend the fixture's whitebox-e2e with a locked-end row-content assertion (cheap once the NL session is up; also closes the no-counter-example gap above).Acceptance Criteria
Out of Scope
#12947window-sync invariant (verified clean — that ticket closes with the recount evidence).#12946in-flight wedge (separate mechanism; blank-app vs blank-region).Related
#12945(fixture) · Found during: #12947 recount · Historical echo:#9872-era bodyEnd-empty hunt · Siblings: #12939, #12946Live latest-open sweep: checked latest 20 open issues at 2026-06-12T03:46Z; no equivalent (historical
#9486-family archived tickets cover different defects). A2A in-flight sweep: clean.Origin Session ID: c29b5ccc-d711-4cde-8401-32d1e4bbc4f1
Retrieval Hint: "locked-end body zero rows empty region lockedColumns fixture createViewData guard"