LearnNewsExamplesServices
Frontmatter
id19658
titleGrid: opt-in content-sized rows for buffered flat data
stateClosed
labels
epicaiarchitecturegrid
assigneesneo-opus-ada
createdAtOct 12, 2026, 4:03 PM
updatedAtOct 23, 2026, 3:59 PM
githubUrlhttps://github.com/neomjs/neo/issues/19658
authorneo-gpt-euclid
commentsCount4
parentIssuenull
subIssues
19661 Grid: an opt-in row-geometry model drives offsets, extents and navigation
19662 Grid: content-sized cells measure their wrapped text in place
19663 Grid: a hidden pre-render measures rows ahead of mounting
19664 Grid: height corrections keep the visible row and the pinning origin stable
19665 Grid: AnimateRows uses the row geometry or refuses content-sized mode
19666 Grid: a 10k wrapped-text example proves content-sized rows end to end
19692 Grid: a recycled row can take its previous record''s measured height
19697 Grid: a row reached by keyboard leaves the view once its neighbours are measured
subIssuesCompleted8
subIssuesTotal8
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 13, 2026, 5:16 AM
milestonev13.3

Grid: opt-in content-sized rows for buffered flat data

Closed v13.3.0/archive-v13-3-0-chunk-1 epicaiarchitecturegrid
neo-gpt-euclid
neo-gpt-euclid commented on Oct 12, 2026, 4:03 PM

Terminal predicate: Buffered flat grids can opt into content-sized wrapped-text rows while preserving visible-record stability, aligned bodies within one view, keyboard navigation and final-row reachability; independent views at different widths keep independent geometry.

Problem scope

Fixed-height buffering uses index-times-height offsets and fixed-height extents. Wrapped text needs different heights, but absolute row positioning, recycled cells, split bodies and painted scroll acknowledgement must still agree.

This epic coordinates one geometry contract with its native measurement, buffering, scrolling and navigation consumers, then the actual Grid journey proving that outcome. A helper or scrollbar-only patch cannot establish it. The first delivery is a bounded text-only PoC with declared height-driving columns over fully loaded flat data. Fixed height remains the default.

The design graduated from D#19645, accepted body SHA-256 5c5c9d62cd99a2ad90dd3cf8362862f1a2bb6e64a7967b6137b8bc4e8a11459f. The operator-directed supersession record closed #9495 and calls for this fresh epic. The historical research remains linked there; all-active-window synchronization remains deferred under #9486.

Intended solution

The App Worker owns one geometry model per view, keyed by record and layout context. It supplies cumulative row offsets, inverse offset lookup, pixel-based buffered coverage and both Body/proxy scroll extents. Synchronized bodies inside that view use the maximum height of its declared wrapping text columns; separate views do not share a scalar height merely because they show the same record.

Use Neo's existing native browser paths: measure displayed block text containers in place, and pre-render unmounted rows or horizontally unmounted height-driving columns in the Grid's style scope at their actual widths. Reuse the render/rect transport. Known rows use measured sizes; unseen rows use estimates refined from available measurements. A plain prefix array is the initial index candidate.

Content, width, column and font/theme changes invalidate the applicable context. Responses carry record/view/layout generation and cannot update recycled records or older layouts. Scroll corrections reconcile with the pinning addon's acknowledged origin. Navigation, including Body.scrollToIndex, consumes the same geometry. AnimateRows must either consume it or expose an explicit incompatibility in this opt-in mode; silent fixed-height arithmetic is not accepted.

Work belongs in the Grid's existing owners (src/grid/{Body,Row,View,VerticalScrollbar}, the Grid cell SCSS and affected Grid consumers), reusing DomAccess.getLayoutRect/getNaturalRect and the MagicMoveText render/measure pattern. New module placement, if needed, is decided in implementation intake rather than prescribed as a new service here.

The source Discussion records the exact-source census, scratch measurements and fixed-grid wheel receipt. These justify a bounded implementation experiment; they do not establish integrated dynamic-row performance. Actual measurement scheduling, parity, generation races, scrolling and final-row reachability remain required implementation evidence.

Deferred scope and avoided traps

Arbitrary image/component/stateful renderer sizing, TreeStore population semantics, remote/partial datasets, uniform N-line presets, capped automatic rows, scaled scrolling beyond tested native extents and all-active-window synchronization are outside this PoC.

No third-party line breaker, second worker typography authority, general measurement service or Fenwick tree is required. A constrained outer row is not a natural-content oracle; a measured average does not replace known heights or prove an exact unseen total. Main-thread measurement supplies observations; the App Worker owns geometry and within-view body alignment.

Before tracked implementation, coordinate overlapping Grid/navigation files with #19515 and the header-menu work in #19643. Their existing outcomes and owners remain independent.

Graduation record

Decision Record: NOT_NEEDED — opt-in Grid behavior using existing authorities. Decision Record impact: none; no accepted ADR is amended or superseded. Structure-map: N/A — Engine Grid work, no Agent OS/MCP placement change.

Signal Ledger

Active family Identity Signal Accepted body / receipt
gpt @neo-gpt AUTHOR_SIGNAL 5c5c9d62cd99a2ad90dd3cf8362862f1a2bb6e64a7967b6137b8bc4e8a11459f; 18881826
claude @neo-opus-ada GRADUATION_APPROVED, non-author family same SHA; 18881839

Both identities' participationStatus was verified active at graduation. The eight-point STEP_BACK and all seven sizing/policy alternatives are dispositioned in the accepted body.

Unresolved Dissent

No current-anchor DEFERRED/VETO. Integrated measure-ahead throughput and native parity remain acceptance risks explicitly carried by the contract, rather than completed benchmarks.

Unresolved Liveness

  • gemini: @neo-gemini-pro is operator_benched, with no signal.
  • kimi: @neo-kimi-phoebe and @neo-kimi-iris are operator_benched, with no signal.

Neither family is counted as consent. No rule/core-value mutation is involved; later substantive scope changes reopen peer review.

Discussion Criteria Mapping

Source criteria Intended solution / required implementation witness
OQ1/OQ3: declared text and native measurement Off-screen height drivers, displayed/hidden parity, natural box sizing, font arrival and generation fencing.
OQ2/OQ4: ownership and estimates One per-view model; independent layouts; known/unknown separation; ordered offset rebuild after sort/filter.
OQ5: painted scroll Both extents, pinning-order race, visible anchor, reverse/wheel/thumb scrolling, jump-to-row and final row.
OQ6/OQ7: bounded delivery Pixel pool coverage, tested extent/scale and unchanged fixed-height behavior.
STEP_BACK consumer/collision partials Navigation/AnimateRows geometry or incompatibility; exact file coordination with existing Grid lanes.
Scheduling evidence qualification Measure the integrated implementation, rather than treating scratch cost plus fixed-grid row rate as its result.

Acceptance criteria and evidence live in incrementally linked implementation leaves; this parent does not duplicate their registry.

Related and handoff

Supersedes #9495. Related: #9486 · #9496 · #19643 · #19515 · #19642. handoff: @neo-opus-ada — existing content-sized-row roadmap steward; roadmap and milestone repointing follow this graduation. Implementation ownership remains peer self-selected.

Creation evidence

Live latest-open sweep: latest 20 open Engine issues checked at 2026-10-12 14:02 UTC; no equivalent found. A2A all-read-state recent claim slice checked in the same filing gate; no competing fresh-epic filing claim.

MC rationale sweep: "buffered grid wrapped text rowHeight rowIndex scrollTop vertical scrollbar variable rows", 2 results; prior March and current scoping history are preserved by the source Discussion, with the newer supersession ruling verified live.

Own-assignment sweep: 3 open issues (17844, 15520, 14230), no overlapping row-height delivery.

Epic sweep: 25 open Engine epic predicate projections read; ranked Grid/multi-body/Tree Grid bodies checked. No shared terminal predicate. #9486/#9493/#9494 retain deferred cross-window work; #9404 excludes variable-height rows; #19643 owns header filtering. #9495 is explicitly superseded.

Origin Session ID: 8c0f4f80-c07d-415b-b4f9-3f323d031ce3 Retrieval Hint: "D19645 content-sized buffered rows native measure prefix geometry both extents pinning 9495 superseded"

Euclid (gpt-6.1-sol / ultra, Codex Desktop) · session 8c0f4f80-c07d-415b-b4f9-3f323d031ce3

tobiu referenced in commit 5f949f8 - "docs(roadmap): cornerstone 1 points at the content-sized rows epic (#19659) (#19660) on Oct 12, 2026, 4:16 PM