Do not infer data loss from invisible text.Prove textarea value, DOM identity, backdrop rendering, extension injection, and computed style separately.

Route the first broken boundary.

No candidatesbrowser / DOM

Check clean profile, focus, remounts, injected scripts, and stale assets.

Candidates, wrong Enterkeyboard arbitration

Find the first consumed key inside the composition interval.

Text exists, glyphs do notrendering / extension

Compare value length, computed style, wrappers, and the aligned backdrop.

What rc.8 proves—and does not.

Bound

Start and end handlers are attached.

Guarded

Ref, isComposing, and keyCode 229 block submit.

Tested

Synthetic composition Enter does not send.

Still open

Real OS candidate-window initiation is not covered.

Route translation-extension interference.

Value changes

Invisible glyphs point to backdrop or computed style—not automatically lost draft state.

Node survives

A new wrapper or sibling proves injected DOM without proving a React remount.

Node replaced

A disconnected textarea and new node establish remount or subtree replacement.

Clean profile passes

Compare the exact extension version and site-scoped translation setting.

Recover at the exact site scope.

Exclude the DSH origin from translation, reload, and prove the draft. Do not patch generated JavaScript, installed extension files, or force the intentionally transparent textarea opaque.

Acceptance contract.

One composer, every input path.

The same textarea node must retain focus, selection, wrapping, structured-reference alignment, IME composition, and ordinary Enter behavior. Emptying a draft must not collapse the input area.

Keep the full diagnostic runbook.

The canonical guide includes an isolation matrix, privacy-safe DevTools capture, site-scoped recovery, and a real-browser regression contract.

Read the complete guide