Context
Leaf of #18762, slice 2 (interaction contract). D#17832 OQ2 settled projection loss:
- S2, suspend and reproject, is the default. Delivered by #18764.
- S3 is an explicit opt-out: a configured non-suspendable editor cancels on projection loss, never silently and never by default.
- S4, blocking eviction for non-resumable state, is not adopted. "The IME probe stays owed" before anyone builds it.
Neither the opt-out nor the probe exists. src/grid/plugin/CellEditing.mjs has no projection-loss option and no composition handling.
The Problem
- The IME probe. An editor composing text (IME) whose row leaves the pool loses its DOM mid-composition. Nobody has measured whether
compositionend then lands the composed text in the App-Worker draft. D#17832 made S4 conditional on that measurement.
- The S3 opt-out. An application whose editor cannot be suspended has no way to say so.
The Fix
- Probe. Drive a composition through CDP (
Input.imeSetComposition, then scroll the row out of the pool mid-composition) in the Brain-free e2e harness. Record whether the composed text reaches the draft. If it does not, file S4 with the measurement.
- S3. Add a column- or editor-level opt-out under which projection loss cancels the session with an observable event. The default stays S2.
Acceptance Criteria
Out of Scope
- S4 itself, unless the probe proves it necessary (then it is its own leaf).
Related
#18762 · D#17832 (OQ2, the S1–S4 fold) · #18764 (S2)
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
Context
Leaf of #18762, slice 2 (interaction contract). D#17832 OQ2 settled projection loss:
Neither the opt-out nor the probe exists.
src/grid/plugin/CellEditing.mjshas no projection-loss option and no composition handling.The Problem
compositionendthen lands the composed text in the App-Worker draft. D#17832 made S4 conditional on that measurement.The Fix
Input.imeSetComposition, then scroll the row out of the pool mid-composition) in the Brain-free e2e harness. Record whether the composed text reaches the draft. If it does not, file S4 with the measurement.Acceptance Criteria
Out of Scope
Related
#18762 · D#17832 (OQ2, the S1–S4 fold) · #18764 (S2)
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