LearnNewsExamplesServices
Frontmatter
id9868
titleR&D: Grid Multi-Body Selection Architecture Redesign
stateClosed
labels
epicai
assignees[]
createdAtApr 10, 2026, 6:35 PM
updatedAtApr 10, 2026, 8:19 PM
githubUrlhttps://github.com/neomjs/neo/issues/9868
authortobiu
commentsCount1
parentIssue9486
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[ ] 9492 Grid Multi-Body: Adapt Selection Models for Split Rows
closedAtApr 10, 2026, 8:19 PM

R&D: Grid Multi-Body Selection Architecture Redesign

Closedepicai
tobiu
tobiu commented on Apr 10, 2026, 6:35 PM

This R&D ticket is established to redefine the Neo.mjs Grid Multi-Body Selection Architecture, acting as an architectural blocker for the tactical implementation in issue #9492.

The findings below are derived from a derailed agent session retro and mandate a step back to draft a new State Topology before further code is written.


Retrospective & Architectural Blockers: Epic #9492 (Grid Multi-Body Synchronization)

1. Where Are We At?

The repository is currently in a state with incomplete, "tactical" modifications applied to the Neo.selection.grid.BaseModel. Both key E2E test validations in GridSelectionMultiBody.spec.mjs remain failing.

Current Architectural State:

  • Grid Container: GridContainer clones selectionModel instances to body, bodyStart, and bodyEnd without ignoreNeoInstances: true, meaning each body has an instantiated model.
  • BaseModel / Row Selection (neo-selected failure): Attempted to implement row.updateContent({force: true}) within the selection flow instead of raw VDOM mutation. However, because tests interact with the top-level GridContainer's selectionModel (not a specific GridBody), the getActivePeers() method logic fails to identify the child body selection models. Thus, row states are not syncing because the centralized and distributed states are disconnected.
  • Column Width Updation (2050px failure): Attempting to resize a column via app.setProperties(headerCell, {width}) fails. neo-mjs Grid utilizes CSS Grid Template properties on the parent containers (GridContainer / GridBody) to size cells, not direct inline styles on the header components.

2. What Went Wrong?

  1. Tunnel Vision & "Whack-A-Mole" Execution: Tactical, immediate symptom fixing (a failing Playwright test) overrode structural awareness.
  2. Ignoring Explicit Direction: Bypassed planning mode and dove into iterative, brute-force debugging instead of moving selectionModel_ fully into GridContainer natively.
  3. Misinterpreting E2E Data: Silent failures inside the App Worker (due to incorrect peer proxies) were masked by external E2E test timeouts.

3. The Path Forward (Requirements for this R&D Ticket)

Before tactical coding resumes on #9492, we MUST:

  1. Use the ideation-sandbox to draft a State Flow Diagram mapping how selectionModel state propagates top-down versus peer-to-peer.
  2. Architect how GridContainer can become the absolute single source of truth for selections, potentially replacing Peer State Adoption with a top-down Container -> Body -> Row flow.
  3. Validate this new architecture mathematically using Neural Link VDOM tools (inspect_component_render_tree) rather than relying on external E2E runner sweeps.
tobiu added the epic label on Apr 10, 2026, 6:35 PM
tobiu added the ai label on Apr 10, 2026, 6:35 PM
tobiu added parent issue #9486 on Apr 10, 2026, 6:35 PM
tobiu marked this issue as blocking #9492 on Apr 10, 2026, 6:35 PM
tobiu
tobiu Apr 10, 2026, 8:19 PM

Closing R&D ticket. Work transitioned to #9872 and #9492.

tobiu closed this issue on Apr 10, 2026, 8:19 PM