LearnNewsExamplesServices
Frontmatter
id18837
titleThe public grid cellEditing example has no e2e witness
stateClosed
labels
enhancementaitestinggrid
assigneesneo-fable
createdAtSep 18, 2026, 12:30 PM
updatedAtSep 18, 2026, 1:19 PM
githubUrlhttps://github.com/neomjs/neo/issues/18837
authorneo-fable
commentsCount0
parentIssue18762
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 18, 2026, 1:19 PM

The public grid cellEditing example has no e2e witness

Closed v13.2.0/archive-v13-2-0-chunk-21 enhancementaitestinggrid
neo-fable
neo-fable commented on Sep 18, 2026, 12:30 PM

Context

Leaf of #18762, from the Fable evaluation round its Unresolved Liveness names. The epic's delivered coverage — test/playwright/component/grid/CellEditing.spec.mjs and test/playwright/e2e/grid/CellEditingPooling.spec.mjs — drives one synthetic fixture, test/playwright/component/apps/grid-cell-editing, whose only editor is the default text field. examples/grid/cellEditing, the app a reader opens to try cell editing, is booted by one spec (component/grid/ColumnRendererScope.spec.mjs) that proves it renders rows; nothing edits a cell in it.

The Problem

Driving the example by real pointer and keyboard at dev@3f859a4803 found the text and number editors completing the whole loop and both picker editors broken (filed beside this leaf: the picker trigger ending the edit, and ComboBox on a bound store). None of it could have reddened CI: no arm opens a non-text editor, and no arm touches the public example. D#17832's evidence bar assigns exactly this to public proof: "Exercise real pointer and keyboard input, then assert both DOM focus and App-Worker truth" on the existing example.

The Architectural Reality

  • examples/grid/cellEditing/MainContainer.mjs — four editable columns: text (firstname, lastname), NumberField (randomNumber, step 5, 0–100), DateField (randomDate), CountryField with bind: {store: 'stores.countries'}; githubId is editable: false; the toolbar swaps the selection model and disables the plugin.
  • buildScripts/util/e2eCiSelection.mjs — test/playwright/e2e/grid is in RUN_PATHS as a directory, and the e2e config deselects any spec whose source contains neuralLink, so a Brain-free spec in that folder executes in CI.
  • App-Worker truth without the Brain: Neo.worker.App.getConfigs, the read CellEditingPooling.spec.mjs already uses.

The Fix

One Brain-free spec, test/playwright/e2e/grid/CellEditingExample.spec.mjs, on the public example, real pointer and keys only, asserting DOM focus and the record:

  • text: double-click, type, Enter → the record and the cell carry the value, focus is on grid.View; Enter and F2 on the selected cell activate too;
  • number: the spin trigger and ArrowUp step by 5 inside one session, Enter commits (the value's type is not asserted: the DOM cannot tell 100 from '100' without the Brain);
  • Escape discards the draft and the record is unchanged;
  • a click on another cell commits the draft and selects that cell;
  • githubId refuses every activation gesture before any editor exists;
  • the plugin's disabled checkbox stops activation and re-enables it.

The date-picker and combo arms land with their defect leaves, in this spec.

Acceptance Criteria

  • The spec above exists, runs in the CI e2e tier, and is green on dev.
  • Each arm is killed by one named mutation of src/grid/plugin/CellEditing.mjs — or, for focus return, of component.Base#destroy, which owns it — recorded in the PR: no arm passes against an engine that cannot commit, cancel, refuse or hand focus back.
  • No correctness sleeps; every wait is a polled condition.
  • 20 consecutive local runs green before the PR opens.

Out of Scope

Picker and combo editor arms (their own leaves) · Tab traversal and select-on-activation (interaction-contract scope, unfiled) · high-cardinality sort/filter/locked arms · the Grids guide · the Table control.

Avoided Traps

  • A Neural Link whitebox spec: green on a Brain seat, deselected in CI — the trap the epic already names.
  • Arms asserting today's picker behaviour: that would ossify two defects as contract.

Related

Parent #18762 · D#17832 (evidence bar, "Whitebox E2E") · #18764 · #18771.

Live latest-open sweep: latest 20 open issues at 2026-09-18T10:27Z plus all-state searches for CellEditing / cell editing / picker — no equivalent. A2A sweep (latest 12, all read-states): no claim on this scope. Memory sweep: one hit, my own measurement checkpoint. Own open assignments: #15252 only.

Origin Session ID: 323cb989-06a2-4b3f-8d70-912d67796c11

Retrieval Hint: "examples/grid/cellEditing e2e witness real pointer keyboard number date country editor"

tobiu referenced in commit 5b50396 - "test(grid): the public cellEditing example gets an e2e witness (#18837) (#18842) on Sep 18, 2026, 1:19 PM
tobiu closed this issue on Sep 18, 2026, 1:19 PM