Skip to content

Two-thumb: gesture stroke isn't cleared on backspace — re-typing a mis-recognized word accumulates geometry (words grow each retry) #7

Description

@SHAWNERZZ

Summary

Under two-thumb spacing (manual-spacing / combining grace), a tapped short word never auto-commits — it stays the open composing word — so the next swipe merges into it as multi-part composition, producing garbage. E.g. tap do, then swipe the next word → do's tap-points fuse with the swipe and recognize as long nonsense (disownment, disparagements, disestablishmentarian).

Repro

  1. Two-thumb spacing mode on (manual spacing or combining grace).
  2. Tap a short word, e.g. do.
  3. Swipe the next word without an explicit space first.
  4. The swipe merges into do → garbage instead of two separate words.

Root cause (traced from debug log)

In InputLogic.onStartBatchInput, a new gesture extends the open composing word whenever:

extendComposingWord = (mGestureManualSpacing || wasInCombiningMode) && cursorAtEndOfComposingWord

A tapped word like do is still the open composing word (it never auto-committed), so cursorAtEndOfComposingWord is true and the swipe extends it via the merged-trail (extend-base) path. Log shows composingBefore=do extendBase=true usedMergedTrail=true repeatedly across different garbage outputs.

This is multi-part composition working as designed (same mechanism as tap te + swipe chnologytechnology) — there's just no notion of "this open word looks finished, commit it instead of merging."

Confirmed NOT the extend-base leak (PR AsafMah#61) and NOT the casing fix (#6): every merge in the log had a real composing word; no fresh word inherited a stale base.

Options

  • A — commit-before-extend heuristic (scoped): before extending, if the open word is a complete dictionary word and the new input is a fresh swipe, commit it first instead of merging. Uses the complete signal from the spacing-policy design.
  • B — only extend fragments, not finished tap-words: don't merge a tap-built word into a following swipe unless explicitly joined (JOIN_NEXT).
  • C — spacing policy (long-term home): ties into the B6a/B6b signal-driven commit work.

Starting with option A.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions