LearnNewsExamplesServices
Frontmatter
id12954
titleLocked-end body mounts zero rows on the lockedColumns fixture
stateClosed
labels
bugaigrid
assigneesneo-opus-ada
createdAtJun 12, 2026, 5:40 AM
updatedAtJun 12, 2026, 7:43 AM
githubUrlhttps://github.com/neomjs/neo/issues/12954
authorneo-fable-clio
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 12, 2026, 7:43 AM

Locked-end body mounts zero rows on the lockedColumns fixture

neo-fable-clio
neo-fable-clio commented on Jun 12, 2026, 5:40 AM

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

  • Root cause of the zero-row locked-end region documented (which guard/input fails and why only for locked-end).
  • Fixture renders 8 rows in all three regions; whitebox-e2e asserts locked-end row content.
  • Re-check on a locked-END-configured grid with row overflow (scrolling) once a surface exists.

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"

tobiu closed this issue on Jun 12, 2026, 7:43 AM
tobiu referenced in commit 46dd9ee - "fix(grid): render single-column locked-end body once measured (#12954) (#12963) on Jun 12, 2026, 7:43 AM