LearnNewsExamplesServices
Frontmatter
id19272
titleWorkstationPopOutPaneIdentityNL counts the grid's viewport-sized row pool as pane identity
stateClosed
labels
bugaidashboardtest
assigneesneo-opus-grace
createdAtSep 26, 2026, 1:59 PM
updatedAtSep 26, 2026, 2:30 PM
githubUrlhttps://github.com/neomjs/neo/issues/19272
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 26, 2026, 2:30 PM

WorkstationPopOutPaneIdentityNL counts the grid's viewport-sized row pool as pane identity

Closed v13.2.0/archive-v13-2-0-chunk-23 bugaidashboardtest
neo-opus-grace
neo-opus-grace commented on Sep 26, 2026, 1:59 PM

Context

WorkstationPopOutPaneIdentityNL › component, provider, store and descendant identities survive pop-out AND return has been red in every #17844 census (the 21 at 03219a75b7, the 28 at e66b6f8142, the 22 at a9abb6c1dc) and still is at dev a87a89e293:

and every descendant travelled as the same instance
- Expected  -  0
+ Received  + 25
    "neo-grid-body-2__row-0" … "neo-grid-body-2__row-4"   (before and after)
  + "neo-grid-body-2__row-5" … "neo-grid-body-2__row-29"  (after only)

The Problem

readIdentity collects every component id under the Feed pane, which includes the grid body's pooled row components. The pool is sized by the height the grid paints in. The Feed pane in the opener shows 5 rows; the popup is taller, so the same grid body grows its pool to 30. The diff is additions only: every descendant from before the pop-out is still there, the same instance. The claim the arm states holds, and its assertion, set equality, measures the viewport too.

The Architectural Reality

  • Instance identity is the claim (componentId, providerId, storeId, the subtree). A pooled row's count belongs to the grid's virtualization, not to the pane's identity.
  • Relaxing the check to "before ⊆ after" alone would also accept a re-created toolbar or column. So the non-pooled subtree stays exact.

The Fix

Both legs (detached and returned) compare the subtree in two parts:

  • the non-pooled descendants, exactly;
  • every pre-existing pooled row still present, with extra rows allowed (a pool grown by a taller window).

A pooled row is the grid body's __row-N component. No engine change.

Acceptance Criteria

  • AC-1: at the head (headless, --workers=1, runtime root bound), the arm passes its detached identity leg. It then fails later, on the return leg's reintegration. That failure predates this ticket (it reproduces at the arm's own authoring commit) and is #19273's; the returned identity leg runs once #19273 lands.
  • AC-2: red-first: dev's spec at the same head fails on "every descendant travelled as the same instance".
  • AC-3: with the pooled-row predicate forced false (the old equality), the arm fails again, so the relaxation is exactly the pool and nothing else.

Out of Scope

  • The grid's pool sizing, which is correct.
  • The rest of #17844's census.

Related

#17844 (census) · #18395 / #18396 (the arm's last change)

Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "WorkstationPopOutPaneIdentityNL descendant identity grid row pool viewport popup taller"

tobiu referenced in commit da838fc - "test(workstation): pop-out identity allows the grid's row pool to grow in a taller window (#19272) (#19275) on Sep 26, 2026, 2:30 PM
tobiu closed this issue on Sep 26, 2026, 2:30 PM