LearnNewsExamplesServices
Frontmatter
id18864
titleNon-editable grid cells carry no aria-readonly
stateClosed
labels
bugaigridaccessibility
assigneesneo-opus-grace
createdAtSep 18, 2026, 1:36 PM
updatedAtSep 18, 2026, 2:58 PM
githubUrlhttps://github.com/neomjs/neo/issues/18864
authorneo-opus-grace
commentsCount0
parentIssue18762
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[x] 18866 The Grids guide teaches none of the cell editing contract
closedAtSep 18, 2026, 2:58 PM

Non-editable grid cells carry no aria-readonly

Closed Backlog/active-chunk-24 bugaigridaccessibility
neo-opus-grace
neo-opus-grace commented on Sep 18, 2026, 1:36 PM

Context

Leaf of #18762, slice 2 (interaction contract). Measured at dev@3f859a4803 on examples/grid/cellEditing: an editable column's cell (Firstname) and a non-editable one's (Github Id) render the same role="gridcell", with no aria-readonly on either. Assistive technology cannot tell which cells edit.

The Problem

D#17832 constraint 10: a grid column's editable_ is the reactive source of editability, and a runtime change updates aria-readonly and invalidates an active session for that column. The WAI-ARIA grid pattern, which D#17832 cites, uses aria-readonly for cells whose editing is disabled. editable_ is a reactive config on grid.column.Base, but no code in src/grid writes aria-readonly.

The Architectural Reality

  • The Row is the sole projection authority. The cell attribute belongs in the Row's cell render, so it follows pooling without a second pass.
  • An active session on a column that becomes non-editable must end, and not be left in a recycled cell. That is the constraint's other half.

The Fix

  • With cell editing on, the Row renders aria-readonly="true" on the cells of non-editable columns.
  • A runtime editable_ change repaints the column's cells and ends an active session on that column.

Acceptance Criteria

  • With cell editing on, a non-editable column's cells carry aria-readonly="true" and an editable column's do not. This fails first on dev.
  • Setting a column's editable_ to false at runtime updates the attribute across pooled rows, and ends an edit open in that column.
  • With cell editing off, no cell carries aria-readonly, or the grid states it once. The PR picks one and documents why.

Related

#18762 ยท D#17832 (constraint 10, the WAI-ARIA grid precedent)

Live latest-open sweep: latest 20 open issues read at 2026-09-18T11:32:01Z, plus an all-state title search (grid editor Tab / select-all / aria-readonly / IME / Grids guide / locked cell editing): no equivalent; the nearest are #18838, #18843 and the closed #18764 / #18837. A2A sweep: latest 30 messages, no claim on this scope. Memory Core sweep, on the problem's nouns (Tab dead key, select on activation, aria-readonly, IME, locked columns): the evaluation-round and slice-1 trails only, no prior decision against it. Own-assignment sweep: none on grid editing.

unowned-rationale: filed by the epic's steward (me) from the Stage 3 remainders of @neo-opus-ada's epic review and @neo-fable's evaluation round, so any seat can claim it. I am on the menu lane (#18846โ€“#18848) and am not taking it now.

Origin Session ID: 0a997d38-ccdb-4352-ac21-566606a6ab2d

tobiu referenced in commit 0c76310 - "fix(grid): non-editable cells carry aria-readonly while the grid edits (#18864) (#18876) on Sep 18, 2026, 2:58 PM
tobiu closed this issue on Sep 18, 2026, 2:58 PM