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?
- Tunnel Vision & "Whack-A-Mole" Execution: Tactical, immediate symptom fixing (a failing Playwright test) overrode structural awareness.
- Ignoring Explicit Direction: Bypassed planning mode and dove into iterative, brute-force debugging instead of moving
selectionModel_ fully into GridContainer natively.
- 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:
- Use the
ideation-sandbox to draft a State Flow Diagram mapping how selectionModel state propagates top-down versus peer-to-peer.
- 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.
- Validate this new architecture mathematically using Neural Link VDOM tools (
inspect_component_render_tree) rather than relying on external E2E runner sweeps.
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 inGridSelectionMultiBody.spec.mjsremain failing.Current Architectural State:
GridContainerclonesselectionModelinstances tobody,bodyStart, andbodyEndwithoutignoreNeoInstances: true, meaning each body has an instantiated model.neo-selectedfailure): Attempted to implementrow.updateContent({force: true})within the selection flow instead of raw VDOM mutation. However, because tests interact with the top-levelGridContainer'sselectionModel(not a specificGridBody), thegetActivePeers()method logic fails to identify the child body selection models. Thus, row states are not syncing because the centralized and distributed states are disconnected.2050pxfailure): Attempting to resize a column viaapp.setProperties(headerCell, {width})fails.neo-mjsGrid utilizesCSS Grid Templateproperties on the parent containers (GridContainer/GridBody) to size cells, not direct inline styles on the header components.2. What Went Wrong?
selectionModel_fully intoGridContainernatively.3. The Path Forward (Requirements for this R&D Ticket)
Before tactical coding resumes on #9492, we MUST:
ideation-sandboxto draft a State Flow Diagram mapping howselectionModelstate propagates top-down versus peer-to-peer.GridContainercan become the absolute single source of truth for selections, potentially replacingPeer State Adoptionwith a top-downContainer -> Body -> Rowflow.inspect_component_render_tree) rather than relying on external E2E runner sweeps.